该网页包含2个框架。
我的Selenium脚本:
@FindBy(how = How.XPATH, using = ".//iframe") private List <WebElement> framesList;
public myPage (WebDriver driver){
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void goFrame2() {
if (framesList.size() >= 1) {
driver.switchTo().frame(framesList.get(1));
}
}当我执行该脚本时,列表framesList的大小始终为1。仅检测到一个帧。如果我在PageFactory.initElements(driver,this)之前添加一个5秒的Thread.sleep;检测到第二个帧,列表的大小是2。
我当然不想使用Thread.sleep。如何正确检测这两个帧?
朱利安
发布于 2015-04-23 02:29:48
因此,您应该显式地找到第二个框架的xpath/css选择器(它肯定不同于第一个框架),并等待它出现。只有在这之后,你才能使用你的代码。下面是一个如何等待包含名为“class”的类的帧的示例:
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.cssSelector("frame.someclass")));发布于 2016-06-11 01:34:22
您应该使用AjaxElementLocatorFactory
创建类的构造函数,如下所示:
public class Login{
public Login(WebDriver driver) {
// TODO Auto-generated constructor stub
this.driver = driver;
PageFactory.initElements(new AjaxElementLocatorFactory(driver, 20), this);
}
}它将在指定(20秒)的时间内等待元素。
https://stackoverflow.com/questions/29797436
复制相似问题