单击警报内的确定按钮(Selenium IDE)
Posted
技术标签:
【中文标题】单击警报内的确定按钮(Selenium IDE)【英文标题】:Click in OK button inside an Alert (Selenium IDE) 【发布时间】:2010-11-23 20:26:27 【问题描述】:我需要使用Selenium 命令单击警报窗口内的“确定”按钮。我试过assertAlert
或verifyAlert
但他们没有做我想做的事。
是否可以单击“确定”按钮?如果是这样,有人可以提供 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。
也就是说,您可以使用Robot
或selenium.keyPressNative()
填写任何文本,然后按Enter 并盲目确认对话框。这不是最干净的方法,但它可以工作。但是,您将无法收到 alert
消息。
Robot
将所有有用的键映射到常量,所以这很容易。对于keyPressNative()
,您希望使用10
作为按Enter 或27
的值来表示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)的主要内容,如果未能解决你的问题,请参考以下文章