Ruby 在rails之外使用poltergiest/capybara时触发Javascript

Ruby 在rails之外使用poltergiest/capybara时触发Javascript,ruby,rspec,phantomjs,capybara,poltergeist,Ruby,Rspec,Phantomjs,Capybara,Poltergeist,我在rails之外使用Capybara、rspec和poltergeist来运行一些无头集成测试。场景是,有2个选择字段。如果我在第一个选择字段中选择了一个值,则将根据第一个选择字段的值填充第二个选择字段。如果我在MacOSX中使用poltergeist运行我的规范,该规范就可以运行了。但在ubuntu中,它失败了,似乎第二个选择字段没有填充。我的规格上也有js:true 这是我的spec_helper.rb: require 'capybara/poltergeist' require 'ca

我在rails之外使用Capybara、rspec和poltergeist来运行一些无头集成测试。场景是,有2个选择字段。如果我在第一个选择字段中选择了一个值,则将根据第一个选择字段的值填充第二个选择字段。如果我在MacOSX中使用poltergeist运行我的规范,该规范就可以运行了。但在ubuntu中,它失败了,似乎第二个选择字段没有填充。我的规格上也有js:true

这是我的spec_helper.rb:

require 'capybara/poltergeist'
require 'capybara'
require 'capybara/rspec'
require 'pry'
require 'support/session_helper'
RSpec.configure do |config|

  config.include Capybara::DSL
  config.include Capybara::Poltergeist
  config.include SessionHelper

  Capybara.run_server = false
  Capybara.default_driver = :poltergeist
  Capybara.javascript_driver = :poltergeist
  Capybara.app_host = "http://vps-staging.dropmysite.com"

  options = { js_errors: false }
  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, options)
  end

  config.expect_with :rspec do |expectations|

    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

end
编辑添加失败的规范

require 'spec_helper'

feature 'vps-staging', js: true do
  background do
    visit '/'
  end

  let(:timestamp) { Time.now.strftime('%Y-%m-%d_%H-%M-%S') }


  feature 'create private server' do
    background do
      sign_in 'blahblah@blahblah.com'
    end

    it 'successfully creates server' do
      find(:xpath, "//a[@href='/en/private_servers/new']").click

      directory_field = all(".tagit-new")[0].find("input")
      select 'Ubuntu', from: 'distribution'
      select '15.04', from: 'version'
      fill_in 'private_server_profile_name', with: "Auto Test #{timestamp}"
      directory_field.set "/home"
      click_button 'Save'

      visit '/en/dashboard'

      expect(page.text).to have_content "Auto Test #{timestamp}"
    end
  end
end

编辑我发现的另一件事是,这个bug只发生在phantomjs 1.9.8及以下版本上。2.0运行良好。

正如Tom Walpole所指出的,将poltergeist从1.6.0更新到1.7.0解决了我的大部分问题,但我仍然需要调整一点以完全解决我的问题。我所做的是创建一个js文件来保存和编辑我的spec_helper.rb,并告诉poltergeist使用选项、扩展名和包含polyfill.js,从而从

options = { js_errors: false }
  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, options)
  end


在填充字段后,是否可以添加sleep 5以验证这是一个等待问题?已尝试过,但仍然存在错误。整个错误如下:失败/错误:从“版本”中选择“15.04”。Capybara::ElementNotFoun:找不到选项15.04它将有助于在出现故障时进行恢复。另外,你能在问题中添加失败的测试吗?我会尝试捕获一个屏幕截图,但现在,我已经更新了我的问题,以包括失败的规范。那么你为什么不使用更新的版本呢?
options = { js_errors: false, extensions: ["spec/support/polyfill.js"] }
  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, options)
  end