1、隐式等待
@Test
public void testImplictWait(){
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
driver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS);
driver.findElement(By.id("dologin")).click();
driver.findElement(By.id("register"));
}
隐式等待不推荐使用,它的缺点在于如果设定了等待时长,则在页面元素没有被立刻找到的情况下,测试程序也必须等待设定的时长。例如,设定了隐式等待时间为10秒,即使页面元素过了5秒后显示了,测试程序也会等待10秒后再进行后续页面元素的查找工作。
推荐使用显示等待,如果过了5秒返回了,则测试程序会立即执行测试程序后续逻辑,节约测试程序的运行时间。
2、显示等待
@Test
public void testExplicitWait(){
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebDriverWait wait = new WebDriverWait(driver,10);//设定等待时间为10秒
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//p")));//判断p标签对象是否在页面中
}
使用ExpectedConditions类中自带的方法,可以进行显式等待的判断。只有满足显式等待的条件要求,测试代码才会继续向后执行后续的测试逻辑。当显式等待条件未被满足,在设定的最大显式等待时间阈值内,会停在当前代码位置进行等待,直到设定的等待条件被满足。
3、自定义显式等待
@Test
public void testExplicitWait(){
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebDriverWait wait = new WebDriverWait(driver,10);
WebElement el = wait.until(new ExpectedCondition(){
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("dologin"));
}
});//自定义ExpectedCondition类的方法,其中new ExpectedCondition生成了一个此接口的匿名对象
System.out.println(el);
}
4、处理JS弹出窗口
使用Alert类操作弹出窗口。
(1)操作Alert弹窗(弹窗中只有一个确定按钮)
@Test
public void testHandleAlert(){
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebDriverWait wait = new WebDriverWait(driver,10);
WebElement el = wait.until(new ExpectedCondition(){
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("alert"));
}
});//找到一个触发弹窗的元素
el.click();//点击弹出窗口
Alert temp = driver.switchTo().alert();//创建一个Alert的弹窗对象
temp.accept();//选中确定按钮
}
(2)操作confirm弹窗(弹窗中只有一个确定按钮和一个取消按钮)
@Test
public void tesHandleconfirm(){
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebDriverWait wait = new WebDriverWait(driver,10);
WebElement el = wait.until(new ExpectedCondition(){
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("confirm"));
}
});//找到一个触发弹窗的元素
el.click();//点击弹出窗口
Alert temp = driver.switchTo().alert();//创建一个confirm的弹窗对象
String content = temp.getText();//获取弹窗中的提示文本
temp.dismiss();//选中取消按钮
assertTrue(content.equals("我是确认提示框!"));//断言提示文本是否正确
}
(3)操作confirm弹窗(弹窗中只有一个确定按钮和一个取消按钮,并且可以输入文本)
@Test
public void tesHandlePrompt(){
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebDriverWait wait = new WebDriverWait(driver,10);
WebElement el = wait.until(new ExpectedCondition(){
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("prompt"));
}
});//找到一个触发弹窗的元素
el.click();//点击弹出窗口
Alert temp = driver.switchTo().alert();//创建一个confirm的弹窗对象
temp.sendKeys("hello world");
String content = temp.getText();//获取弹窗中的文本
temp.dismiss();//选中取消按钮
assertTrue(content.equals("我是确认提示框!"));
}
@Test
public void testHandleFrame(){
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/demo/frame.html");
WebElement left = driver.findElement(By.id("leftframe"));//找到左边frame元素
driver.switchTo().frame(left);//进入左侧frame页面
driver.findElement(By.cssSelector("input[name='left']")).sendKeys("hello");//对左侧frame页面的元素进行操作
driver.switchTo().defaultContent();//返回到最初默认页面
}
@Test
public void testWindow(){
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/demo/window.html");
String parent = driver.getWindowHandle();//进入当前窗口
driver.findElement(By.id("helpbutton1")).click();//点击触发按钮
Set<String> all = driver.getWindowHandles();//获取当前所有窗口
Iterator<String> iter= all.iterator();//将当前所有窗口存入集合进行遍历
String temp;
while(iter.hasNext()){
temp = iter.next();
if (!temp.equals(parent)){
driver.switchTo().window(temp);//判断是否为新弹出的窗口并进入
}
}
}
7、操作浏览器中的cookie
@Test
public void testCookie(){
WebDriver driver = new FirefoxDriver();
driver.get("http://www.sougou.com");
//得到当前页面下所有的cookie,并且输出它们的所在域、name、value、有效日期和路径。
Set cookies = driver.manage().getCookies();
System.out.println(String.format("domain->name->value->expiry->path"));
for(Cookie cookie:cookies){
System.out.println(String.format("%s->%s->%s->%s->%s",
cookie.getDomain(),cookie.getName(),cookie.getValue(),
cookie.getExpiry(),cookie.getPath()));
}
//删除cookie的3种方法
//第一种:通过cookie的name属性
driver.manage().deleteCookieNamed("cookiename");
//第二种:通过cookie对象
driver.manage().addCookie(newcookie);
//第三种:全部删除
driver.manage().deleteAllCookies();
}