如何使用水豚select下拉选项
我试图从使用水豚(2.1.0)的下拉菜单中select一个项目。
我想通过数字select(意思是select第二,第三等选项)。
我疯狂地Googlesearch各种各样的东西,但没有运气。
我能够通过使用值来select它:
find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click
但我不想用这种方法B / C的价值是会改变,这将使我的testing变得脆弱。
下拉菜单的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)
那么如何从下拉列表中select第一,第二,第三等选项(使用水豚)呢?
如果你看一下select
方法的来源 ,你可以看到当你传递一个key的时候它的作用是:
find(:select, from, options).find(:option, value, options).select_option
换句话说,它find了你感兴趣的<select>
,然后在其中find<option>
,然后在<option>
节点上调用select_option
。
你已经完成了前两件事,我只是重新排列它们。 然后你可以在select_option
方法:
find('#organizationSelect').find(:xpath, 'option[2]').select_option
由于某种原因,它没有为我工作。 所以我用了别的东西
select "option_name_here", :from => "organizationSelect"
为我工作。
不幸的是,最stream行的答案完全不适合我。 我不得不添加.select_option
结束语句
select("option_name_here", from: "organizationSelect").select_option
没有select_option
,没有select正在执行
另一个select是添加一个像这样的方法
def select_option(css_selector, value) find(:css, css_selector).find(:option, value).select_option end
这不是一个直接的答案,但你可以(如果你的服务器允许):
1)为您的组织创build一个模型; 额外:这将是更容易填充您的HTML。
2)为你的模型创build一个工厂(FactoryGirl);
3)与工厂创build一个列表(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...