我需要填写Capybara / RSpec中的输入字段。
<div class="form-group control_center_operators_name">
<label class="control-label"
for="control_center_operators_attributes_1477562669357_name">
Name
</label>
<input class="form-control"
type="text" value=""
name="control_center[operators_attributes][1477562669357][name]"
id="control_center_operators_attributes_1477562669357_name" />
</div>
我的问题是,还有更多这样的字段,用户可以在其中编辑现有的运算符。 e.g。
<div class="form-group control_center_operators_name">
<label class="control-label"
for="control_center_operators_attributes_0_name">
Name
</label>
<input class="form-control"
type="text" value="ABC"
name="control_center[operators_attributes][0][name]"
id="control_center_operators_attributes_0_name" />
</div>
我对该领域的了解:
更多限制:
value=''
的字段,因为有4个输入字段与此查询匹配如何使用Capybara / CSS填写空名称,电话,电子邮件和主页字段?
答案 0 :(得分:6)
查找字段的Capybara方法是#find_field
。您也可以使用:with选项
find_field('Name', with: '').set('new value to set')
请注意,它将与元素的当前值属性匹配,如果自页面加载后字段的值已更改,则该属性可能与value属性不同。另一种选择是将一个包装元素作为范围,使该字段唯一,然后在该元素中找到。例如,如果这些字段集中的每一个都在带有运算符类的div中,并且您想要在最后一个运算符集中填写名称,那么
all('.operator', minimum: 1).last.fill_in('Name', with: 'new value to set')
更新:截至Capybara 3 all
默认有等待行为,因此不需要minimum
选项
all('.operator').last.fill_in('Name', with: 'new value to set')
答案 1 :(得分:2)
您可以使用xPath查找所需的元素:
find(:xpath, "//label[contains(text(), 'Name')]/../input[@value='']")
如果你想使用css,你可以使用find_all
方法查找所有空字段,然后逐个填写。
您也可以尝试:find_field('Name', with: '')
。文档(Capybara Docs)说它看标签,但我怀疑它是否有效,因为标签是单独的元素。可能是因为它取决于html结构,至少这对我没用。