如何使用水豚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">&nbsp;Institution1</option> <option value="e1a4efa7-352d-410a-957e-35c8a3b92944">&nbsp;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...