我需要使用Selenium命令单击警报窗口内的“确定”按钮。我试过assertAlert
或verifyAlert
,但他们不做我想要的。
单击“确定”按钮是否可能?如果是这样,有人能为我提供Selenium IDE命令的示例吗?
试试Selenium 2.0b1。它与第一个版本的核心不同。根据documentation,它应该支持弹出对话框:
从Selenium 2.0 beta 1开始,内置支持处理弹出对话框。在您触发并打开弹出窗口的操作后,您可以使用以下命令访问警报:
Java的
Alert alert = driver.switchTo().alert();
红宝石
driver.switch_to.alert
这将返回当前打开的警报对象。使用此对象,您现在可以接受,关闭,读取其内容,甚至可以输入提示。此界面在警报,确认和提示方面同样有效。有关更多信息,请参阅JavaDocs。
对于硒,警报是使用javascript引发的警报,例如
javascript:alert();
有一个基本检查来验证您的警报实际上是一个javascript警报还是只是一个基于div的框来显示一些消息。如果它是一个javascript警报,你将无法在运行selenium脚本时在屏幕上看到它。
如果您能够看到它,那么您需要获取警报的ok按钮的定位器并使用selenium.click(定位器)来关闭警报。如果您可以提供更多上下文,可以帮助您更好:
Wamayeep
使用chooseOkOnNextConfirmation()来关闭alert和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);
...
这是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()
新的Selenium IDE(2019年发布)具有更广泛的API和新文档。
我相信这是你想要尝试的命令:
webdriver在可见确认上选择确定
描述于:
还有其他与警报相关的API调用;只搜索该页面以获取警报
要单击警告框中的“确定”按钮:
driver.switchTo().alert().accept();
这是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一起使用。
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());
如果您使用selenium IDE,则必须手动单击“确定”按钮,因为当警报消息命令运行时,浏览器停止工作,如果您想自动单击“确定”按钮,则必须使用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") |
您可以查看chooseOkOnNextConfirmation
,尽管如果我正确阅读文档,这应该是默认行为。
问题不明确 - 这是针对页面加载的警报吗?在使用Selenium时,您不应该看到任何警告对话,因为它将alert()
替换为自己的版本,该版本仅捕获用于验证的消息。
Selenium在页面加载时不支持alert()
,因为它需要使用自己的版本修补测试窗口中的函数。
如果你无法从被测试的应用程序中删除onload警报,你应该考虑使用GUI自动化来点击生成的弹出窗口,例如: AutoIT,如果你在Windows上。
使用警报界面,首先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页面生命周期,我自己也经历过这种情况)。那可能是你遇到的吗?