Capybara:如何填写没有id,名称或标签文本的输入表单?

时间:2014-11-20 12:10:16

标签: xml capybara

我正在尝试使用Capybara填写网页上的日期字段:

<div class="activity--history-custom-dates-filter-container">
  <label class="activity--header-element-label">From </label>
  <input class="activity--history-custom-date-field
       fid-datepicker--input activity-- history-custom-date-from-field hasDatepicker"
       placeholder="mm/dd/yyyy" id="dp1416484110853">
  <button class="activity--calendar-button"></button>
</div>

我可以使用以下内容访问父div:

within :xpath, "//label[text()='From ']/.." do
  fill_in ????, with: period.first.american
end

我想用显示的日期填写输入字段,但是我 似乎无法找到正确的'定位器'(显示为????)作为第一个参数 填写。 id是以编程方式生成的,因此每个都会更改 访问该页面,这是不可接受的。

Capybara文档描述fill_in如下:

“找到文本字段或文本区域,并使用给定文本填充它   该字段可以通过其名称,标识或标签文本找到。“

显然,'name'在这里表示与节点关联的任何文本,而不是 这里元素'input'的名称。

我不知道如何继续。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您只能使用within阻止?如果没有,也许这样做:

find(:xpath, "//label[text()='From ']/../input").set period.first.american

答案 1 :(得分:3)

您应该能够以更漂亮的方式使用css,如下所示:

within '.activity--history-custom-dates-filter-container' do
  find('input').set period.first.american
end