水豚和 Select2 版本 4

Capybara and Select2 Version 4

如何用水豚填充 in/select select2 搜索框(通过 ajax 获取结果)。

使用 select2 的最新 version 4 和 rails 项目中的最新 capybara/rspec

SO 和其他地方有很多关于如何将 Capybara 与 Select2 3.x 一起使用的示例,但 version 4 没有,这是重写的。

为此您需要创建自己的支持函数(如果您想多次使用它。)

我有一个针对 select2 版本 3.x.x 的解决方案。这也应该适用于 4。

为此,您需要创建助手 spec/support/feature/xyz.helper.rb,此文件应如下所示:

module Feature
  module XYZHelper
    def select2(value, element_selector)
      first("##{element_selector}").find(".select2-choice").click
      find(:xpath, "//body").find(".select2-results li", text: value).click
    end
  end
end

并且从调用规范中包含类似 include Feature::XYZHelper。你可以像这样使用它:

select2("Text value here", "Id of selector")

对于4.0,看起来他们实际上简化了很多。对于单个 select,您可以只包含此辅助方法:

def select2(value, **options)
  first("#select2-#{options[:from]}-container").click
  find(".select2-results__option", text: value).click
end

到目前为止对我有用,但我还没有尝试过 select 的更多自定义版本。

我知道这已经过时了,但是这里(以及许多其他帖子)的大部分答案对 select2 版本 4 及更高版本都不适用。我为它编写了自己的函数,它也适用于页面上的 multiselects 和多个 select2 输入。但是,您需要将 select2 包装在具有特定 ID 的 div 中,以便找到正确的 ID。

def select2(values, id)
    values.each do |val|
        if page.has_no_css? ".select2-dropdown"
            within(id) do 
                find('span.select2').click 
            end
        end
        within ".select2-dropdown" do
            find('li', text: val).click
        end
    end
end

使用示例:

select2([value_to_select], "id of div containing desired select2")

您必须为 selection 传递一组值,即使它是单个 select。对于其中的每一个,它将打开所需 select2 的下拉列表,然后是 select 值。

如果您使用 select2 版本 2 或 3,则有 capybara-select-2 gem which supports version 2/3/4 of select2. It expects select2 version 4 by default. You can configure 它适用于其他版本

只需将 gem 添加到 Gemfile 中的测试组

group :test do
  gem 'capybara-select-2'
end

现在您可以在 Cucumber 或 RSpec:

中使用 select2 测试助手
select2 'Buy Milk', css: '#todo'

# Search options
select2 'Buy Milk', from: 'Things to do', search: true

# Create new options
select2 'Millennials', from: 'Generations', tag: true

更新: 从版本 0.3.0 开始 CapybaraSelect2 自动检测 select2 版本