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

Posted

技术标签:

【中文标题】单击警报内的确定按钮(Selenium IDE)【英文标题】:Click in OK button inside an Alert (Selenium IDE) 【发布时间】:2010-11-23 20:26:27 【问题描述】:

我需要使用Selenium 命令单击警报窗口内的“确定”按钮。我试过assertAlertverifyAlert 但他们没有做我想做的事。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

理论上可以,但实际上 Selenium IDE 3.17 在 Windows 10 平台上处理 Chrome 警报时仍然存在问题。 我尝试使用 Chrome/Chromium(Windows 10 上的版本 90.0.4402.0),Selenium IDE 3.17 记录的解决方案如下: - 在下一个提示上回答 - 断言提示 - 在可见提示上回答 webdriver - 点击@al-sargent 提及是正确的【参考方案2】:

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

我相信这是您想要尝试的命令:

webdriver 在可见确认时选择确定

描述于:

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

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

【讨论】:

这似乎仍然不适用于 Windows 中的 Chrome。【参考方案3】:

这是 Python 代码 警报框的问题(特别是甜蜜警报是它们有一个 延迟和 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()

【讨论】:

【参考方案4】:

使用警报界面,首先switchTo() 发出警报,然后使用accept() 单击确定或使用dismiss() 取消它

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

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

【讨论】:

【参考方案5】:

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

弹出对话框

从 Selenium 2.0 beta 1 开始,内置了对处理弹出对话框的支持。在您触发并执行将打开弹出窗口的操作后,您可以通过以下方式访问警报:

Java

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

红宝石

driver.switch_to.alert

这将返回当前打开的警报对象。有了这个对象,您现在可以接受、关闭、阅读它的内容,甚至可以输入提示。此界面在警报、确认、提示方面同样适用。有关详细信息,请参阅 JavaDocs。

【讨论】:

selenium ide 有什么办法吗? 此答案不适用于帖子中询问的 IDE。 标题是 Selenium IDE【参考方案6】:

如果您使用 selenium IDE,则必须手动单击 Ok 按钮,因为当警报消息命令运行时,浏览器停止工作,如果您想自动单击 ok 按钮,则必须使用 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")   |

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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


如果您使用的是 Selenium RC,并且实际上可以看到一个警告对话框,那么它就无法完成。 Selenium 应该为您处理它。但是,as stated in Selenium documentation:

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

这是 Selenium RC(因此也是 Selenium IDE)的一个已知限制,也是开发 Selenium 2 (WebDriver) 的原因之一。如果你想处理onload JS 警报,你需要to use WebDriver alert handling

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

Robot 将所有有用的键映射到常量,所以这很容易。对于keyPressNative(),您希望使用10 作为按Enter27 的值来表示Esc,因为它适用于ASCII codes。

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

使用 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);
...

【讨论】:

【参考方案11】:

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

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

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

【讨论】:

AutoIT 不适用于所有浏览器,因为例如对于 Opera(或 AFAIK 新 Firefox),警报框不是系统窗口/控件,而是浏览器呈现的自定义图形元素,所以 AutoIt 无法检测或点击它。 true 表示无法到达加载警报。与安全 AutoAuth 警告相同,但在 Linux 上。 OP 指定 Selenium IDE 而不仅仅是 Selenium【参考方案12】:

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

 javascript:alert();

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

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

    IDE 还是 RC? 警报的 html 代码 你的 selenium 脚本。

Vamyip

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

您可能会查看chooseOkOnNextConfirmation,但如果我正确阅读文档,这可能是默认行为。

【讨论】:

以上是关于单击警报内的确定按钮(Selenium IDE)的主要内容,如果未能解决你的问题,请参考以下文章

无法单击Selenium IDE中弹出窗口中的按钮

无法单击跨度 Selenium Python 内的单选按钮

快速警报视图(iOS8),单击确定和取消按钮,点击该按钮

如何在selenium IDE中单击iFrame中的链接

Selenium 网络驱动程序警报

单击使用 KIF 的警报视图