使用selenium和python检查是否存在任何警报
我正试图用python语言为管理用户的网页编写一个使用selenium的测试。在此页面中,有人可以为用户添加角色,如果添加角色时存在角色,则会发出警报。我不知道该警报是javascript警报还是网页元素。我想自动检查警报是否存在,因为检查列表中的角色既浪费时间,又有巨大的负载。我试过这个:使用selenium和python检查是否存在任何警报,python,selenium,testing,alert,window-handles,Python,Selenium,Testing,Alert,Window Handles,我正试图用python语言为管理用户的网页编写一个使用selenium的测试。在此页面中,有人可以为用户添加角色,如果添加角色时存在角色,则会发出警报。我不知道该警报是javascript警报还是网页元素。我想自动检查警报是否存在,因为检查列表中的角色既浪费时间,又有巨大的负载。我试过这个: browser = webdriver.Firefox() browser.get("url") browser.find_the_element_by_id("add_button").click() t
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"
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())
但它不起作用,我得到了“意想不到的AlertPresentException”。
我也试过:
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"
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())
但我也有同样的例外。
此外,我尝试使用firebug访问警报,以检查是否可以访问其属性,但右键单击被禁用。
我需要一个非常快速的解决方案,即使是其他语言。无论如何,我能理解这种方法。
我将非常感谢您的帮助。我要做的是在我希望看到警报的时间点之前设置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(浏览器,
3)
将至少等待3秒钟,以显示支持的警报。在java中,我们是这样做的
WebDriverWait wait3 = new WebDriverWait(driver, 7000);
wait3.until(ExpectedConditions.alertIsPresent());
driver.switchTo().alert().accept();
它将隐式等待警报,如果警报不存在,它将抛出“警报不存在例外”,我们可以捕获并继续
希望能有所帮助。我知道这是一个太晚的答案,你在几年前就解决了这个问题,但我仍然想发表我的分析和发现,供未来可能的读者参考 我正在从事Django网站开发项目,目前存在一个bug,即一旦打开某个特定网页,就会弹出一个错误消息框。我的环境是:
- Django 1.8
- Python 2.7
- 硒2.46.0
- 当警报框打开时,
方法可以成功find\u element\u by\u 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()
换句话说,可能有一个隐藏在更深层次的问题,导致页面一打开警报框就出现。您可能需要先解决该问题
另一件事是:假设警告框显示在这一行之后:
browser.get("url")
browser.find_the_element_by_id("add_button").click()
然后,alert=browser.switch_to_alert()
应该可以正常工作,不会引发异常,这与您在这里描述的内容相矛盾。这也让我觉得问题早在browser.get(“url”)
行就出现了
我不太确定选择的解决方案是如何帮助您解决问题的,因为我的分析显示问题位于不同的位置无论如何,我不是要求重新选择接受的解决方案。我只想与未来的读者分享我的想法。如果我忽略或误解了这个问题中的某些内容,导致我的分析错误(这浪费了您阅读本文的时间:-),请道歉。您是否尝试过在单击和切换到警报之间进行短暂延迟?还没有,谢谢您的建议@Richard。我想我可以用A.R.给我的密码me@Richard从
切换到\u alert()
到accept()
之间必须有延迟吗?否则可能会有问题,你认为?@begueradj,我认为@Richard的意思是我应该在元素上的click()
和switch_to_alert()
。只需关闭它:D self.execute_script('window.alert=function(){};')谢谢@a.R。它对我完全有效。我陷入这个问题已经有10个小时了。如何检测网页上可能存在的所有警报(自动弹出,无需点击按钮)?只需一小段信息-switch_to_alert()现已被弃用,并已被switch_to替换。警报“timeout”将是switch_to_alert()上的一个很好的附加参数
浏览器。切换到.alert()
应该是浏览器。切换到.alert
--(Abhishek Singh)在“警报”谢谢之后没有括号。我在Python中做了同样的处理。它是解决方案。欢迎回答堆栈溢出。一般来说欢迎回答,请考虑将上下文添加到代码中,以便其他人理解您的解决方案。