2013-02-19 16 views
9

Używam opracować stworzyć znak Kreator, ale kapibary (2.0.2) podnosiDevise/Kapibara Niejednoznaczne mecz

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." 

definicja krokiem jest

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

Odpowiedz

8

w wersji 2.0 Capybara-tych Metoda find podnosi wyjątek Capybara::Ambiguous, gdy znaleziono kilka elementów pasujących do określonego lokalizatora. Kapibara nie chce dla ciebie dokonać niejednoznacznego wyboru.

Prawidłowe rozwiązania jest użycie innego lokalizatora (np find('#id').set('password') lub fill_in('field_name', with: 'password')

na Rozdział „Dwuznaczne zestawienia” z Capybara 2.0 Upgrade guide na nieco dłuższym objaśnienie tych samych.

62

Z Kapibara 2.1, to działa:

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

Od here: prefer_exact jest zachowanie występuje w Kapibara 1.x. Jeśli znaleziono wiele dopasowań, z których niektóre są dokładne, a niektóre nie, wówczas zwracany jest pierwszy element dopasowujący się automatycznie.

+6

fill_in ("Hasło", z: "123456",: match =>: first) też jest dobre – Norto23