Capybara可以找到但不是fill_in

时间:2013-09-18 18:23:11

标签: capybara

我和Capybara有一些非常奇怪的行为。它固执地拒绝填写我登录表单的字段。

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

这就是乐趣开始的地方:

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"

我不太明白如何才能找到并找不到元素。 另外一双眼睛会很感激。

3 个答案:

答案 0 :(得分:23)

findfill_in的定位器不同:

  • find - 当第一个参数不是符号时,它被假定为Capybara.default_selector - 即css选择器或xpath。
  • fill_in - 第一个参数是字段的名称,标识或标签文字。

字符串“#user_email”表示css选择器。这就是为什么它适用于find而不是fill_in

要使fill_in正常工作,您需要传入id值 - 即只是“user_email”。

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

答案 1 :(得分:7)

你可以做const char *bdato [][columns]={ {"tc","Torta Cubana\n"}, {"th","Torta Huatulco\n"}, {"tm","Torta Mexicana\n"}, {"tr","Torta Rusa\n"}, {"r", "Refresco\n"}, {"a", "Agua sabor\n"} }; 。请参阅回答https://stackoverflow.com/a/8544650/3163914

答案 2 :(得分:0)

如果这是一个自动填充字段,则可以使用以下内容:

  def fill_in_autocomplete(id, value)
    page.execute_script("document.getElementById('#{id}').setAttribute('value', '#{value}');")
  end