如何从名称中包含变量的选择框中选择内容?

时间:2019-04-16 19:11:46

标签: html ruby capybara

使用此选择元素进行选择时遇到麻烦。

<select name="vehicle_attrs[position_count]" class="mb1"><option>Position / Quantity</option><option>Front</option><option>Rear</option></select>

我尝试过

select('Front', :from=>'mb1')
select('Front', :from=>'vehicle_attrs[position_count]')
select('Front', :from=>'vehicle_attrs[1]')

所有这些都会导致找不到选择框的错误

2 个答案:

答案 0 :(得分:0)

select-https://www.rubydoc.info/github/teamcapybara/capybara/Capybara/Node/Actions#select-instance_method的文档中,我们可以看到from选项带有“选择框的ID,Cpybara.test_id属性,名称或标签”。

'mb1'或'vehicle_attrs [1]'都不是任何一个,因此它们将失败。

'vehicle_attrs [position_count]'是名称,因此假设该框实际上在页面上可见(不替换为JS驱动的选择小部件等),应该可以使用。如果不是,请编辑您的问题并添加尝试使用它时获得的完整的完全错误消息。当然,如果页面上只有一个选择框,并且带有“ Front”选项,那么您根本不需要指定from选项,就可以做到

select 'Front'

答案 1 :(得分:0)

我从来都不喜欢Capybara的“定位器”概念有多严格(即必须有一个名称/标识/标签),但是如果您深入研究源代码,那么那些有用的方法如select,{ {1}}和click_on只是fill_in的包装器和Element的某些本机方法,它采用任意CSS,并且几乎可以在所有情况下使用。在这种情况下,您可以使用:

find

由于下拉列表通常具有多个相似的选项,其中一个是另一个的子字符串,因此您可以考虑使用完全匹配的字符串,例如

find('[name="vehicle_attrs[position_count]"]').find('option', text: 'Front').select_option