7

如何select2使用 capybara 填写/选择搜索框(通过 ajax 获取结果)。

在 Rails 项目中使用最新version 4select2和最新的。capybara/rspec

有很多SO关于如何使用 Capybara 的例子,Select2 3.x但不是version 4重写。

4

4 回答 4

5

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

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

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

于 2015-12-15T18:17:49.283 回答
3

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

我有 select2 version 3.xx 的解决方案。这也应该适用于 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

并从调用规范包括 like include Feature::XYZHelper。你可以像这样使用它:

select2("Text value here", "Id of selector")
于 2015-02-28T06:13:13.517 回答
3

有支持 select2 版本 2/3/4 的 capybara -select-2 gem。默认情况下,它需要 select2 版本 4。如果您使用 select2 版本 2 或 3,则可以将其配置为其他版本

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

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

现在您可以select2在 Cucumber 或 RSpec 中使用测试助手:

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.0CapybaraSelect2 版本开始自动检测 select2 版本

于 2018-09-11T22:14:20.643 回答
0

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

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")

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

于 2016-04-05T18:14:08.113 回答