一、同步测试流
晒酷学院qq群:979438600
1、隐式等待(不常用)
此等待方式是在查找元素时,元素没有立即出现,将等待指定时间后再去查找DOM,默认为0,一旦设置后,将存在webDriver对象的生命周期中
示例:
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
此方法表示如果查找的元素没有立即出现,将等待10s后再去查找DOM,如果元素10s后还不存在,则抛出异常
2、显示等待(常用)
相比隐式等待,此方法效率较高,当指定元素没有立即出现时,它会在指定时间范围内,500ms进行一次查找,超出指定时间,则抛出异常
WebDriverWait 和 ExpectedConditions 类执行显示等待
ExpectedConditions类提供了很多预定义好的条件来等待,下面介绍几个比较常用的条件
a. presenceOfElementsLocatedBy(By locator)
此条件是检查某个元素出现在dom中,示例如下:
WebDriverWait wait = new WebDriverWait(driver,10);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("hello")));
该示例是在检查id为hello的元素是否存在,如果存在返回这个元素,返回值有两种,一是boolean值,二是WebElement对象
b .titleContains(java.lang.String title)
WebDriverWait wait = new WebDriverWait(driver,10);
Boolean flag = wait.until(ExpectedConditions.titleContains("hello"));
该示例是在检查当前页面标题是否包含hello,返回boolean值
c.visibilityOfElementLocated(By locator)
同上操作,返回值为WebElement对象
3、自定义条件等待(常用)
WebDriverWait wait = new WebDriverWait(driver,5);
WebElement hello = wait.until(
new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver driver){
return driver.findElement(By.cssSelector("#username"));
}
}
);
二、检查元素的状态
WebElement类提供了以下方法帮助我们来检查某元素当前状态
1、isEnabled()检查元素是否启用
2、isSelected()检查元素是否被选中(单选框,多选框,下拉框)
3、isDisplay()检查元素是否可见
三、处理弹出窗口
1、通过窗口句柄来识别弹出窗口
String parentWindow = driver.getWindowHandle();//将父窗口句柄保存在parentWindow变量中
driver.getElementById("popUp").click();//单击popUp按钮,弹出新窗口
Set<String> allHandle = driver.getWindowHandles();//得到当前打开的所有窗口
Iterator<String> iter = allHandle.iterator();
while(iter.hasNext()){
String temp = iter.next();
if(!temp.equals(parentWindow)){
driver.switchTo.window(temp);
}
}
2、通过页面标题来识别弹出窗口
String parentWindow = driver.getWindowHandle();//将父窗口句柄保存在parentWindow变量中
driver.getElementById("popUp").click();//单击popUp按钮,弹出新窗口
Set<String> allHandle = driver.getWindowHandles();//得到当前打开的所有窗口
Iterator<String> iter = allHandle.iterator();
while(iter.hasNext()){
String temp = iter.next();
if(driver.switchTo.window(temp).getTitle.equals("helloworld")){
driver.switchTo.window(temp);
}
}
3、通过页面内容来识别弹出窗口
String parentWindow = driver.getWindowHandle();//将父窗口句柄保存在parentWindow变量中
driver.getElementById("popUp").click();//单击popUp按钮,弹出新窗口
Set<String> allHandle = driver.getWindowHandles();//得到当前打开的所有窗口
Iterator<String> iter = allHandle.iterator();
while(iter.hasNext()){
String temp = iter.next();
driver.switchTo.window(temp);
if(driver.getPageSource().contains("helloworld")){
break;
}
}
三、处理js弹出窗口
1、处理js警告框,通过webdriver提供的Alert类处理警告框
driver.findElementById("alert").click();//点击弹出警告框
Alert alertbox = driver.switchTo().alert();
alertBox.accept();
2、处理js确认框
driver.findElementById("alert").click();//点击弹出确认框
Alert alertbox = driver.switchTo().alert();
alertBox.accept();//点击确认
alertBox.dismiss();//点击取消
3、处理JS提示框
driver.findElementById("alert").click();//点击弹出确认框
Alert alertbox = driver.switchTo().alert();
alertBox.sendKeys("helloworld")//向提示框中输入“helloworld”
alertBox.accept();//点击确认
alertBox.dismiss();//点击取消
四、识别处理frame框架
1、通过id或者name处理frame框架
driver.switchTo.frame("ID");
driver.switchTo().frame("name");
driver.switchTo().defaultContent(); //回到最初的页面
2、通过index来处理frame
driver.switchTo().frame("index");
五、识别处理iframe框架
step 1:
WebElement element = driver.findElementById("iframe");
step 2:
driver.switchTo().frame(element);