pro*_*int 4 rspec ruby-on-rails capybara
我有一个包含input可以动态添加或删除的字段的表单.我所有的投入都是
name='first_name[]'
Run Code Online (Sandbox Code Playgroud)
我如何填写我的所有投入?
Jus*_* Ko 10
如果您只是在每个输入中输入任何内容,则可以使用获取所有匹配元素的集合all.然后你可以迭代每个输入它们.
all_matching_inputs = page.all(:fillable_field, 'first_name[]')
all_matching_inputs.each{ |e| e.set('text') }
Run Code Online (Sandbox Code Playgroud)
如果您需要输入特定的,那么有几个解决方案.
如果输入字段唯一唯一的东西是它们的位置,那么你可以找到所有输入字段,然后按位置选择一个:
# Set the first match
page.all(:fillable_field, 'first_name[]').first.set('text')
# Set the third match (note 0-based index)
page.all(:fillable_field, 'first_name[]')[2].set('text')
# Set the last match
page.all(:fillable_field, 'first_name[]').last.set('text')
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用css选择器(或xpath选择器).但是,阅读起来有点困难:
# Set the second match (note 1-based index)
page.find('input[name=first_name\[\]]:nth-of-type(2)').set('text')
Run Code Online (Sandbox Code Playgroud)
很少有你想要找到的元素(输入)没有什么独特之处.通常在它周围有一些相关且独特的元素(即页面上必须有其他东西,作为用户,您用它来区别于其他元素).
例如,在以下html中:
<div>
<span>User1</span>
<input name='first_name[]'>
</div>
<div>
<span>User2</span>
<input name='first_name[]'>
</div>
Run Code Online (Sandbox Code Playgroud)
有两个具有相同名称的输入字段.但是,可以根据它们的相关兄弟跨度来区分它们,这会告诉用户输入与之相关.
在这种情况下,您可以找到span,转到父div,然后在该div的范围内找到输入.基本上,这是基于用户找到输入.
page.find('span', :text => 'User2').find(:xpath, '..').fill_in('first_name[]', :with => 'text')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3963 次 |
| 最近记录: |