Zei*_*zar 53 python testing selenium alert window-handles
我正在尝试使用python语言的selenium编写一个用于管理用户的网页的测试.在此页面中,有人可以为用户添加角色,如果在添加角色时存在角色,则会发出警报.我不知道警报是javascript警报还是网页的元素.我想自动检查是否存在警报,因为检查列表中的角色会浪费时间并且负载很大.我试过这个:
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"
Run Code Online (Sandbox Code Playgroud)
但它没有用,我得到了"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())
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的例外.此外,我尝试使用firebug访问警报以检查我是否可以访问其属性,但右键单击已禁用.即使在其他语言中,我也需要非常快速的解决方案.无论如何我能理解这种方法.我将不胜感激任何帮助.
A.R*_*.R. 81
我所做的是在我希望看到警报的点之前用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")
Run Code Online (Sandbox Code Playgroud)
WebDriverWait(browser,3)将等待至少3秒钟以显示支持的警报.
我知道这是一个太迟的答案,你已经在几年前解决了这个问题,但我仍然希望发表我的分析和发现,以供将来读者参考.
我正在开发一个Django网站开发项目,目前有一个错误,一旦打开一个特定的网页,就会弹出一个错误信息框.我的环境是:
我在这里阅读了有关"UnexpectedAlertPresentException" 的文档,它说:
出现意外警报时抛出.
通常在预期模式阻止webdriver表单执行任何更多命令时引发.
我在我的项目中测试过,我的发现是:
find_element_by_X方法可以成功.因此,我认为该try...catch块不起作用,因为"UnexpectedAlertPresentException"被抛出的行
browser.find_the_element_by_id("add_button").click()
Run Code Online (Sandbox Code Playgroud)
这也意味着一旦该行打开网页,警报框就会出现:
browser.get("url")
Run Code Online (Sandbox Code Playgroud)
换句话说,可能存在一个隐藏在更深层次的问题,导致在打开页面后立即启动警报框.您可能需要先解决该问题.
另一件事是:假设警告框出现在此行之后:
browser.find_the_element_by_id("add_button").click()
Run Code Online (Sandbox Code Playgroud)
然后alert = browser.switch_to_alert()应该运行良好,没有异常抛出,这与你在这里描述的相矛盾.这也让我觉得问题早就browser.get("url")行了.
我不太确定所选解决方案如何帮助您解决问题,因为我的分析显示问题出在另一个地方.无论如何,我并不是要求重新选择已接受的解决方案.我只想分享我对未来读者的看法.如果我忽略或误解了这个问题导致我的分析错误(这会浪费你的时间来阅读这个:-),我会道歉.