单击Alert(Selenium IDE)中的OK按钮

时间:2009-08-28 19:36:11

标签: selenium alert selenium-ide

我需要使用Selenium命令在警报窗口中单击“确定”按钮。我尝试过assertAlertverifyAlert,但他们并没有按我的意愿行事。

可以点击“确定”按钮吗?如果是这样,有人可以给我一个Selenium IDE命令的例子吗?

14 个答案:

答案 0 :(得分:48)

尝试Selenium 2.0b1。它与第一个版本的核心不同。它应该支持根据documentation

的弹出对话框

弹出对话框

从Selenium 2.0 beta 1开始,内置支持处理弹出对话框。在您触发并打开弹出窗口的操作后,您可以使用以下命令访问警报:

<强>爪哇

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

<强>红宝石

driver.switch_to.alert

这将返回当前打开的警报对象。使用此对象,您现在可以接受,关闭,读取其内容,甚至可以输入提示。此界面在警报,确认和提示方面同样有效。有关更多信息,请参阅JavaDocs。

答案 1 :(得分:40)

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

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

答案 2 :(得分:10)

这是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作为按 Enter 27 Esc 的值,因为它适用于{{3} }}

答案 3 :(得分:4)

如果您使用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")   |

答案 4 :(得分:4)

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

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

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

如果你无法从被测试的应用程序中删除onload警报,你应该考虑使用GUI自动化来点击生成的弹出窗口,例如: AutoIT如果您使用的是Windows。

答案 7 :(得分:1)

使用提醒界面,首先switchTo()发出提醒,然后使用accept()点击确定或使用dismiss()取消

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

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

答案 8 :(得分:1)

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

Selenium IDE order matter

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

 javascript:alert();

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

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

  1. IDE还是RC?
  2. 提醒的HTML代码
  3. 你的硒脚本。
  4. Vamyip

答案 11 :(得分:0)

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

答案 12 :(得分:0)

  

这是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()

答案 13 :(得分:-1)

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

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

网络驱动程序在可见确认中选择确定

描述于:

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

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