四、数据驱动测试
1、使用隐式的等待同步测试
当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常。
一旦设置了隐式等待,则它存在在整个WebDriver对象实例的生命周期中,但是隐式的等待会让一个正常响应的测试变慢,会在寻找每个元素的时候都进行等待。
driver.manage().timeouts().implicitlyWait(10,
TimeUnit.SECONDS);
2、使用显示的等待同步测试
//设置等待时间10秒
WebDriverWait wait = new
WebDriverWait(driver, 10);
//等待直到符合元素文本内容出现(locator指定的元素中是否存在text指定的文本信息。)
Wait.until(ExpectedConditions.textToBePresentInElement(locator,
text)
3、使用自定义条件同步测试
3.1在指定时间内定位到指定元素。
WebElement message = wait.until(
New
ExpectedCondition<WebElement>(){
PublicWebElementapply(WebDriver d){
Return d.findElement(By.cssSelector(“#myDiv p”));
}
});
3.2等待元素的属性值改变
Boolean classname = wait.until(
New
ExpectedCondition<Boolean>(){
PublicBooleanapply(WebDriver d){
Return d.findElement(By.cssSelector(“.jq-codeDemo p”))
.getAttribute(“class”)
.contains(“ohmy”);
}
});
3.3等待元素变为可见
(new WebDriverWait(driver, 10)).until(
new
ExpectedCondition<Boolean>(){
publicBooleanapply(WebDriver d){
return d.findElement(By.id(“page4”)).isDisplayed();
}
});
3.4等待DOM的事件
(new WebDriverWait(driver, 10)).until(
New ExpectedCondition<Boolean>(){
Public Boolean apply(WebDriver d){
JavascriptExecutor
js = (JavascriptExecutor) d;
Return (Boolean)
js.executeScript(“returnjQuery.active==
0”);
}
}
)
4、检查元素是否存在
在进行下一步操作的时候检查页面的元素是否存在,对于构建一个稳定的测试是很有帮助的。
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (Exception
e) {
e.printStackTrace();
return false;
}
}
5、检查元素的状态
isEnable() 检查元素是否可用
isSelected() 检查元素是否被选中
isDisplayed() 检查元素是否可见
6、通过名称识别和处理一个弹出窗口
包括:识别弹出窗口,将driver转到新的窗口,在新的窗口中执行测试步骤,然后再跳转回最初的窗口。
通过name属性或窗口的句柄handle来识别窗口。
需要先保存父窗口——关闭子窗口后——再返回到父窗口
7、通过标题识别和处理一个弹出窗口
getTitle()
8、通过网页内容识别和处理一个弹出窗口
getPageSource().contains(“”)——这种方法速度比较慢。
9、处理一个简单的JavaScript警告框
WebDriver提供了Alert类来处理JavaScript警告框。
Alert alertBox =
driver.switchTo().alert();
alertBox.accept();
alertBox.getText()得到警告框上的信息。
10、处理一个确认框(选择OK或Cancel按钮)
alertBox.accept();//点击确认按钮
alertBox.dismiss();//点击取消按钮
11、处理一个提示框
(除了确认和取消按钮之外,还可以用来让用户进行数据输入操作)
Alert promptAlert =
driver.switchTo().alert();
//输入一些数据
promptAlert.sendKeys("洛阳亲友如相问,就说我在写代码");
//点击确定按钮
promptAlert.accept();
12、识别处理框架(frame)
---可通过ID或name识别框架
Driver.switchTo().frame(“id or name”);//通过ID或name定位到frame
Driver.switchTo().defaultContent();//进行了一次跳转后需要先定位到默认框架中,在跳转到其他框架
---还可以通过索引index来获取焦点
13、通过页面内容识别和处理框架
Driver.switchTo().frame();
Driver.getPageSource().contains(“middle”);
14、处理iframe
如果iframe存在父框架,需要先找到父框架,再定位到iframe。
如:
//首先获得父窗口
driver.switchTo().frame("left");
//取得iframe元素
WebElement weiboIframe.
=driver.findElement(By.tagName("iframe"));
//获得iframe窗口
driver.switchTo().frame(weiboIframe);