Selenium - 如何使用Pom Object模式和PageFactory获取所有帧?

时间:2015-04-22 12:22:03

标签: java selenium selenium-webdriver pageobjects

网页包含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));
    }
}

当我执行脚本时,liste framesList的大小始终为1.只检测到一帧。如果我在PageFactory.initElements(驱动程序,这个)之前添加5秒的Thread.sleep;检测到第二帧,列表大小为2.

当然我不想使用Thread.sleep。 如何正确检测2帧?

于连

2 个答案:

答案 0 :(得分:0)

所以,你应该明确地找到第二帧的xpath / css选择器(它肯定会与第一帧不同)并等待直到它出现。只有在那之后你才能使用你的代码。下面是一个如何等待包含名为&#34; class&#34;:

的类的框架的示例
var array = [1,2,3,4];
var lastEl = array.last();    //  => 4

答案 1 :(得分:0)

您应该使用AjaxElementLocatorFactory

创建类的构造函数,如下所示:

public class Login{

     public Login(WebDriver driver) {
        // TODO Auto-generated constructor stub
        this.driver = driver;
        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 20), this);

    }
}

它将等待指定(20秒)时间的元素。