在少数地方,我面临一些未处理的警报,因此对于计划检查警报是否存在的每次点击,我都使用以下代码,
public boolean isAlertPresent(){
try{
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
Alert a=driver.switchTo().alert();
a.accept();
return true;
}
catch (NoAlertPresentException e) {
return false;
}
finally{
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
}
}
但上面的代码需要一些时间来检查警报是否存在,因为我打算对每次点击都使用这种方法,等待的成本太高,使上面代码中的隐式等待为零没有效果。任何人都可以帮忙吗?
最佳答案
隐式等待用于分配全局超时,这意味着一旦分配,selenium 将在每次尝试查找元素时等待该时间(最大)。另一方面,显式等待可用于专门为网页中的任何元素分配超时,它会覆盖隐式等待设置的超时。
因此,对于上述情况,您可以像这样尝试显式等待:
public boolean isAlertPresent(){
try{
Alert a = new WebDriverWait(driver, 10).until(ExpectedConditions.alertIsPresent());
if(a!=null){
System.out.println("Alert is present");
driver.switchTo().alert().accept();
return true;
}else{
throw new Throwable();
}
}
catch (Throwable e) {
System.err.println("Alert isn't present!!");
return false;
}
}
这将在 10 秒内检查警报是否存在。如果它在其中找到警报,它将返回“true”,否则它将返回“false”。
关于java - 如何在零隐式等待的情况下检查 Selenium 中是否存在警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27074625/