2

我目前正在使用 Capybara 在表单的字段中填写现有值的页面上测试表单。我想测试能够将新值放入字段并使用新值提交表单。

当我尝试使用 Capybara 的 fill_in 方法时,它会忽略具有现有值的字段。无论如何用 Capybara 中的现有值覆盖字段?

我将包括以下表格:

<form accept-charset="UTF-8" action="/submissions/1/reviews/4" class=
  "simple_form edit_review" id="edit_review_4" method="post" novalidate="novalidate"
  name="edit_review_4">
    <div style="margin:0;padding:0;display:inline">
      <input name="utf8" type="hidden" value="&#10003;"><input name="_method" type=
      "hidden" value="put"><input name="authenticity_token" type="hidden" value=
      "gJ/KKAodeIJD8PPnRNeN4GaGb/yqvUDHrsnl9LqLP/c=">
    </div>

    <div class="input integer optional">
      <label class="integer optional control-label" for=
      "review_rating">Rating</label><input class="numeric integer optional" id=
      "review_rating" name="review[rating]" step="1" type="number" value="33">
    </div>

    <div class="input text required">
      <label class="text required control-label" for="review_comment"><abbr title=
      "required">*</abbr> Comment</label>
      <textarea class="text required" cols="40" id="review_comment" name=
      "review[comment]" rows="20">
hellofsdf
</textarea>
    </div><input class="btn" name="commit" type="submit" value="Update Review">
  </form>

我试过的水豚代码是:

find(:xpath, "//*[(@id = 'review_comment')]").set "hello"

我也尝试过使用评级字段的类似方法,因为评级是一个文本字段,而评论是一个文本区域,但我仍然无法改变它。

4

2 回答 2

1

使用带有 XSLT 表达式的 find 应该可以解决问题

find(:xpath, "//input[@id='field_with_default_value_id']").set "my value"
于 2013-02-01T12:45:15.543 回答
0

使用 phantomjs/poltergeist 之类的 javascript 驱动程序,然后使用 javascript 设置类似的值。

page.evaluate_script("document.getElementById('#some-id').value = 'some-value'");

类似于我对这个问题的回答。

于 2014-02-19T21:52:34.667 回答