首次测试后,镀铬液关闭铬

时间:2017-07-07 01:36:23

标签: ruby-on-rails selenium webdriver capybara selenium-chromedriver

我使用Chromedriver 2.30.477691与google-chrome-beta 60.0.3112.50-1在Rails 3.2上使用Selenium-webdriver 3.4.3我的问题是只有第一次集成测试通过然后浏览器关闭并且所有其他集成测试都会失败,无论它们是在同一个rspec文件还是单独的文件中。

如果我以焦点运行任何单个测试,那么它就会通过。我已尝试使用和不使用无头选项,并且没有任何作用,在第一次测试后,我可以看到浏览器已关闭,并且未来的测试不会重新打开。

这些测试是使用firefox运行的,所以我知道测试运行正常。

这是我在rails_helper.rb中的设置

  Capybara.register_driver(:headless_chrome) do |app|
    caps = Selenium::WebDriver::Remote::Capabilities.chrome(
      chromeOptions: {
        binary: "/opt/google/chrome-beta/google-chrome",
        args: %w[headless disable-gpu]
      }
    )
    Capybara::Selenium::Driver.new(
      app,
      browser: :chrome,
      desired_capabilities: caps
    )
  end

  Capybara.current_driver =:headless_chrome
  Capybara.javascript_driver = :headless_chrome

如果我的某个测试不是序列中的第一个测试,则会失败。

require "rails_helper"

RSpec.describe "Account Index Page Tests", :type => :feature do

    before :each do
      admin_sign_in
    end

    it "Ensure that the index contains one of the default accounts" do
      visit "/#/accounts"

      expect(find_by_id("heading")).to have_text("Account")
      expect(find_by_id("new-btn")).to have_text("New")
      expect(find_by_id("name0")).to have_text("Sales")
    end
end

在运行上述测试作为第二个测试后,我收到错误此错误。如果我以相反的顺序运行它,那么另一个测试将失败而不是index_accounts。

% rspec spec/integration/accounts/create_accounts_spec.rb spec/integration/accounts/index_accounts_spec.rb

Randomized with seed 30251
.F

Failures:

  1) Account Index Page Tests Ensure that the index contains one of the default accounts
     Failure/Error: fill_in "Email", with: "admin@example.com.au"

     Capybara::ElementNotFound:
       Unable to find field "Email"
     # ./spec/integration_helpers/login_helper.rb:43:in `admin_sign_in'
     # ./spec/integration/accounts/index_accounts_spec.rb:7:in `block (2 levels) in <top (required)>'

Finished in 5.57 seconds (files took 6.2 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./spec/integration/accounts/index_accounts_spec.rb:10 # Account Index Page Tests Ensure that the index contains one of the default accounts

1 个答案:

答案 0 :(得分:1)

假设您正在使用Capybara的默认rspec配置,它会安装一个before块,根据测试元数据设置要使用的驱动程序,以及一个将驱动程序重置为Capybara.default_driver的后块 - https://github.com/teamcapybara/capybara/blob/master/lib/capybara/rspec.rb#L20 < / p>

您遇到的问题是您设置了Capybara.current_driver而不是设置Capybara.default_driver。这意味着您的第二次和其他测试将被重置为使用默认的rack_test驱动程序(因为您没有用于在测试中分配不同驱动程序的元数据)。如果您只是希望所有测试都默认使用:headless_chrome驱动程序而不必担心元数据更改

Capybara.current_driver = :headless_chrome
Capybara.javascript_driver = :headless_chrome

Capybara.default_driver = :headless_chrome
Capybara.javascript_driver = :headless_chrome

current_driver的设置将由前面提到的前后块处理。