【发布时间】:2014-02-24 23:49:05
【问题描述】:
我在我的测试套件中使用 Capybara 和 Selenium 网络驱动程序。我注意到当所有测试都完成后,Selenium 通过绑定到at_exit 来关闭浏览器。但是,这会导致我的 Web 应用程序出现问题,显示“您确定要离开”对话框onunload(请不要判断。这是一个 Intranet 应用程序,用户特别要求它。)。因此,当测试完成时,我的 Cucumber 场景失败(即使我的所有步骤都通过了),因为有一个未处理的 Javascript confirm 对话框。 Selenium 尝试关闭浏览器并接受对话框后有什么方法可以绑定吗?
更新
我相信我已经找到了这个问题。似乎每次测试后,Capybara 都会通过清除所有 cookie 并导航到 about:blank 来重置浏览器。这就是导致onbeforeunload 对话框打开的原因(不是browser.quit())。我在 Capybara 邮件列表上交叉发帖,试图获得这方面的帮助,并将在此处发布我找到的任何内容。
【问题讨论】:
-
虽然我并不完全熟悉您使用的绑定,但
driver.switch_to_alert() alert.confirm()(对于 python 版本)是否不适合您? -
这就是我需要做的,我只是想不出合适的地方去做。测试场景完成后,Capybara 或 Cucumber 似乎正在关闭浏览器。那时我需要切换到警报并接受它。
-
是否可以使用“tearDown”方法?你可以在那里输入
try/catch吗? -
是的,这就是我要找的。 Capybara 绑定了一个
at_exit方法,在该方法中调用driver.quit()。但我需要在driver.quit()方法内部,因为这是弹出confirm对话框的地方,如果我不处理它,就会引发异常。 -
使用 Python 绑定
driver.quit()只会退出,无论打开什么。我已经在带有onunload的页面上使用它来显示提示。没问题。 documentation 还说quit“关闭每个关联的窗口”(提示也是一个窗口,所以应该关闭它)。对我来说,这表明 Ruby 绑定中存在错误,或者其他干扰 Selenium 的东西。
标签: selenium selenium-webdriver cucumber capybara