2013-09-18 4 views
12

Ich habe ein sehr seltsames Verhalten mit Capybara. Es lehnt hartnäckig ab, die Felder meines Anmeldeformulars auszufüllen.Capybara kann finden, aber nicht 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> 

Und hier ist, wo der Spaß beginnt:

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" 

Ich verstehe nicht ganz, wie es möglich ist in der Lage sein, zu finden und noch nicht gefunden, ein Element. Ein anderes Paar Augen auf diesem würde geschätzt werden.

+2

Versuchen Sie 'fill_in ('user_email',: mit = '' [email protected] ')', ohne die '#'. – depa

Antwort

20

Der Lokalisierer für find und fill_in sind unterschiedlich:

  • find - wenn der erste Parameter nicht ein Symbol ist, angenommen wird, der Capybara.default_selector zu sein - das heißt einen CSS-Selektor oder XPath.
  • fill_in - Der erste Parameter ist der Name, ID oder Beschriftungstext des Feldes.

Die Zeichenfolge "#user_email" steht für einen CSS-Selektor. Deshalb funktioniert es in find aber nicht fill_in.

Für fill_in zu arbeiten, müssen Sie nur die ID-Wert übergeben - dh nur "user_email".

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

Hi @Justin Ko, ich arbeite an einem Framework, in dem alle Locator-Werte in einer Excel-Datei gespeichert sind. Daher wäre ich daran interessiert, das bereits gefundene Element zu verwenden, um eine Aktion auszuführen keine Freiheit, wieder andere Attribute dieses Elements nur für 'fill_in' zu überprüfen Gibt es eine Alternative? –

+0

Ich wollte nur wissen, ob ich Daten in ein Formularfeld eingeben kann, das mit 'find' gefunden wurde. Ich denke, die Antwort verwendet '# set'. –

Verwandte Themen