【问题标题】:Selenium-Webdriver/RSpec closing window after tests测试后 Selenium-Webdriver/RSpec 关闭窗口
【发布时间】:2020-01-24 20:49:23
【问题描述】:

运行 RSpec 和 Selenium-Webdriver 时出现问题。我正在滚动我自己的框架,并且在每次测试运行后都遇到了问题。我的spec_helper.rb 设置如下所示:

require 'selenium-webdriver'

Dir['./spec/support/**/*.rb'].each { |file| require file }

RSpec.configure do |config|

  config.before(:each) do
    # Default browser is chrome, otherwise look for ENV variables
    case ENV['browser'] ||= 'chrome'
    when 'chrome'
      @driver = Selenium::WebDriver.for :chrome
    when 'firefox'
      @driver = Selenium::WebDriver.for :firefox
    end

    # Clear cookies between each example
    @driver.manage.delete_all_cookies   

    # Set up implicit waits
    @driver.manage.timeouts.implicit_wait = 5

    # Default base_url is set to website, otherwise look for ENV variables
    case ENV['base_url'] ||= 'https:www.website.com' #redacted real website
    when 'local'
      ENV['base_url'] = 'local_url_here'
    when 'development'
      ENV['base_url'] = 'https:www.website.com' #redacted real website
    when 'production'
      ENV['base_url'] = 'prod_url_here'
    end


    # Close browser window after each test
    config.after(:each) do 
      @driver.close
    end

  end
end

我的实际 rspec 测试采用以下格式设置:

Rspec.describe 'something' do
  context 'some context' do
  #multiple it 'stuff' do's
  end
 end
end

这很典型。但是第一次测试会运行良好,在第一次测试后每个测试运行良好,但浏览器(在本例中为 Chromedriver)在每次测试后关闭并给出错误:Selenium::WebDriver::Error::WebDriverError: no such session

所以我尝试了:

config.after(:all) do 
  @driver.quit
end

相反。这会成功运行所有测试,但在测试结束时我也会收到 n 个错误(其中 n = 总测试数)undefined methodquit' for nil:NilClass`。它还会为每个测试打开一个新的浏览器实例(我不想这样做)。

即使没有@driver.quit,RSpec 似乎也会关闭驱动程序。所以我真的很困惑在这里做什么。我不希望新浏览器打开每个实例,但我希望浏览器在每次测试后关闭并打开一个新浏览器(或者这是一个坏主意?,我正在删除 cookie,所以如果它只是切换到一个新的 URL,因为我正在为每个测试做一个 visit 会起作用吗?)

处理这个问题的最佳方法是什么?

【问题讨论】:

    标签: ruby selenium-webdriver rspec


    【解决方案1】:

    是的,当您使用 chrome 驱动程序时会发生这种情况,它会在最后自动关闭浏览器。

    解决办法是,为驱动对象编写如下代码

    caps = Selenium::WebDriver::Remote::Capabilities.chrome("goog:chromeOptions" => {detach: true})
    driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps
    

    这将阻止 chrome 浏览器在最后关闭。

    我建议您使用 WATIR,它是 Ruby 硒绑定的包装器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 2017-07-24
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多