在其中一个应用程序工作流程中,我有超过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?
注意:我也标记了量角器,因为我在量角器中也有类似的要求。
答案 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();