对水豚使用 chrome,rails
Using chrome for capybara, rails 4.2
我花了 2 天多的时间试图弄清楚如何使用 google chrome 来处理水豚,但运气不好:( 尝试测试表单按钮。具有 js: true 的测试失败. 我确实安装了 firefox,因为据我搜索,即使我想使用 chrome,我也需要在计算机上安装 firefox,然后将 chrome 设置为默认值。(如果我是,请纠正我错误)我还安装了 chrome 驱动程序。过去常常出现一些时序错误,导致 firefox 长时间打开和关闭,但我已经走到这一步了:
我的rails_helper:
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rails'
require 'capybara'
require 'capybara/dsl'
require "selenium-webdriver"
require 'rails_helper'
ActiveRecord::Migration.maintain_test_schema!
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
Selenium::WebDriver::Chrome.driver_path = '/Users/erincemer/Downloads/chromedriver'
end
(this is where I have chromedriver)
Capybara.javascript_driver = :selenium_chrome
RSpec.configure do |config|
config.include CsvHelper
config.include Capybara::DSL
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = false
config.infer_spec_type_from_file_location!
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
我的测试是:
描述"visit clearance_batches#new"做
it 'should get an error message when tries to find an item with empty string', js: true do
visit '/clearance_batches/new'
fill_in 'id_field', with: ""
click_button 'find item'
expect(page).to have_content('*Id can not be blank!')
end
end
我的失败是:
失败:
1) visit clearance_batches#new should get an error message when tries to find an item with empty string
Failure/Error: visit '/clearance_batches/new'
NoMethodError:
undefined method `needs_server?' for "/Users/erincemer/Downloads/chromedriver":String
我不知道 "needs_server?" 是从哪里来的,我在应用程序的任何地方都没有。
我的测试文件在功能文件夹中。添加
:type => feature
(我不知道它的用途)对我的测试没有任何改变。我有另一个测试
visit '/clearance_batches/new'
without js: true
并且没有给出任何错误,因此路线是正确的。我试图尽可能具体。感谢您的帮助。
传递给 register_server
的块需要 return 一个 Capybara::Driver::Base 实例(Capybara::Selenium::Driver 派生自)。通过在创建实例后设置 driver_path
你的块实际上是 returning 一个字符串。将 Chrome.driver_path
设置移出块或交换 register_driver
块内两行的顺序将解决您遇到的问题
Capybara.register_driver :selenium_chrome do |app|
Selenium::WebDriver::Chrome.driver_path = '/Users/erincemer/Downloads/chromedriver'
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
如果您要使用 Chrome,则无需安装 Firefox,只需安装 chromedriver。如果尝试使用 Firefox 48+,则需要安装 geckodriver。
我花了 2 天多的时间试图弄清楚如何使用 google chrome 来处理水豚,但运气不好:( 尝试测试表单按钮。具有 js: true 的测试失败. 我确实安装了 firefox,因为据我搜索,即使我想使用 chrome,我也需要在计算机上安装 firefox,然后将 chrome 设置为默认值。(如果我是,请纠正我错误)我还安装了 chrome 驱动程序。过去常常出现一些时序错误,导致 firefox 长时间打开和关闭,但我已经走到这一步了:
我的rails_helper:
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rails'
require 'capybara'
require 'capybara/dsl'
require "selenium-webdriver"
require 'rails_helper'
ActiveRecord::Migration.maintain_test_schema!
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
Selenium::WebDriver::Chrome.driver_path = '/Users/erincemer/Downloads/chromedriver'
end
(this is where I have chromedriver)
Capybara.javascript_driver = :selenium_chrome
RSpec.configure do |config|
config.include CsvHelper
config.include Capybara::DSL
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = false
config.infer_spec_type_from_file_location!
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
我的测试是:
描述"visit clearance_batches#new"做
it 'should get an error message when tries to find an item with empty string', js: true do
visit '/clearance_batches/new'
fill_in 'id_field', with: ""
click_button 'find item'
expect(page).to have_content('*Id can not be blank!')
end
end
我的失败是:
失败:
1) visit clearance_batches#new should get an error message when tries to find an item with empty string
Failure/Error: visit '/clearance_batches/new'
NoMethodError:
undefined method `needs_server?' for "/Users/erincemer/Downloads/chromedriver":String
我不知道 "needs_server?" 是从哪里来的,我在应用程序的任何地方都没有。
我的测试文件在功能文件夹中。添加
:type => feature
(我不知道它的用途)对我的测试没有任何改变。我有另一个测试
visit '/clearance_batches/new' without js: true
并且没有给出任何错误,因此路线是正确的。我试图尽可能具体。感谢您的帮助。
传递给 register_server
的块需要 return 一个 Capybara::Driver::Base 实例(Capybara::Selenium::Driver 派生自)。通过在创建实例后设置 driver_path
你的块实际上是 returning 一个字符串。将 Chrome.driver_path
设置移出块或交换 register_driver
块内两行的顺序将解决您遇到的问题
Capybara.register_driver :selenium_chrome do |app|
Selenium::WebDriver::Chrome.driver_path = '/Users/erincemer/Downloads/chromedriver'
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
如果您要使用 Chrome,则无需安装 Firefox,只需安装 chromedriver。如果尝试使用 Firefox 48+,则需要安装 geckodriver。