Selenium 在测试完成时处理浏览器关闭

Selenium 在测试完成时处理浏览器关闭,selenium,selenium-webdriver,cucumber,capybara,Selenium,Selenium Webdriver,Cucumber,Capybara,在我的测试套件中,我正在将Capybara与Selenium webdriver一起使用。我注意到,当所有测试完成后,Selenium通过绑定到at_exit关闭浏览器。但是,这会导致我的web应用程序出现问题,显示一个“是否确定要在NLOAD上导航”对话框,请不要判断。这是一个内部网应用程序,用户特别要求它。。因此,当测试完成时,我的Cucumber场景失败,即使我的所有步骤都通过了,因为有一个未处理的Javascript确认对话框。在Selenium尝试关闭浏览器并接受对话框后,是否有任何绑

在我的测试套件中,我正在将Capybara与Selenium webdriver一起使用。我注意到,当所有测试完成后,Selenium通过绑定到at_exit关闭浏览器。但是,这会导致我的web应用程序出现问题,显示一个“是否确定要在NLOAD上导航”对话框,请不要判断。这是一个内部网应用程序,用户特别要求它。。因此,当测试完成时,我的Cucumber场景失败,即使我的所有步骤都通过了,因为有一个未处理的Javascript确认对话框。在Selenium尝试关闭浏览器并接受对话框后,是否有任何绑定方法

更新


我相信我已经发现了这个问题。似乎在每次测试之后,Capybara都会通过清除所有cookie并导航到about:blank来重置浏览器。这就是导致onbeforeunload对话框打开而不是browser.quit的原因。我正在水豚邮件列表上交叉发布,试图获得有关此问题的帮助,并将在此处发布我找到的任何内容。

如前所述,调用driver.Quit可以解决问题,但如果弹出窗口导致浏览器无法关闭,请删除该实例。一个简单的解决方案是将测试封装在using子句中

using (IWebDriver driver = new FirefoxDriver())
{
    //Perform your test
    driver.Quit(); 
}

如果您使用的是JUnit或TestNG之类的单元测试框架,那么我要做的就是使用@AfterTest或@AfterClass之类的配置注释退出浏览器。这样,当测试运行时,浏览器始终处于打开状态。直到@Test block完成,测试用例才会关闭浏览器实例


如果您使用的是Ruby,我假设有类似的情况。

您是否可以在退出时切换上下文并接受或取消警报。像这样的

at_exit do
  page.driver.browser.switch_to.alert.accept
  #or
  page.driver.browser.switch_to.alert.dismiss
end

正如我在OP更新中提到的,似乎水豚导航到:空白作为每个场景的结尾。在与水豚团队的jnicklas讨论后,处理此问题的最佳方法似乎是实现Cucumber After处理程序,该处理程序在水豚尝试处理警报之前导航离开

After do
  # after each test navigate away before Capybara tries to so that we can appropriately handle the onbeforeunload dialog
  if @browser
    begin
      @browser.navigate.to("about:blank")
      @browser.switch_to.alert.accept
    rescue Selenium::WebDriver::Error::NoAlertPresentError
      # No alert was present. Don't need to do anything
    end
  end
end

虽然我对您使用的绑定并不完全熟悉,但是python版本的driver.switch_to_alert alert.confirm是否不适合您?这就是我需要做的,我只是找不到合适的位置来做。测试场景完成时,似乎是Capybara或Cucumber正在关闭浏览器。这时我需要切换到警报并接受它。是否有访问“拆卸”方法的权限?你能在那里试试吗?是的,这就是我要找的。有一个at_exit方法,Capybara绑定到该方法,在该方法中调用driver.quit。但是我需要在driver.quit方法中,因为这是弹出确认对话框的地方,如果我不处理它,就会引发异常。对于Python绑定驱动程序,无论打开什么,quit.quit都会退出。我在网页上用过它,onunload会提示。没问题。还说退出关闭每个相关的窗口提示也是一个窗口,所以应该关闭它。对我来说,这表明Ruby绑定中存在一个bug,或者其他干扰Selenium的东西。谢谢你的提示。我尝试设置自己的at_出口方法,该方法似乎在水豚的at_出口之前运行。问题是,在浏览器关闭之前,我无法接受或解除警报。如果我尝试调用quit,然后接受该警报,则该警报将消失,然后返回。