首页 > 解决方案 > 是否可以在水豚中选择多个相等的元素?

问题描述

我开始使用以下 gems 研究自动化测试,capybara我在测试cucumber中看到很多发生的事情是输入类型字段(如果它们重复)SitePrismwebdriver

有些是这样的:

<input type="text" placeholder="some cool text"/>
<input type="text" placeholder="some cool text"/>
<input type="text" placeholder="some cool text"/>

所以我想知道,是否可以同时在所有字段中定义一些值,例如:

site.find('[placeholder="some cool text"]').set('A simple string')

我很难找到答案,一次定义一个循环是没有问题的,但我不知道如何同时选择它们。

标签: cucumbercapybara

解决方案


find仅限于返回一个元素,如果你想要多个你会想要使用all. 使用 Capybara 之类的

page.all('input', text: 'some cool text').each do |inp| 
  inp.set('A simple string')
end

会做你要求的。如果您想确保处理的正是 3 个匹配元素,您将使用该count选项(选项之间有also最小, 最大值, and 可用)

page.all('input', text: 'some cool text', count: 3).each do |inp| 
  inp.set('A simple string')
end

更新:既然你已经更新了你可以做的问题

page.all("input[placeholder='some cool text']", count: 3).each do |inp| 
  inp.set('A simple string')
end

但我可能会使用 Capybara 提供的选择器类型,例如

page.all(:fillable_field, placeholder: 'some cool text', count: 3).each do |inp|
  inp.set('A simple string')
end

推荐阅读