Selenium WebDriver与Java:无法接受警报提示框

3

在使用selenium IDE时,当我需要点击弹出窗口中的“OK”按钮时,可以进行录制操作,并期望能够使用以下代码进行点击:

driver.findElement(By.linkText("OK")).click();

但情况并非如此。
同样,这也行不通。
driver.switchTo().alert().accept();

Selenium会抛出一个NoAlertPresent异常。如果弹出的不是警告框,那么它是什么?并且我该如何点击“是”!


这是一个真正的Javascript确认吗?如果不是,那么通过.alert()调用的IAlert接口将无法帮助您。 - Arran
由于没有警报,所以不需要这行代码:driver.switchTo().alert().accept(); - Ripon Al Wasim
3个回答

2

它可能是任何东西。你应该告诉我们是什么。

如果它是一个Javascript弹出框,那么这个代码可以使用:

driver.switchTo().alert().accept();

至少你可以尝试发送回车键,如果“确定”按钮被Web应用程序自动选择/突出显示。

import org.openqa.selenium.Keys
WebElement.sendKeys(Keys.RETURN);

更新


可能是因为在您尝试点击/接受警报时,警报未出现。为了进行一个快速检查,请等待4-5秒钟,然后尝试driver.switchTo().alert().accept();。一旦确定,然后在trycatch循环中放置等待警报出现的代码(任何异常处理)。


我对整个自动化处理还很陌生。但是我也尝试了你的Keys.return的想法,但没有成功。我唯一确定的是,line driver.switchto().alert.accept()在其他应用程序中对我有效。这就是为什么我很困惑它在这里不起作用。 - confusified
你是否安装了Firebug(Firefox插件)?如果没有,请下载它。使用该插件,右键单击弹出/警告框中的“确定”按钮,并选择使用Firebug进行检查。 - Amey

2
在这种情况下,我更倾向于检查页面上是否存在警报,并且如果存在,则接受它。代码可能如下所示:
public boolean isAlertPresent() {

  boolean presentFlag = false;

  try {

   // Check the presence of alert
   Alert alert = driver.switchTo().alert();
   // Alert present; set the flag
   presentFlag = true;
   // if present consume the alert
   alert.accept();

  } catch (NoAlertPresentException ex) {
   // Alert not present
   ex.printStackTrace();
  }

  return presentFlag;

 }

这里可以获取详细信息。同时,不要忘记逐步调试。

希望这能帮助你。


1

如果您正在使用最新版本的WebDriver,实际上是2.20以上的任何版本,则

driver.switchTo().alert().accept();

如果警告是类似于单击时获取的javascript警告,则应该可以正常工作。

警告演示确认弹出窗演示

更新

这段代码将帮助您接受警告。

driver = new FirefoxDriver();
String baseUrl = "http://www.w3schools.com/js/tryit.asp?filename=tryjs_alert";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);
driver.switchTo().frame(0);
driver.findElement(By.cssSelector("input[type=\"button\"]")).click();
driver.switchTo().alert().accept();

我不明白。我原以为执行操作会生成警报,那么在执行操作之前如何切换到警报呢? - confusified
抱歉,我打错了,应该在操作后立即接受警报。已更新答案。 - Prashant Shukla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接