2013-09-18 8 views
12

Sto avendo un comportamento molto strano con Capibara. Si rifiuta testardamente di compilare i campi del mio modulo di accesso.Capybara può trovare ma non fill_in

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

E qui è dove inizia il divertimento:

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" 

Io non capisco come sia possibile per essere in grado di trovare, e tuttavia non trovo, un elemento. Un altro paio di occhi su questo sarebbe apprezzato.

+2

Provare 'fill_in ('user_email',: with => '[email protected]')', senza '#'. – depa

risposta

20

Il localizzatore per find e fill_in sono diversi:

  • find - Quando il primo parametro non è un simbolo, si presume essere il Capybara.default_selector - cioè un css-selettore o xpath.
  • fill_in - Il primo parametro è il nome del campo, l'ID o il testo dell'etichetta.

La stringa "#user_email" rappresenta un selettore css. Questo è il motivo per cui funziona in find ma non in fill_in.

Per il fill_in funzionare, è necessario solo passare il valore id, ovvero solo "user_email".

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

Ciao @Justin Ko, sto lavorando su un framework in cui tutti i valori dei locator sono memorizzati in un excel e quindi sarei interessato a utilizzare l'elemento già trovato usando 'find' per eseguire qualsiasi azione..come avrò nessuna libertà di controllare nuovamente su altri attributi di quell'elemento solo per 'fill_in' C'è qualche alternativa? –

+0

Volevo solo sapere se posso inserire dati in un campo modulo trovato usando 'find'. Credo che la risposta sia l'uso di "# set". –