Ruby on rails 如何根据元素的值从分组选择中选择元素?

Ruby on rails 如何根据元素的值从分组选择中选择元素?,ruby-on-rails,cucumber,capybara,Ruby On Rails,Cucumber,Capybara,我遇到的问题(我已经尝试了interwebs上的所有解决方案)是如何使用capybara从分组select中选择元素 下面是下拉列表: <%= f.grouped_collection_select(:subcategory_id, Category.order(:name), :subcategories, :name, :id, :name, {}, { :class=> "form-control" }) %> 错误 Unable to find option "Ort

我遇到的问题(我已经尝试了interwebs上的所有解决方案)是如何使用capybara从分组select中选择元素

下面是下拉列表:

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

Unable to find option "Ortodoncista" (Capybara::ElementNotFound)
这个答案在@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\u category
,我想选择的选项是
music
。所以我的例子是

select_by_value "user_category", "Musician"

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

此选项用于根据选项元素的值查找选项元素,该值对应于集合(类别)的子级上的option\u key\u方法的结果(:id):

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

或者(请记住)这样,如果您想使用capybara从selecbox中选择给定选项:

select 'Option Label', :from => 'Selectbox Label Text'
在您的情况下,将是对集合(类别)的子项使用选项\u值\u方法的结果


Obs:

我建议您使用
保存和打开页面
方法,并包含页面的源代码,以便更好地理解。这是一个好主意。下一次我会这么做:)@MauricioMoraes,我只把你建议的编辑标记为有用,因为它改进了标题。你留下了很多噪音,检查我的编辑。这样更好!只是想让freddyrangel知道,你的问题很好,但不是很直接,而且有重复的信息。谢谢brasofilo。
 page.find('select#your-selectbox-id option[value="your-value"]')
select 'Option Label', :from => 'Selectbox Label Text'