Chrome 驱动程序在首次测试后关闭 chrome



我在 Rails 3.2 上使用带有 google-chrome-beta 60.0.3112.50-1 的 Chromedriver 2.30.47691 和 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

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

您遇到的问题是您设置了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的设置将由前面提到的前后块处理。

相关内容

  • 没有找到相关文章

最新更新