2013-02-19 3 views
9

ich verwende ersinnen ein Zeichen Assistenten zu erstellen, aber Capybara (2.0.2) wirftDevise/Capybara mehrdeutige Spiel

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

Schritt Definition ist

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

Antwort

8

In Version 2.0 Capybara der find Methode löst eine Capybara::Ambiguous Ausnahme aus, wenn mehrere Elemente übereinstimmenden angegebenen Locator gefunden wurden. Capybara möchte keine zweideutige Wahl für dich treffen.

Die richtige Lösung ist, einen anderen Locator (z.B. find('#id').set('password') oder fill_in('field_name', with: 'password')

Read „mehrdeutige Matches“ für etwas länger Erläuterung derselben von Capybara 2.0 Upgrade guide Abschnitt zu verwenden.

62

Mit Capybara 2.1, das funktioniert:

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

Von here: prefer_exact ist das Verhalten in Capybara 1.x Wenn mehrere Übereinstimmungen gefunden werden, von denen einige genau sind und andere nicht, dann wird das erste eaxctly-übereinstimmende Element zurückgegeben.

+6

fill_in ("Passwort", mit: '123456',: match =>: first) ist auch eine gute – Norto23