使用此选择元素进行选择时遇到麻烦。
<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]')
所有这些都会导致找不到选择框的错误
答案 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