[英]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 网站开发项目,目前有一个错误,一旦打开特定网页,就会弹出一个错误消息框。 我的环境是:
我在这里阅读了有关“UnexpectedAlertPresentException”的文档,它说:
当出现意外警报时抛出。
通常在预期模式阻止 webdriver 表单执行更多命令时引发。
我在我的项目中进行了测试,我的发现是:
find_element_by_X
方法可以成功。 因此,我认为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.