2013-09-18 10 views
12

Mam bardzo dziwne zachowanie z Capybara. Uparcie odmawia wypełnienia pól mojego formularza logowania.Kapibara może znaleźć, ale nie wypełnić

<fieldset> 
    <div class="clearfix"> 
    <label for="user_email">E-Mail Adresse</label> 
    <div class="input"> 
     <input id="user_email" name="user[email]" size="30" type="email" value=""> 
    </div> 
    </div> 

    <div class="clearfix"> 
    <label for="user_password">Passwort</label> 
    <div class="input"> 
     <input id="user_password" name="user[password]" size="30" type="password" value=""> 
    </div> 
    </div> 

    <div class="clearfix"> 
    <div class="input"> 
     <input name="user[remember_me]" type="hidden" value="0"> 
     <input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1"> 
     <label for="user_remember_me">angemeldet bleiben</label> 
    </div> 
    </div> 
</fieldset> 

I tu właśnie zaczyna się zabawa:

within("#login_form"){ find("#user_email")}            
=> #<Capybara::Element tag="input" path="/html/body/div[2]/div[@id='content']/div/div[1]/form[@id='login_form']/fieldset/div[1]/div/input[@id='user_email']"> 
within("#login_form"){ fill_in("#user_email", with: "[email protected]")}     
Capybara::ElementNotFound: Unable to find field "#user_email" 

ja nie bardzo rozumiem, jak to jest możliwe, aby móc znaleźć, a jeszcze nie znaleźliśmy, element. Kolejna para oczu na ten temat byłaby doceniona.

+2

Wypróbuj 'fill_in (" user-mail ",: with => '[email protected]')', bez '# '. – depa

Odpowiedz

20

Lokalizator dla find i fill_in są różne:

  • find - Gdy pierwszy parametr nie jest symbolem, to zakłada się, że Capybara.default_selector - czyli selektor CSS lub XPath.
  • fill_in - Pierwszy parametr to nazwa pola, identyfikator lub tekst etykiety.

Łańcuch "#user_email" reprezentuje selektor css. To dlatego działa w find, ale nie fill_in.

Aby fill_in zadziałał, wystarczy podać wartość identyfikatora - np. "User_email".

within("#login_form"){ fill_in("user_email", with: "[email protected]")} 
+0

Witam @Justin Ko, pracuję nad strukturą, w której we wszystkich wartościach lokalizatora przechowywane są pliki excel, a więc chciałbym użyć elementu już znalezionego za pomocą "find", aby wykonać dowolną akcję ... tak, ja będę nie ma możliwości ponownego sprawdzenia innych atrybutów tego elementu tylko dla "wypełnienia" Czy są jakieś alternatywy? –

+0

Chciałam tylko wiedzieć, czy mogę wypełnić dane do pola formularza znalezionego za pomocą 'find'. Chyba odpowiedź polega na użyciu '# set'. –

Powiązane problemy