Running Capybara without rack produces errors when using url parameters

17,315

Solution 1

You can set only one of app and app_host. So you should remove config.app from configuration.

Also you should set default_driver instead of current_driver.

As it's shown in my answer in linked question working configuration is:

Capybara.configure do |config|
  config.run_server = false
  config.default_driver = :selenium
  config.app_host = 'https://www.google.com' # change url
end

Solution 2

If you're specifying an app_host instead of using rack, you need to specify default_driver instead of current_driver. For example:

Capybara.run_server = false
Capybara.default_driver = :selenium
Capybara.app_host = 'https://www.google.com'

instead of

Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'https://www.google.com'
Share:
17,315
aaandre
Author by

aaandre

Updated on June 12, 2022

Comments

  • aaandre
    aaandre almost 2 years

    Here's my setup, based on this recommendation: How to get Cucumber/Capybara/Mechanize to work against external non-rails site

    It works until I add parameters to the URL. Any advice on addressing this issue?

    require 'rspec'
    require 'capybara/rspec'
    require 'capybara/dsl'
    
    @test_url = "test"
    
    RSpec.configure do |config|
      config.include Capybara::DSL
    end
    
    Capybara.configure do |config|
      config.run_server = false
      config.current_driver = :selenium
      config.app = "fake app name"
      config.app_host = "http://site.com/#{@test_url}"
    end
    

    This works fine:

    describe "the page, without URL parameters" do
      it "shows the regular form" do
        visit "/registration.aspx"
        page.should have_content "YES"    
      end
    end
    

    But this:

    describe "the page, when not fully pre-filled" do
      it "shows the regular form if only passed the attendance" do
        visit "/registration.aspx?r=y"
        page.should have_content "YES"    
      end
    
      it "shows the regular form if only passed the attendance" do
        visit "/registration.aspx?f=Jim"
        page.should have_content "YES"    
      end
    
    end
    

    results in

    ....FF
    
    Failures:
    
      1) the page, when not fully pre-filled shows the regular form if only passed the attendance
         Failure/Error: visit "/registration.aspx?r=y"
         NoMethodError:
           undefined method `call' for "fake app name":String
         # ./conf_spec.rb:39:in `block (2 levels) in <top (required)>'
    
      2) the page, when not fully pre-filled shows the regular form if only passed the attendance
         Failure/Error: visit "/registration.aspx?f=Jim"
         NoMethodError:
           undefined method `call' for "fake app name":String
         # ./conf_spec.rb:44:in `block (2 levels) in <top (required)>'