2013-02-19 38 views
9

Tôi đang sử dụng đưa ra để tạo ra một đăng ký hướng dẫn, nhưng Capybara (2.0.2) tănglập mưu/Capybara mơ hồ trận đấu

Feature: Signing up 
    In order to be attributed for my work 
    As a user 
    I want to be able to sign u 

Scenario: Signing up 
    Given I am on the homepage 
    When I follow "Sign up" 
    And I fill in "Email" with "[email protected]" 
    And I fill in "Password" with "password" 
    Ambiguous match, found 2 elements matching field "Password" (Capybara::Ambiguous) 
./features/step_definitions/web_steps.rb:10:in `/^(?:|I)fill in "([^"]*)" with "([^"]*)"$/' 
features/signing_up.feature:10:in `And I fill in "Password" with "password"' 
    And I fill in "Password confirmation" with "password" 
    And I press "Sign up" 
    Then I should see "You have signed up successfully." 

định nghĩa bước là

When /^(?:|I)fill in "([^"]*)" with "([^"]*)"$/ do |field, value| 
    fill_in(field, :with => value) 
end 

Trả lời

8

Trong phiên bản 2.0 của Capybara Phương pháp find đặt ra một ngoại lệ Capybara::Ambiguous khi một số yếu tố khớp với trình định vị được chỉ định trong đó tìm thấy. Capybara không muốn tạo ra một sự lựa chọn mơ hồ cho bạn.

Các giải pháp thích hợp là sử dụng một bộ định vị (ví dụ find('#id').set('password') hoặc fill_in('field_name', with: 'password')

Đọc "Những Trận Đấu nhập nhằng" của Capybara 2.0 Upgrade guide cho lời giải thích dài hơn một chút giống nhau.

62

Với Capybara 2.1, công trình này:

fill_in("Password", with: '123456', :match => :prefer_exact) 
    fill_in("Password confirmation", with: '123456', :match => :prefer_exact) 

Từ here: prefer_exact là hành vi hiện diện trong Capybara 1.x. Nếu tìm thấy nhiều kết quả phù hợp, một số trong số đó là chính xác và một số không khớp, thì phần tử tương ứng eaxctly đầu tiên được trả về.

+6

fill_in ("Mật khẩu", với: '123456',: match =>: trước) cũng là một trang hay – Norto23