使用 Java 在 Selenium WebDriver (selenium 2) 中处理警报
Posted
技术标签:
【中文标题】使用 Java 在 Selenium WebDriver (selenium 2) 中处理警报【英文标题】:Alert handling in Selenium WebDriver (selenium 2) with Java 【发布时间】:2012-01-04 21:28:15 【问题描述】:我想检测是否弹出警报。目前我正在使用以下代码:
try
Alert alert = webDriver.switchTo().alert();
// check if alert exists
// TODO find better way
alert.getText();
// alert handling
log().info("Alert detected: " + alert.getText());
alert.accept();
catch (Exception e)
问题是如果网页的当前状态没有警报,它会等待特定的时间,直到达到超时,然后抛出异常,因此性能非常糟糕。
有没有更好的方法,也许是我可以用于动态发生警报的警报事件处理程序?
【问题讨论】:
【参考方案1】:这对我来说是使用 Explicit Wait from here WebDriver: Advanced Usage
public void checkAlert()
try
WebDriverWait wait = new WebDriverWait(driver, 2);
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
alert.accept();
catch (Exception e)
//exception handling
【讨论】:
这很有趣,可以解决问题。是否可以将等待方法的超时设置为零?【参考方案2】:编写如下方法:
public boolean isAlertPresent()
try
driver.switchTo().alert();
return true;
// try
catch (Exception e)
return false;
// catch
现在,您可以使用上面写的方法检查是否存在警报,如下所示:
if (isAlertPresent())
driver.switchTo().alert();
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();
【讨论】:
【参考方案3】: 警报警报 = driver.switchTo().alert(); 警报.accept();您也可以拒绝提醒框:
警报警报 = driver.switchTo().alert(); alert().dismiss();【讨论】:
【参考方案4】:try
//Handle the alert pop-up using seithTO alert statement
Alert alert = driver.switchTo().alert();
//Print alert is present
System.out.println("Alert is present");
//get the message which is present on pop-up
String message = alert.getText();
//print the pop-up message
System.out.println(message);
alert.sendKeys("");
//Click on OK button on pop-up
alert.accept();
catch (NoAlertPresentException e)
//if alert is not present print message
System.out.println("alert is not present");
【讨论】:
【参考方案5】:你可以试试
try
if(webDriver.switchTo().alert() != null)
Alert alert = webDriver.switchTo().alert();
alert.getText();
//etc.
catch(Exception e)
如果这不起作用,您可以尝试遍历所有窗口句柄并查看警报是否存在。我不确定警报是否使用 selenium 作为新窗口打开。
for(String s: webDriver.getWindowHandles())
//see if alert exists here.
【讨论】:
遗憾的是,这两种解决方案都不起作用。第一个和我的代码一样慢,因为它在超时时已经创建了异常。第二个不识别警报。 @djangofan - 你没有烦人的延误吗? @Alp - 究竟是由什么引起的?你指的是什么? 如果您使用该代码来验证警报是否存在,如果不存在应该会有延迟。是这样吗?因为我试图尽量减少延迟/超时,但没有运气。 另外,也许尝试更新硒罐。当我使用 Selenium 时,他们几乎每月发布一次新版本,有时每月发布两次。以上是关于使用 Java 在 Selenium WebDriver (selenium 2) 中处理警报的主要内容,如果未能解决你的问题,请参考以下文章