Capybara can find but not fill_in

為{幸葍}努か 提交于 2020-01-01 04:19:20

问题


I am having some very strange behaviour with Capybara. It stubbornly refuses to fill in the fields of my login form.

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

And here is where the fun begins:

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: "foo@example.com")}                  
Capybara::ElementNotFound: Unable to find field "#user_email"

I don't quite understand how it is possible to be able to find, and yet not find, an element. Another pair of eyes on this would be appreciated.


回答1:


The locator for find and fill_in are different:

  • find - When the first parameter is not a symbol, it is assumed to be the Capybara.default_selector - ie a css-selector or xpath.
  • fill_in - The first parameter is the field's name, id or label text.

The string "#user_email" represents a css-selector. This is why it works in find but not fill_in.

For fill_in to work, you need to just pass in the id value - ie just "user_email".

within("#login_form"){ fill_in("user_email", with: "foo@example.com")}  



回答2:


you can do find("#user_email").set "foo@example.com". See answer https://stackoverflow.com/a/8544650/3163914



来源:https://stackoverflow.com/questions/18879566/capybara-can-find-but-not-fill-in

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!