WebDriverWait。存在或不存在快速检查元素

时间:2015-04-02 06:17:57

标签: java selenium selenium-webdriver webdriver

我遇到了问题,我不知道如何正确解决问题。情况:用户输入登录名和密码,然后他可以在两个页面中的一个。 问题是:如何正确检查我们在哪个页面?

1 即可。我想使用WebDriverWait,所以我的隐含等于= 0毫秒,

2 即可。我使用Page Object模式,使用AjaxElementLocatorFactory

初始化页面

一个即可。所以,如果我要做方法检查一些这样的元素:

@FindBy(id = "pushOutMessage")
private WebElement messageText;

public boolean pageIsPresent() {
    return messageText.isDisplayed();
}

这是不对的,因为如果页面错误,那么WebDriver将等待这个元素的N秒。所以它使我的简单测试变慢,非常慢。

B'/ strong>即可。如果我用“findElement”检查元素 - 我的implicity等待是0毫秒,所以如果元素缓慢加载,pageIsPresent返回false,即使页面是正确的。

我希望还有其他方法可以做到这一点。需要你的帮助!

2 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。但最简单的方法是检查elemenet计数

我宁愿做

@FindBy(id = "pushOutMessage")
private List<WebElement> elements;

public int pageIsPresent() {
    return elements.size();
}

并且,在某处测试pageIsPresent()为0或更大。如果大于 0 ,我们知道返回了页面元素

并且,由于您正在使用pageobject模式和Java,我建议您创建一个重载到baseClass,它将在每次实例化一个新的pageobject时检查一个选择器。我和TestNG有一个git repo here。这可能会有所帮助

答案 1 :(得分:0)

用户输入或点击提交或登录按钮后,您可以执行以下操作:

public Object clickLogin() {
    loginElement.click();
    try{
        new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementedLocatedBy(By.id("pushOutMessage")));
    return PageFactory.initElements(driver, FirstPage.class);
    } catch (TimeoutException te) {
        return PageFactory.initElements(driver, SecondPage.class);
    }
}