单击警报内的“确定”按钮(Selenium IDE)


68

我需要使用Selenium命令在警报窗口中单击“确定”按钮。我已经尝试过assertAlertverifyAlert但是他们没有做到我想要的。

可以点击“确定”按钮吗?如果是这样,有人可以给我提供Selenium IDE命令的示例吗?

Answers:


53

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

弹出对话框

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

爪哇

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

红宝石

driver.switch_to.alert

这将返回当前打开的警报对象。使用此对象,您现在可以接受,关闭,阅读其内容,甚至可以在提示符下键入内容。该界面在警报,确认,提示方面同样有效。有关更多信息,请参考JavaDocs。


4
硒离子有什么办法吗?
Emmanuel Angelo.R

4
此答案不适用于帖子中要求的IDE。
DMart,

42

要在警报框中单击“确定”按钮:

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

10

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


如果您使用的是Selenium RC,并且实际上可以看到警报对话框,则无法完成。硒应该为您处理。但是,正如硒文档中所述

Selenium试图向您隐藏这些对话框(通过替换window.alert,window.confirm和window.prompt),以便它们不会停止您页面的执行。如果您看到警报弹出窗口,则可能是因为它在页面加载过程中触发,对于我们来说保护页面通常为时过早。

这是Selenium RC(因此也包括Selenium IDE)的已知局限性,也是开发Selenium 2(WebDriver)的原因之一。如果要处理onloadJS警报,则需要使用WebDriver 警报处理

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

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


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

4

如果您使用Selenium IDE,则必须手动单击“确定”按钮,因为在运行警报消息命令时浏览器停止运行,并且如果您要自动单击“确定”按钮,则必须使用Selenium RC或Webdriver,以下命令适用于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")   |


2

问题尚不清楚-这是有关页面加载的警报吗?使用Selenium时,您应该不会看到任何警告对话框,因为它会替换alert()为自己的版本,后者仅捕获为验证而给出的消息。

Selenium不支持alert()页面加载,因为它需要使用自己的版本来修补被测窗口中的功能。

如果无法摆脱被测应用程序的上载警报,则应考虑使用GUI自动化来单击所生成的弹出窗口,例如Windows上的AutoIT


AutoIT不适用于所有浏览器,因为例如对于Opera(或AFAIK新的Firefox),“警告”框不是系统窗口/控件,而是浏览器呈现的自定义图形元素,因此AutoIt无法检测到或点击它。
马捷Zábský

确实,无法达到加载警报。与安全性AutoAuth警告相同,但在Linux上。

OP指定了Selenium IDE,而不仅仅是Selenium
icc97

2

使用警报界面,首先switchTo()进行警报,然后使用accept()以单击“确定”或使用“dismiss()取消”

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

要么

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

1

关于Selenium IDE,我不是专家,但是您必须在事件之前添加行“选择ok,下次确认”,这将触发警报/确认对话框,如下面的屏幕快照所示:

Selenium IDE订单事项


0

assertAlert应该可以解决问题。我在文档中看到,无法以这种方式编写在页面的OnLoad事件处理程序中生成的警报的脚本(而且由于ASP.NET页面的生命周期,我自己也经历过)。那可能是您遇到的问题吗?


0

对于硒,警报是使用javascript引发的警报,例如

 javascript:alert();

有一项基本检查可以验证您的警报实际上是JavaScript警报,还是仅用于显示某些消息的基于div的框。如果它是JavaScript警报,则在运行Selenium脚本时将无法在屏幕上看到它。

如果能够看到它,则需要获取警报的“确定”按钮的定位器,然后使用selenium.click(locator)解除警报。如果可以提供更多上下文,可以更好地帮助您:

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

瓦米耶普


0

使用choiceOkOnNextConfirmation()消除警报,并使用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);
...

0

这是
带有警报框的Pythoncode问题(特别是甜蜜的警报是它们存在延迟,并且Selenium太快了)

对我有用的一个选项是:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.