51Testing软件测试论坛

标题: 【佳乐Selenium】DAY-2 iframe特殊处理和等待JS页面 [打印本页]

作者: 赵佳乐SMILE    时间: 2015-3-3 15:56
标题: 【佳乐Selenium】DAY-2 iframe特殊处理和等待JS页面
DAY-2
写了两个超链接的 然后就遇到了问题 xpath无法定位
发现我们的页面都是JS里面嵌套其他JS生成的

一、当xpath无法定位时
查看是否有iframe
如果有iframe时 要先跳进iframe 然后在跳出

定位到页面中frame标签:
如果一个页面是一个html元素, 只有一个head, 一个body, 那么使用WebDriver.FindElement()查找页面中的任何一个元素都没有问题。但是,由于页面中<frame ... 的使用,使得一个原始的html页面中可以包含多个子html页面, 在这种情况下,使用WebDriver.FindElement()查找页面某个元素,如果元素是属于的html且非frame下的, 那么没有问题。若该元素是属于某个子的<frame ...下的,获得页面元素会失败的。所以也需要用到switchTo。
代码如下:
driver.switchTo().frame(driver.findElement(By.tagName("frame")));
/*在frame中进行一系列操作后....*/
driver.switchTo().defaultContent(); //返回之前的

二、等待JS生成
方法一
Tread.sleep(1000);

方法二 设置显式等待时长(一般针对某一个元素):
new WebDriverWait(driver,5).until(new ExpectedCondition<Boolean>(){
@Override
public Boolean apply(WebDriver d) {
if (d.findElement(By.xpath("/button[1]")).isDisplayed()) {
return true;
} else {
return false;
}
}
});

driver.findElement(By.xpath("/button[1]")).click();

方法三
public boolean isExistWindow(String windowTitle){  
boolean flag = false;
Set<String> handles = driver.getWindowHandles();  
for (String tmp : handles) {
    //跳入windows
    driver.switchTo().window(tmp);  
    if (driver.getTitle().equals(windowTitle)){
        flag = true;  
        break;
    }
}
return flag;
}
作者: dls0225    时间: 2015-3-9 15:52
感谢分享。
作者: Miss_love    时间: 2015-3-30 20:34
有人指导进步很快呀




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2