WebDriver等到找到这个或那个元素

时间:2016-05-17 19:41:04

标签: selenium-webdriver webdriver protractor

在其中一个应用程序工作流程中,我有超过10页要导航。

我必须不断点击“下一步”按钮 - 它会进行AJAX调用以重新加载新内容,并且还会重新加载“下一步”按钮。 导航的页数并不总是10.可能是10-100之间的任何内容。

只要找到ID为“testcomplete”的webelement,我的测试就会完成。

所以目前我使用的是ExpectedConditions()

WebDriverWait wait = new WebDriverWait(driver, 30);

//Keep clicking next
while(isNextPresent()){
        NextButton.click();
}

//testcomplete reached here
System.out.println("test complete");




private boolean isNextPresent(){
    try{
        WebElement element = wait.until(ExpectedConditions.visibilityOf(NextButton));
        return true;
    }catch(Exception e){
        //
    }
    return false;
}

目前我的代码工作正常。但我正在努力改进它。当存在id为'testcomplete'的元素时,我讨厌不必要的30秒等待。因为那个时候'NextButton'不会出现。

如何改进此isNextPresent功能?即,当'testcomplete'而不是等待30秒时立即返回false?

注意:我也标记了量角器,因为我在量角器中也有类似的要求。

2 个答案:

答案 0 :(得分:1)

您可以结合两个元素的条件,并根据事实首先为' visibilityOf(myElement)'返回true的事实采取行动。也许在伪这样的事情(对不起,没有IDE):

loop(i < 30){
      // wait NextBtn for 1 sec, if true click and break
      // wait TestCopmlete for 1 sec
}

答案 1 :(得分:1)

使用EC.or(),la:

wait.until(ExpectedConditions.or(
    ExpectedConditions.visibilityOf(NextButton),
    ExpectedConditions.visibilityOf(element(by.id('testcomplete')))
));

然后在此之后回复expect所需的状态:

expect(NextButton.isDisplayed()).toBeTruthy();