我需要使用Selenium命令单击警报窗口内的“确定”按钮。我试过了assertAlert
,verifyAlert
但他们没有做我想做的事。
是否可以单击“确定”按钮?如果是这样,有人可以为我提供 Selenium IDE 命令的示例吗?
我需要使用Selenium命令单击警报窗口内的“确定”按钮。我试过了assertAlert
,verifyAlert
但他们没有做我想做的事。
是否可以单击“确定”按钮?如果是这样,有人可以为我提供 Selenium IDE 命令的示例吗?
试试 Selenium 2.0b1。它的核心与第一个版本不同。根据文档,它应该支持弹出对话框:
从 Selenium 2.0 beta 1 开始,内置了对处理弹出对话框的支持。在您触发并执行将打开弹出窗口的操作后,您可以使用以下命令访问警报:
爪哇
Alert alert = driver.switchTo().alert();
红宝石
driver.switch_to.alert
这将返回当前打开的警报对象。有了这个对象,您现在可以接受、关闭、阅读它的内容,甚至可以输入提示。此界面在警报、确认、提示方面同样适用。有关更多信息,请参阅 JavaDocs。
要单击警报框中的“确定”按钮:
driver.switchTo().alert().accept();
这是 2012 年的答案,如果是 2009 年的问题,但人们仍然在看它,只有一个正确(使用WebDriver
)和一个几乎有用(但不够好)的答案。
如果您正在使用 Selenium RC 并且实际上可以看到一个警报对话框,那么它就无法完成。Selenium 应该为您处理它。但是,正如 Selenium 文档中所述:
Selenium 尝试向您隐藏这些对话框(通过替换 window.alert、window.confirm 和 window.prompt),这样它们就不会停止执行您的页面。如果您看到一个警报弹出窗口,可能是因为它在页面加载过程中触发了,这对于我们来说保护页面通常还为时过早。
这是 Selenium RC(因此也是 Selenium IDE)的一个已知限制,也是开发 Selenium 2 (WebDriver) 的原因之一。如果要处理onload
JS 警报,则需要使用 WebDriver 警报处理。
也就是说,您可以使用Robot
或selenium.keyPressNative()
填写任何文本,然后Enter盲目地按下并确认对话框。这不是最干净的方法,但它可以工作。但是,您将无法收到该alert
消息。
Robot
将所有有用的键映射到常量,所以这很容易。使用keyPressNative()
, 您希望将10
其用作 pressEnter或27
for的值,Esc因为它适用于ASCII 代码。
如果您使用 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") |
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());
您可能会查看chooseOkOnNextConfirmation
,尽管如果我正确阅读了文档,这可能是默认行为。
问题不清楚 - 这是为了在页面加载时发出警报吗?使用 Selenium 时,您不应该看到任何警报对话框,因为它替换alert()
为自己的版本,该版本仅捕获为验证而提供的消息。
Selenium 不支持alert()
页面加载,因为它需要使用自己的版本修补被测窗口中的功能。
如果您无法摆脱来自被测应用程序的加载警报,您应该考虑使用 GUI 自动化来单击生成的弹出窗口,例如,如果您在 Windows 上,则为 AutoIT 。
使用警报界面,首先switchTo()
发出警报,然后使用accept()
单击确定或使用dismiss()
取消它
Alert alert_box = driver.switchTo().alert();
alert_box.accept();
或者
Alert alert_box = driver.switchTo().alert();
alert_box.dismiss();
assertAlert 应该可以解决问题。我在文档中看到页面的 OnLoad 事件处理程序中生成的警报不能以这种方式编写脚本(唉,由于 ASP.NET 页面生命周期,我自己也经历过)。这可能是你遇到的吗?
对于 selenium,警报是使用 javascript 引发的警报,例如
javascript:alert();
有一项基本检查可以验证您的警报实际上是 javascript 警报还是只是用于显示某些消息的基于 div 的框。如果它是一个 javascript 警报,您将无法在运行 selenium 脚本时在屏幕上看到它。
如果您能够看到它,那么您需要获取警报的确定按钮的定位器并使用 selenium.click(locator) 来关闭警报。如果您可以提供更多上下文,可以更好地帮助您:
瓦米普
使用 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);
...
新的 Selenium IDE(2019 年发布)具有更广泛的 API 和新文档。
我相信这是您要尝试的命令:
webdriver 在可见确认中选择 ok
描述于:
还有其他与警报相关的 API 调用;只需搜索该页面以获取警报
这是警报框的 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()