水豚和 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 版本
如何用水豚填充 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 版本