我正在尝试使用Capybara(2.1.0)从下拉菜单中选择一个项目。
我想按编号选择(意思是选择第二,第三等选项)。
我用谷歌搜索疯狂尝试各种各样的东西,但没有运气。
我可以使用以下值来选择它:
find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click
但是我不想使用那种方法b / c值会改变,这将使我的测试变得脆弱。
下拉列表的HTML是:
<td class="value">
<select name="organizationSelect" id="organizationSelect" class="required">
<option value="NULL">Choose...</option>
<option value="4c430d62-f1ba-474f-8e8a-4452c55ea0a8"> Institution1</option>
<option value="e1a4efa7-352d-410a-957e-35c8a3b92944"> Institution / test</option>
</select>
</td>
我也试过这个:
option = find(:xpath, "//*[@id='organizationSelect']/option[2]").text
select(option, :from => organizationSelect)
但它导致了这个错误:
Ambiguous match, found 2 elements matching option "Institution" (Capybara::Ambiguous)
那么如何从下拉列表中选择第一个,第二个,第三个等选项(使用Capybara)?
答案 0 :(得分:157)
出于某种原因,它对我不起作用。所以我不得不使用别的东西。
select "option_name_here", :from => "organizationSelect"
为我工作。
答案 1 :(得分:122)
如果您查看the source of the select
method,您可以看到传递from
密钥时它的作用主要是:
find(:select, from, options).find(:option, value, options).select_option
换句话说,它会找到您感兴趣的<select>
,然后在其中找到<option>
,然后在select_option
节点上调用<option>
。
你已经完成了前两件事,我只是重新安排它们。然后你可以在最后添加select_option
方法:
find('#organizationSelect').find(:xpath, 'option[2]').select_option
答案 2 :(得分:5)
另一种选择是添加像这样的方法
def select_option(css_selector, value)
find(:css, css_selector).find(:option, value).select_option
end
答案 3 :(得分:3)
不幸的是,最流行的答案并不完全适用于我。我必须将.select_option
添加到语句的末尾
select("option_name_here", from: "organizationSelect").select_option
没有select_option
,没有执行选择
答案 4 :(得分:2)
要添加另一个答案(因为显然有很多方法可以根据您的设置进行) - 我选择了文字option
元素并点击它
find(".some-selector-for-dropdown option[value='1234']").select_option
它不是很漂亮,但它有效:/
答案 5 :(得分:2)
2017年没有任何答案适用于我与capybara 2.7。 我得到了“ArgumentError:错误的参数数量(给定2,预期0)”
但是这样做了:
find('#organizationSelect').all(:css, 'option').find { |o| o.value == 'option_name_here' }.select_option
答案 6 :(得分:1)
这不是直接答案,但您可以(如果您的服务器允许):
1)为您的组织创建一个模型; 额外:填充HTML会更容易。
2)为您的模型创建工厂(FactoryGirl);
3)用工厂创建一个列表(create_list);
4)从列表中选择一个“组织”(样本):
# Random select
option = Organization.all.sample
# Select the FIRST(0) by id
option = Organization.all[0]
# Select the SECOND(1) after some restriction
option = Organization.where(some_attr: some_value)[2]
option = Organization.where("some_attr OP some_value")[2] #OP is "=", "<", ">", so on...
答案 7 :(得分:0)
这是我找到的最简洁的方法(使用水豚3.3.0和铬驱动器):
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://saskatoonwashworld.com/$1 [R=301,L]
将选择第二个选项。根据需要增加索引。
答案 8 :(得分:0)
在Capybara中,您只能对 xpath
使用查找find(:xpath, "//*[@id='organizationSelect']/option[2]").click
和方法点击