?chromedriver各版本下载地址
CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?path=chromedriver/需要下载chromedriver.exe驱动程序。
页面元素定位
1. findElement(By.id("su"));// 根据id定位
2. findElement(By.name("wd"));// 根据name属性定位
3. findElement(By.className("s_btn"));// 根据class定位
4. findElement(By.cssSelector("#su"));// 通用,可以使用id、class、组合属性
5. findElement(By.cssSelector(".su"));
sendKeys("腾讯");// 给element做输出,可以理解为设置值
click();// 点击按钮
clear();// 清除内容n
get("https://www.baidu.com")// 访问链接
getText()// 获取元素的文本信息
public class Test {
public static void main(String[] args) {
// 设置?chromedriver驱动,chromedriver.exe驱动程序放置的位置
System.setProperty("webdriver.chrome.driver","src/main/resources/chromedriver.exe");
// 创建谷歌浏览器驱动会话
ChromeDriver driver = new ChromeDriver();
// 访问链接
driver.get("https://www.baidu.com");
// 元素定位
WebElement submit = driver.findElement(By.id("su"));// 根据id定位到百度搜索按钮
WebElement submit2 = driver.findElement(By.cssSelector("#su"));
WebElement search = driver.findElement(By.name("wd"));// 根据name定位到百度搜索框
// 根据标签到百度搜索框,如果存在多个input,默认找到第一个,不推荐使用
// WebElement search3 = driver.findElement(By.tagName("input"));
WebElement submit3 = driver.findElement(By.className("s_btn"));// 根据class定位到百度搜索按钮
// 给element做输出,可以理解为设置值
search.sendKeys("腾讯");
submit.click();// 点击按钮
search.clear();// 清除内容
}
}
?Navigation对象使用
WebDriver.Navigation navigation = driver.navigate();
navigation.to("url");// 访问指定链接
navigation.refresh();// 浏览器刷新
navigation.back();// 浏览器后退操作
navigation.forward();// 浏览器前进操作
硬性、隐式、显示等待?
当我们在自动测试代码中想要获取页面元素定位时,因代码的执行速度太快,而页面还没加载完成时,这时我们想要定位到的元素就无法获取到导致报错无法在进行下去。
解决办法:让进程等待一会,等到页面加载完。
硬性等待
Thread.sleep(3000)
缺点:无法确定页面何时才会加载完成,时间不好控制?。必须等待设置的时间,造成时间上的浪费。
隐式等待
在设置的超时时间范围内不断查找元素,直到查到元素或超时。
driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
优点:灵活
缺点:设置是相对全局的,在WebDriver实例整个生命周期有效,但并不是所有元素都需要等待。
显示等待
用来等待某个条件发生后再继续执行后续代码,如(找到元素,元素可点击,元素可显示)
// 显示等待对象,传入浏览器驱动对象,超时时间
WebDriverWait webDriverWait = new WebDriverWait(driver, Duration.ofSeconds(5));
// 等待条件
webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("a[text() = '教育']")));
方法 | 等待条件 | visibilityOfElementLocated(By b) | 页面元素在页面存在并且可见 | elementToBeClickable(By b) | 页面元素是否在页面上可用和可点击 | elementToBeSelected(WebElement e) | 页面元素处于被选中状态 | textToBePresentInElement(WebElement e, String text) | 在页面元素中是否包含特定的文本 | presenceOfElementLocated(By b) | 页面元素在页面中存在 |
窗口切换
// 获取到所有窗口句柄
Set<String> handles = driver.getWindowHandles();
// 对集合窗口进行遍历
for (String handle : handles) {
// 切换窗口
driver.switchTo().window(handle);
// 如果是要切换的目标窗口就结束
if(driver.getTitle().equals("目标窗口.html")){
break;
}
}
select下拉框操作
Select select = new Select(WebElement e);
select.getOptions();// 获取所有选项
select.selectByIndex(index);// 根据索引选择对应元素
select.selectByValue(value);// 选择指定value值对应选项
select.selectByVisibleText(text);// 选择文本值对应的选项
|