如何通过其值从分组选择中选择元素?

时间:2014-03-14 16:15:07

标签: ruby-on-rails cucumber capybara

我遇到的问题(我已尝试过互联网上的所有解决方案)是如何从带有水豚的分组选择中选择一个元素。

这是下拉列表:

<%= f.grouped_collection_select(:subcategory_id, Category.order(:name), :subcategories, :name, :id, :name, {}, { :class=> "form-control" }) %>

这是我试图选择它的方法之一。

select("Ortodoncista", from: 'provider[subcategory_id]')

错误

Unable to find option "Ortodoncista" (Capybara::ElementNotFound)

2 个答案:

答案 0 :(得分:2)

这个答案对我来说是Capybara: Select an option by value not text @d_rail

首先创建一个帮助器。我把这个助手放在spec/support/utilities.rb

def select_by_value(id, value)
  option_xpath = "//*[@id='#{id}']/option[@value='#{value}']"
  option = find(:xpath, option_xpath).text
  select(option, :from => id)
end

然后使用它:

select_by_value "select_id", "select_option"

在我的情况下,select标记的ID为user_category,我想要选择的选项为Musician。所以我的例子是

select_by_value "user_category", "Musician"

答案 1 :(得分:1)

由于我更熟悉CSS选择,我会使用:

这是为了在集合(类别)的子项上找到与 option_key_method (:id)的结果相对应的值的选项元素:< / p>

 page.find('select#your-selectbox-id option[value="your-value"]')

这将返回 您的值 找到的所需水豚元素,而不是按选项文本进行搜索。然后你可以做任何你想做的事。例如: .text ,或 .click

或者(只是为了记住)这样,如果你想从你的selecbox选择一个给定的选项:

select 'Option Label', :from => 'Selectbox Label Text'

在您的情况下,集合(类别)的子项上的 option_value_method (:name)会产生结果。

Obs:reference for grouped selection