【发布时间】:2013-07-10 16:35:05
【问题描述】:
我正在尝试测试我正在开发的 web 应用程序。我正在使用针对 Firefox 22.0 的 Firefox 驱动程序。
在某一时刻,可能会弹出一个模式对话框(Javascript prompt())。如果是这样,我想输入一些文本,然后将其关闭(单击确定)。
以下是相关代码:
try:
if button.text == "Run":
button.click()
except UnexpectedAlertPresentException:
alert = self.driver.switch_to_alert()
print alert.text
alert.send_keys('8080')
alert.dismiss()
UnexpectedAlertPresentException 正在被抛出。但是,一旦它尝试执行print alert.text,我就会得到:
`NoAlertPresentException: Message: u'No alert is present'`.
如果我删除打印语句,它会在alert.send_keys 爆炸:
`WebDriverException: Message: u'fxdriver.modals.find_(...) is null'`
我不明白。根据定义,NoAlertPresentException 是否与引发的 UnexpectedAlertPresentException 相矛盾并导致 except 块首先被执行?
编辑:另外,我终生无法在 http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html#documentation 中的 UnexpectedAlertPresentException 上找到任何文档
编辑 2:这就是我现在所拥有的:
try:
if button.text == "Run":
button.click()
alert = self.driver.switch_to_alert()
alert.send_keys('1111')
alert.dismiss()
except NoAlertPresentException:
pass
但是,我仍然看到这个:
WebDriverException: Message: u'fxdriver.modals.find_(...) is null'
在线alert.send_keys('8080')。我想我不明白为什么 switch_to_alert() 在没有警报的情况下不会抛出 NoAlertPresent ......这就是我假设 WebDriverException 所指示的内容。
【问题讨论】:
-
我可以对你说的是,你会得到更多,而不仅仅是一种类型的错误。因此,要让更多的道路勇士,您必须尝试处理 2 或 3 个最常见的问题,例如超时、不存在或意外。您必须从 selenium.common.exceptions 导入它们中的每一个,并添加一个 Except NameOfError 块然后处理它。我今天看到我可以放不止一个 except ,并且还从你的代码示例中学会了 pass :) 热爱 python 并且每天都在学习它。
-
你必须用 Try 块包围`alert = self.driver.switch_to_alert()`。您正在强制脚本更改为可能不在这里的警报。试试这个:pastebin.com/02RALuGp
-
我认为这个问题是异常处理程序从浏览器中删除了警报。这有点违反直觉。
-
这可能是根本原因吗?绕过调用 fxdriver.modals.clearFlag_ ... cf。 stackoverflow.com/questions/44568402/…
标签: python selenium webdriver selenium-webdriver