3

我们正在尝试将 capybara 引入到我们的 rspec 示例中,但还没有多少运气。我不知道这是否是capybara 和 rails 集成测试之间混淆的一部分,但是......

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

建议?

4

1 回答 1

1

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

于 2013-07-31T17:35:54.713 回答