在警告框内点击“确定”按钮(Selenium IDE)

73

我需要使用 Selenium 命令点击警告窗口中的“确定”按钮。我尝试使用 assertAlertverifyAlert,但它们不能实现我想要的功能。

是否有可能点击“确定”按钮?如果可以,请有人提供一个 Selenium IDE 命令的示例吗?

14个回答

54

尝试使用 Selenium 2.0b1,它与第一个版本有不同的核心。根据文档,应该支持弹出对话框:

弹出对话框

从 Selenium 2.0 beta 1 开始,内置了处理弹出对话框的支持。在触发打开弹出窗口的操作后,可以使用以下方法访问警告框:

Java

Alert alert = driver.switchTo().alert();

Ruby

driver.switch_to.alert

这将返回当前打开的警报对象。使用此对象,您现在可以接受、忽略、阅读其内容甚至输入一个提示。该界面在警报、确认和提示上同样有效。有关更多信息,请参见JavaDocs。


4
有没有办法使用Selenium IDE完成这个任务? - Emmanuel Angelo.R
4
这个回答不适用于该帖子中提到的IDE。 - DMart
Selenium IDE - 123

47

点击警告框中的“确定”按钮:

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

10

这是一个2012年的回答,问题来自2009年,但人们仍然在查看它,只有一个正确的答案(使用WebDriver),还有一个几乎有用但不够好的答案。


如果您正在使用Selenium RC并且实际上可以看到一个警报对话框,那么是不可能的。Selenium应该为您处理它。但是,如Selenium文档所述
Selenium试图向您隐藏这些对话框(通过替换window.alert、window.confirm和window.prompt),以便它们不会停止您的页面执行。如果您看到一个警报弹出窗口,很可能是因为它在页面加载过程中触发了,这通常对我们保护页面来说太早了。
这是Selenium RC(因此也包括Selenium IDE)已知的限制之一,也是Selenium 2(WebDriver)开发的原因之一。如果您想处理 onload JS 警报,则需要 使用 WebDriver 处理警报

话虽如此,您可以使用Robotselenium.keyPressNative()填写任何文本并按下Enter并盲目确认对话框。这不是最干净的方法,但它可能有效。但您将无法获取alert消息。

Robot将所有有用的键映射到常量,因此这将很容易。使用keyPressNative()时,要使用10作为按下Enter27作为Esc的值,因为它与ASCII代码一起使用。


4
如果您使用Selenium IDE,则必须手动单击“确定”按钮,因为当警报消息命令运行时,浏览器停止工作。如果您想自动单击“确定”按钮,则必须使用Selenium RC或Webdriver,并且以下命令适用于Selenium IDE。
在Selenium IDE中使用“storeeval”命令,不同类型的框。
    storeEval | alert("This is alert box")                           |
    storeEval | prompt("This is prompt box. Please enter the value") | text
    storeEval | confirm("this is cofirm box")   |

4

1| 打印弹出警报文本并关闭-I

Alert alert = driver.switchTo().alert();
System.out.println(closeAlertAndGetItsText());

2| 打印警报弹出框文本并关闭 -II

Alert alert = driver.switchTo().alert();
System.out.println(alert.getText()); //Print Alert popup
alert.accept(); //Close Alert popup

3 | 断言弹出窗口的文本内容并关闭

Alert alert = driver.switchTo().alert();
assertEquals("Expected Value", closeAlertAndGetItsText());

2
问题不够清晰 - 这是用于页面加载时的警报吗?使用Selenium时不应该看到任何警报对话框,因为它会将 alert() 替换为自己的版本,只捕获给定用于验证的消息。
Selenium不支持在页面加载时使用 alert() ,因为它需要使用自己的版本来修补被测试窗口中的函数。
如果您无法摆脱被测试应用程序中的 onload 警报,则应考虑使用 GUI 自动化来单击生成的弹出窗口,例如,如果您使用 Windows,则可以使用 AutoIT

AutoIT无法跨所有浏览器工作,因为例如对于Opera(或我所知道的新Firefox),警告框不是系统窗口/控件,而是由浏览器渲染的自定义图形元素,所以AutoIt无法检测或单击它。 - Matěj Zábský
确实无法到达onload警报。在Linux上也有相同的安全AutoAuth警告。 - Dee
OP指定了Selenium IDE而不仅仅是Selenium。 - icc97

2

2
关于Selenium IDE,我不是专家,但在触发警告/确认对话框的事件之前,您必须添加“选择下一个确认”行,如您可以在此屏幕截图中看到的那样:

Selenium IDE order matter


1
理论上是可以的,但实际上Selenium IDE 3.17在Windows 10平台上仍然存在处理Chrome警告的问题。 - Johnny Wu
我尝试使用Chrome/Chromium(Windows 10上的版本90.0.4402.0),Selenium IDE 3.17记录的解决方案包括以下列表:
  • 在下一个提示中回答
  • 断言提示
  • 可见提示上的webdriver回答
  • 点击
@al-sargent提到的是正确的。
- Pierre Jean

2

使用警报界面,首先使用switchTo()到警报,然后使用accept()点击“确定”或使用dismiss()取消它

Alert alert_box = driver.switchTo().alert();
alert_box.accept(); 

或者
Alert alert_box = driver.switchTo().alert();
alert_box.dismiss(); 

0
使用chooseOkOnNextConfirmation()来关闭警告框,并使用getAlert()来验证它是否已显示(并可选择获取其文本以进行验证)。
selenium.chooseOkOnNextConfirmation();  // prepares Selenium to handle next alert
selenium.click(locator);
String alertText = selenium.getAlert(); // verifies that alert was shown
assertEquals("This is a popup window", alertText);
...

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