我需要点击一个警告窗口中的“确定”按钮与硒的命令。 我试过assertAlert
或verifyAlert
但他们没有做我想做的。
这是可能的点击“确定”按钮? 如果是这样,有人可以给我提供硒IDE命令的例子吗?
我需要点击一个警告窗口中的“确定”按钮与硒的命令。 我试过assertAlert
或verifyAlert
但他们没有做我想做的。
这是可能的点击“确定”按钮? 如果是这样,有人可以给我提供硒IDE命令的例子吗?
尝试硒2.0b1。 它有不同的核心比第一个版本。 它应根据支持弹出对话框的文件 :
硒2.0测试版1日开始,有内置的处理,弹出对话框的支持。 你已经触发,这将打开一个弹出操作后,您可以访问以下警告:
Java的
Alert alert = driver.switchTo().alert();
红宝石
driver.switch_to.alert
这将返回当前打开的警告对象。 有了这个对象,您现在可以接受,驳回,读它的内容,甚至键入一个提示。 这个接口同样适用于警告,确认,提示。 参考JavaDocs获取更多信息。
点击在警告框中的“确定”按钮:
driver.switchTo().alert().accept();
这是从2012年的答案,如果从2009年的问题,但人们仍然看它,只有一个正确的(使用WebDriver
)和一个几乎有用的(但还不够好)的答案。
如果你正在使用Selenium RC和实际上可以看到一个警告对话框,那么就无法完成。 硒应该为您处理。 但是, 如硒文档中所述 :
硒试图从你(通过更换window.alert,window.confirm和window.prompt)隐瞒这些对话,使他们不会停止页面的执行。 如果你看到一个警告弹出,这可能是因为它在页面加载过程中,通常是太早了我们保护的页面被解雇。
这是硒RC(因此,硒IDE,太)和硒为什么2(webdriver的)被开发的原因之一的已知限制。 如果你要处理onload
JS警报,您需要使用的webdriver 报警处理 。
这就是说,你可以使用Robot
或selenium.keyPressNative()
填写任何文字,然后按Enter盲目确认对话框。 这不是最干净的方式,但它可以工作。 你将无法得到alert
消息,但是。
Robot
拥有所有映射到常量有用的按键,这样会很容易。 随着keyPressNative()
要使用10
作为值,按Enter键或27
的Esc键 ,因为它的工作原理ASCII码 。
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());
如果您在使用硒IDE,那么你必须点击确定按钮手动,因为当警报消息命令运行时浏览器停止工作,如果你想点击OK按钮自动那么你必须使用硒RC或webdriver的和下面的命令是硒IDE
在硒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()
有自己的版本,只捕获验证给出的消息。
硒不支持alert()
在页面加载,因为它需要打补丁下有自己的版本测试窗口的功能。
如果你无法从应用测试下摆脱onload事件的警报,你应该考虑使用GUI自动化点击其中产生,例如弹出窗口AutoIt的 ,如果你使用的是Windows。
使用报警接口,首先switchTo()
提醒,然后要么使用accept()
点击OK或使用dismiss()
来取消
Alert alert_box = driver.switchTo().alert();
alert_box.accept();
要么
Alert alert_box = driver.switchTo().alert();
alert_box.dismiss();
assertAlert应该做的伎俩。 我看到的文档,在页面的onload事件处理生成的警报不能照本宣科这种方式(和经历过自己,唉,由于ASP.NET页面生命周期)。 莫非是你正在运行到什么?
对于硒,警报是使用JavaScript例如其中提出的一个
javascript:alert();
有一个基本的检查,以验证您的警报是否实际上是一个JavaScript警告或者只是用于显示一些消息的基于div框。 如果它是一个JavaScript警告,您将无法看到它在屏幕上运行的硒脚本时。
如果你能看到它,那么你需要得到警报的OK键的定位和使用selenium.click(定位),以解除警报。 可以帮助你更好,如果你能提供更多的背景:
Vamyip
使用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);
...
这是Python代码
与警报框的问题(特别是甜的警告是,他们有一个延迟和硒是非常太快)
为我工作的一种选择是:
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()
新的硒IDE(2019年发布),具有更广泛的API和新的文档。
我相信这是你想尝试的命令:
选择的webdriver可见确认OK
描述的:
https://www.seleniumhq.org/selenium-ide/docs/en/api/commands/#webdriver-choose-ok-on-visible-confirmation
还有其他的警报相关的API调用; 只是搜索警报该页