单击警报内的 OK 按钮(SeleniumIDE)

我需要点击“确定”按钮内的警报窗口与 命令。我试过 assertAlertverifyAlert,但他们不做我想要的。

有没有可能点击“确定”按钮? 如果有,谁能给我提供一个 Selenium IDE 命令的例子?

140118 次浏览

您可以查看 chooseOkOnNextConfirmation,尽管如果我正确阅读了文档,那可能是默认行为。

警觉应该能起作用。我在文档中看到,在页面的 OnLoad 事件处理程序中生成的警报不能以这种方式编写脚本(唉,由于 ASP.NET 页面的生命周期,我自己也经历过这种情况)。你会不会遇到这种情况?

对于 selenium,警报是使用 javascript 引发的。

 javascript:alert();

有一个基本的检查来验证您的警报是否实际上是一个 javascript 警报,或者仅仅是一个用于显示某些消息的基于 div 的框。 如果它是一个 javascript 警报,那么在运行 selenium 脚本时,您将无法在屏幕上看到它。

如果您能够看到它,那么您需要获取警报的 ok 按钮的定位器,并使用 selenium.click (locator)来解除警报。如果你能提供更多的上下文,可以更好地帮助你:

  1. IDE 还是 RC?
  2. 警报的 HTML 代码
  3. 你的硒脚本。

吸血鬼

问题不是很清楚——这是为了页面加载的警告吗?在使用 Selenium 时,您不应该看到任何警报对话,因为它用自己的版本取代了 alert(),后者只捕获给定的消息以进行验证。

Selenium 在页面加载时不支持 alert(),因为它需要用自己的版本修补测试窗口中的函数。

如果你不能从测试中的应用程序中删除 onload 警报,你应该考虑使用 GUI 自动化来点击弹出窗口,例如,如果你在 Windows 上使用 AutoIT

试试 Selenium 2.0 b1。它和第一个版本的核心不同。它应该支持根据 文件弹出对话框:

弹出对话框

从 Selenium 2.0 beta 1开始,内置了对处理弹出对话框的支持。当你触发并打开一个弹出窗口后,你可以通过以下方式访问警报:

爪哇咖啡

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

露比

driver.switch_to.alert

这将返回当前打开的警报对象。使用这个对象,您现在可以接受、解除、读取它的内容,甚至可以在提示符中输入。这个界面对警报、确认和提示同样有效。有关更多信息,请参考 JavaDocs。

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

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

使用 chooseOkOnNextConsure ()解除警报,使用 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);
...

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


如果您正在使用 Selenium RC,并且实际上可以看到一个警报对话框,那么这是不可能完成的。硒可以帮你处理。但是,如 Selenium 文档中所述:

Selenium 试图向您隐藏这些对话框(通过替换 警告,确认和提示) ,所以他们不会停止 执行你的页面。如果你看到一个警告弹出窗口,它是 可能是因为它在页面加载过程中触发,也就是 通常对我们来说保护这一页太早了。

这是 Selenium RC (因此也是 Selenium IDE)的一个已知限制,也是 Selenium 2(WebDriver)开发的原因之一。如果你想处理 onload JS 警报,你 需要一个 href = “ http://seleniumhq.org/docs/03 _ WebDriver.html # popup-dialogs”rel = “ noReferrer”> 来使用 WebDriver < a href = “ http://selenium.googlede.com/svn/trunk/docs/api/java/org/openqa/selenium/Alert.html”rel = “ noReferrer”> 警报处理

也就是说,您可以使用 Robotselenium.keyPressNative()来填写任何文本,然后按 Enter,盲目地确认对话框。虽然不是最干净的方法,但是可行。但是,您将无法获得 alert消息。

Robot将所有有用的键映射到常量,因此这将很容易。对于 keyPressNative(),您希望使用 10作为按 Enter的值,或者使用 27作为 Esc的值,因为它与 ASCII 码一起工作。

如果你使用的是 Selenium IDE,那么你必须手动点击 OK 按钮,因为当警报消息命令运行时,浏览器停止工作,如果你想自动点击 OK 按钮,那么你必须使用 Selenium RC 或网络驱动程序,下面的命令是 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")   |

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());

使用警报接口,首先 switchTo()警报,然后使用 accept()点击确定或使用 dismiss()取消它

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

或者

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

这是 Python 代码
警报框(特别是甜蜜警报)的问题在于它们有一个 延迟和硒是非常快的)

对我有效的一个选择是:

while True:
try:
driver.find_element_by_xpath('//div[@class="sweet-alert showSweetAlert visible"]')
break
except:
wait = WebDriverWait(driver, 1000)


confirm_button = driver.find_element_by_xpath('//button[@class="confirm"]')
confirm_button.click()

新的 Selenium IDE (2019年发布)有更广泛的 API 和新的文档。

我相信你会想试试这个命令:

网络驱动程序选择确定的可见确认

描述地点:

Https://www.seleniumhq.org/selenium-ide/docs/en/api/commands/#webdriver-choose-ok-on-visible-confirmation

还有其他与警报相关的 API 调用; 只需在该页面中搜索 警报即可

关于 Selenium IDE,我不是一个专家,但是你必须在触发警报/确认对话框的事件之前添加一行“选择确定下一个确认”,你可以从这个截图中看到:

Selenium IDE order matter