使用 Capybara 和 Selenium 测试套件无法从 Firefox 切换到 Chrome

Using Capybara and Selenium test suite fail switching from Firefox to Chrome

使用水豚 (2.4.4) 测试 Rails 应用程序。我写了一些测试,我 运行 使用 selenium 和默认的 firefox web 浏览器进行测试,所有测试都是绿色的。

今天我已经尝试 运行 使用此配置针对 chrome 进行相同的测试:

Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome)
end

Capybara.javascript_driver = :selenium
Capybara.default_driver= :selenium
Capybara.app_host = ENV['WEB_SERVER_URL']

当我开始测试时,他们失败了,因为 Chrome 它似乎太快了,事实上用 Firefox 完成表格需要几秒钟,而不是用 Chrome 非常非常快但是测试因随机错误而失败:

  1. "email" 未找到字段 (??)
  2. current_url 不是预期的 url(??在浏览器中我看到正确的 url!!)
  3. 等等……

在我看来,错误是没有意义的,而且很奇怪,因为在 Firefox 中,所有测试都是绿色的。

你有没有注意到这个问题?

根据您提供的内容,我无法判断 Chrome 是否确实比 Firefox 加载速度更快。但是,以下内容可能会有所帮助。无论您在何处定义水豚条件,我都建议将其替换为以下内容:

Capybara.configure do |config|
  config.register_driver :selenium do |app|
    Capybara::Selenium::Driver.new(app, browser: :chrome)
    config.default_wait_time = 5  # default is 2 seconds
  end
  config.javascript_driver = :selenium
  config.default_driver= :selenium
  config.app_host = ENV['WEB_SERVER_URL']
end

您不仅可以更改 Capybara 搜索元素的默认等待时间,而且您的代码会更干燥!

您可能想要测试其他 JavaScript 驱动程序,例如 Capybara-Webkit。如果这适用于 Chrome,我建议编辑上面的配置,因此仅在使用 Chrome 浏览器时才设置 capybara-webkit。

Chromedriver with Chrome 44 returns from actions 比以前快得多(显然不正确)所以访问基本上是完全异步的。为此,针对 Chrome 驱动程序提出了许多问题,例如 https://code.google.com/p/chromedriver/issues/detail?id=1158&sort=-id&colspec=ID%20Status%20Pri%20Owner%20Summary

这对于测试稳定性意味着可能需要指定更长的等待时间来查找您在访问后要查找的第一个元素,并在检查当前页面之前检查应该在页面上的内容 url(因为内容检查将使用水豚的等待行为,而水豚目前不提供等待 url 匹配器)。您也可以恢复到 Chrome 43,这可能会解决您的问题

根据 link provided by Tom Walpole,我已从 Chrome 44 切换到 Chromium 43。我更喜欢使用 Chromium,因为我在工作日使用 chrome,而且我希望始终拥有最新版本。

在我的 Ubuntu 14.04:

$sudo apt-get install chromium-browser

然后:

#spec/spec_helper.rb
require 'selenium/webdriver'

if ENV["USE_CHROME_BROWSER"]
  Capybara.register_driver :selenium do |app|
    Selenium::WebDriver::Chrome.path = ENV["CHROME_PATH"] if ENV["CHROME_PATH"]
    Capybara::Selenium::Driver.new app, browser: :chrome
  end
end

Capybara.default_driver = Capybara.javascript_driver = :selenium
Capybara.app_host = ENV['WEB_SERVER_URL']

使用此配置,我可以轻松地从 Firefox(默认)切换到 Chromium。

我使用 dotenv gem 来管理配置:

#./.env
...
USE_CHROME_BROWSER = true
CHROME_PATH = "/usr/bin/chromium-browser"
...