使用铬为水豚,轨道4.2

时间:2017-03-20 03:19:27

标签: ruby-on-rails google-chrome rspec capybara selenium-chromedriver

我花了超过2天试图计算如何使用google chrome for capybara但没有运气:(尝试测试表单按钮。具有js:true的测试失败。我确实安装了firefox因为我搜索,即使我想使用chrome,我需要在计算机上安装firefox然后使chrome默认。(请纠正我,如果我错了)我还安装了chromedriver。用于获取一些保持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

我的测试是:

描述"访问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 =>特征

(我不知道它是什么)我的测试并没有改变任何东西。我有另一个测试

  

访问' / clearance_batches / new'   没有js:true

并且没有给出任何错误,以便路线正确。我试图尽可能具体。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

传递给register_server的块需要返回一个Capybara :: Driver :: Base实例(Capybara :: Selenium :: Driver派生自)。通过在创建实例后设置driver_path,您的块实际上返回一个字符串。将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,只需要使用Chrome,就不需要安装Firefox。如果尝试使用Firefox 48+,则需要安装geckodriver。