繁体   English   中英

使用 selenium 和 python 检查是否存在任何警报

[英]Check if any alert exists using selenium with python

我正在尝试使用 selenium 用 python 语言为管理用户的 web 页面编写测试。 在此页面中,有人可以为用户添加角色,如果在添加角色时存在角色,则会引发警报。 我不知道警报是 javascript 警报还是 web 页面的元素。 我想自动检查警报是否存在,因为检查列表中的角色会浪费时间并且负载巨大。 我试过这个:

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
try:
    alert = browser.switch_to_alert()
    alert.accept()
    print "alert accepted"
except:
    print "no alert"

但它没有用,我得到了“UnexpectedAlertPresentException”。 我也试过这个:

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
s = set(browser.window_handles)
s.remove(browser.current_window_handle)
browser.switch_to_window(s.pop()) 

但我得到了同样的例外。 此外,我尝试使用萤火虫访问警报以检查我是否可以访问其属性,但右键单击被禁用。 我需要一个非常快的解决方案,即使是其他语言。 无论如何我都能理解这种方法。 我将不胜感激任何帮助。

我所做的是在我希望看到警报的点之前使用 WebDriverWait 设置条件延迟,然后切换到它,如下所示:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox()
browser.get("url")
browser.find_element_by_id("add_button").click()

try:
    WebDriverWait(browser, 3).until(EC.alert_is_present(),
                                   'Timed out waiting for PA creation ' +
                                   'confirmation popup to appear.')

    alert = browser.switch_to.alert
    alert.accept()
    print("alert accepted")
except TimeoutException:
    print("no alert")

WebDriverWait(browser, 3 )将等待至少 3 秒以显示受支持的警报。

我知道这是一个为时已晚的答案,您几年前已经解决了这个问题,但我仍然想发布我的分析和发现,以供未来读者参考。

我正在做一个 Django 网站开发项目,目前有一个错误,一旦打开特定网页,就会弹出一个错误消息框。 我的环境是:

  • 姜戈 1.8
  • 蟒蛇 2.7
  • 硒 2.46.0

我在这里阅读了有关“UnexpectedAlertPresentException”的文档,它说:

当出现意外警报时抛出。

通常在预期模式阻止 webdriver 表单执行更多命令时引发。

我在我的项目中进行了测试,我的发现是:

  • 当警报框出现时, find_element_by_X方法可以成功。
  • click() 或 send_keys() 将失败并显示“UnexpectedAlertPresentException”。

因此,我认为try...catch块不起作用,因为“UnexpectedAlertPresentException”被抛出在

browser.find_the_element_by_id("add_button").click()

这也意味着只要通过这一行打开网页,警报框就会出现:

browser.get("url")

换句话说,可能有一个问题隐藏在更深的背后,导致页面一打开就弹出警告框。 您可能需要先解决该问题。

另一件事是:假设警告框出现这一行之后:

browser.find_the_element_by_id("add_button").click()

然后alert = browser.switch_to_alert()应该可以正常工作,不会抛出异常,这与您在此处描述的内容相矛盾。 这也让我觉得问题早在browser.get("url")行。

我不太确定所选的解决方案如何帮助您解决问题,因为我的分析表明问题出在不同的地方。 无论如何,我不是要求重新选择已接受的解决方案。 我只是想与未来的读者分享我的想法。 如果我忽略或误解了这个问题中的某些内容而导致我的分析错误(并且浪费您的时间阅读此内容:-),请道歉。

在java中我们这样做

WebDriverWait wait3 = new WebDriverWait(driver, 7000);
wait3.until(ExpectedConditions.alertIsPresent());
driver.switchTo().alert().accept();

如果警报不存在,它将隐式等待警报,它将抛出“警报不存在异常”,我们可以捕捉并继续前进。

希望能帮助到你。

使用显式等待方法尝试这个简短的解决方案。

try:
    wait.until(EC.alert_is_present())
    driver.switch_to.alert.accept()
    print("Alert accepted")
except:
    print("no Alert found")
alert = self.driver.switch_to.alert
    if alert.is_displayed():
        alert.accept()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM