为什么水豚没有找到表格元素?

时间:2013-07-31 17:24:56

标签: ruby-on-rails ruby rspec capybara

我们正在尝试将水豚引入我们的rspec示例中并且还没有太多运气。我不知道这是否是confusion between capybara and rails integration testing的一部分,但是......

这是rspec示例:

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

这里是HTML的相关部分,来自Capybara的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...]

但是运行rspec示例失败了:

  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)>'

建议?

1 个答案:

答案 0 :(得分:1)

AFAIK,如果你的输入有:

id="trip_from_place_nongeocoded_address"

然后,您需要:

fill_in 'trip_from_place_nongeocoded_address'

...没有#

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