denishaskin
denishaskin

Reputation: 3425

Why is capybara not finding a form element?

We're trying to introduce capybara into our rspec examples and aren't having much luck yet. I don't know if this is part of the confusion between capybara and rails integration testing, but...

Here's the rspec example:

require 'spec_helper'

describe "planning a trip", :type => :feature do
  before :each do
    FactoryGirl.create(:user)
  end

  it "creates a new trip" do
    visit '/trips/new'
    save_and_open_page
    within("#new_trip") do
      fill_in '#trip_from_place_nongeocoded_address', :with => '730 w peachtree st, atlanta, ga'
      fill_in '#trip_to_place_nongeocoded_address', :with => 'georgia state capitol, atlanta, ga'
    end
    click_link 'Plan it'
    expect(page).to have_content 'Success'
  end
end

and here's the relevant part of the HTML, from Capybara's save_and_open_page:

  <form accept-charset="UTF-8" action="/trips" class=
  "simple_form form-horizontal" id="new_trip" method="post"
  novalidate="novalidate">

    <div class=
    "control-group string required trip_from_place_nongeocoded_address">
    <label class="string required control-label" for=
    "trip_from_place_nongeocoded_address"><abbr title=
    "required">*</abbr> From</label>

      <div class="controls">
        <input class="string required" id=
        "trip_from_place_nongeocoded_address" name=
        "trip[from_place][nongeocoded_address]" placeholder=
        "Enter address" size="50" type="text">
      </div>
    </div>
[...etc...]

but running the rspec example fails with:

  1) planning a trip creates a new trip
     Failure/Error: fill_in '#trip_from_place_nongeocoded_address', :with => '730 w peachtree st, atlanta, ga'
     Capybara::ElementNotFound:
       Unable to find field "#trip_from_place_nongeocoded_address"
     # ./spec/features/plan_a_trip_spec.rb:12:in `block (3 levels) in <top (required)>'
     # ./spec/features/plan_a_trip_spec.rb:11:in `block (2 levels) in <top (required)>'

Suggestions?

Upvotes: 3

Views: 2256

Answers (1)

Rob Park
Rob Park

Reputation: 36

AFAIK, if your input has:

id="trip_from_place_nongeocoded_address"

Then, you need to:

fill_in 'trip_from_place_nongeocoded_address'

... without the #

Capybara: How do I fill in a input field by its ID

Upvotes: 1

Related Questions