首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium -如何使用Pom对象模式和PageFactory获取所有框架?

Selenium -如何使用Pom对象模式和PageFactory获取所有框架?
EN

Stack Overflow用户
提问于 2015-04-22 20:22:03
回答 2查看 1K关注 0票数 0

该网页包含2个框架。

我的Selenium脚本:

代码语言:javascript
复制
@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。如何正确检测这两个帧?

朱利安

EN

回答 2

Stack Overflow用户

发布于 2015-04-23 02:29:48

因此,您应该显式地找到第二个框架的xpath/css选择器(它肯定不同于第一个框架),并等待它出现。只有在这之后,你才能使用你的代码。下面是一个如何等待包含名为“class”的类的帧的示例:

代码语言:javascript
复制
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.cssSelector("frame.someclass")));
票数 0
EN

Stack Overflow用户

发布于 2016-06-11 01:34:22

您应该使用AjaxElementLocatorFactory

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

代码语言:javascript
复制
public class Login{

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

    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29797436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档