我正在使用 Selenium WebDriver 和 Java 编写自动化测试,其中需要大量 waits 以确保在采取下一个操作之前已加载适当的元素。
我试过这个:
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
它将等待指定的时间间隔,如果未找到元素则失败,这:
WebDriverWait wait = new WebDriverWait(driver, 100);
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver webDriver) {
System.out.println("Searching for the Companies dropdown");
return webDriver.findElement(By.id("ctl00_PageContent_vpccompanies_Input")) != null;
}
});
如果找不到该元素,它将无限期挂起。
我想要的是能够搜索该元素几次尝试,然后失败并显示错误消息。
将代码包装到循环中并循环,直到查找条件匹配或退出循环的额外条件。 使用
isElementPresent(element)
检查查找条件。
我想说,将
your element access code
放入 while 循环中,该循环会在 success
或 number of attempts
上中断。
例如(伪代码)
int numAttemps = 0;
int specifiedAttempts = 5;
boolean success = false;
do{
numAttemps++;
try{
//access the element
WebElement element = driver.findElement(By.id(..));
success = true; //<--If it reaches here means success
}catch(NoSuchElementException nse)
//one attempt failed
}
}while(!success || numAttemps <specifiedAttempts);
if(!success){
System.out.println("Couldn't load after " +specifiedAttempts+ " attempts");
}