使用 select2 和 Capybara 运行 Cucumber 测试选择一个选项
Selecting an option with select2 and Capybara running Cucumber test
我有一个 select2 v4,它通过 AJAX 加载选项。
我是 运行 一个 Cucumber 测试,我需要 select 列表的 2 个选项,但我似乎无法打开和加载列表(通常在我键入 2 或字符时填充).
我试过:
按照建议here:
@session.execute_script("$('#publish_to').select2('open')")
和
@session.first(".input.publish_to .select2-container").click
和
@session.first("#publish_to").find(".select2-choice").click
这不会给我一个错误,但我没有得到 select 的选项,所以我假设点击没有真正起作用。我尝试过的事情 select 选项:
# This one cannot find the css:
@session.find(".select2-results__options", text: client.email).click
# This one gives me a Timeout error
@session.evaluate_script "$('#publish_to').val(#{client.id}).trigger('change')"
# This one gives me a Timeout error
@session.evaluate_script "$('.select2-search__field').trigger('keydown').val('#{client.email}').trigger('keyup')";
sleep 10
@session.find('.select2-search__option', text: client.email).click
任何带有 trigger
的东西都会给我一个超时错误,所以我尝试等待 jQuery.active
但我从来没有得到 true
甚至等待 2 分钟:
counter = 0
timeout_in_sec = 120
while counter < timeout_in_sec && @session.evaluate_script('jQuery.active').zero?
sleep 1.second
counter+=1
end
我尝试使用 gem capybara-select2 运行:
@session.select2 client.email, css: '#publish_to', 搜索:真
但我收到错误 undefined method
select2' for #and I have
World(CapybaraSelect2)in my
env.rb`
我正在使用 Cucumber v3.1.2
和 ruby gem 'cucumber-rails'
poltergeist 驱动程序大致相当于 7 年前的 Safari 版本,这意味着它不支持很多当前 JS/CSS。这意味着您的问题可能只是 select2 不再与 Poltergeist 兼容(没有大量填充)。更新为使用真正的浏览器(稳定 - chrome 通过 selenium 等)或直接到 Chrome 驱动程序之一(高度测试版)已经从 Poltergeist( Apparition 就是其中之一)。这些将允许您 运行 使用可见的浏览器(对调试有用)或无头浏览器。
以下代码通过 selenium 使用 Chrome 并与 select2 演示站点交互以 select 通过 Ajax.[=12= 加载的条目]
require "selenium/webdriver"
require "capybara/dsl"
sess = Capybara::Session.new(:selenium_chrome)
sess.visit("https://select2.org/data-sources/ajax")
sess.first('.select2-container', minimum: 1).click
sess.find('.select2-dropdown input.select2-search__field').send_keys("capy")
sleep 5 # just to watch the browser search
sess.find('.select2-results__option', text: 'teamcapybara/capybara').click
sess.assert_selector(:css, '.select2-selection__rendered', text: 'teamcapybara/capybara')
sleep 5 # just to see the effect
我有一个 select2 v4,它通过 AJAX 加载选项。 我是 运行 一个 Cucumber 测试,我需要 select 列表的 2 个选项,但我似乎无法打开和加载列表(通常在我键入 2 或字符时填充).
我试过:
按照建议here:
@session.execute_script("$('#publish_to').select2('open')")
和
@session.first(".input.publish_to .select2-container").click
和
@session.first("#publish_to").find(".select2-choice").click
这不会给我一个错误,但我没有得到 select 的选项,所以我假设点击没有真正起作用。我尝试过的事情 select 选项:
# This one cannot find the css:
@session.find(".select2-results__options", text: client.email).click
# This one gives me a Timeout error
@session.evaluate_script "$('#publish_to').val(#{client.id}).trigger('change')"
# This one gives me a Timeout error
@session.evaluate_script "$('.select2-search__field').trigger('keydown').val('#{client.email}').trigger('keyup')";
sleep 10
@session.find('.select2-search__option', text: client.email).click
任何带有 trigger
的东西都会给我一个超时错误,所以我尝试等待 jQuery.active
但我从来没有得到 true
甚至等待 2 分钟:
counter = 0
timeout_in_sec = 120
while counter < timeout_in_sec && @session.evaluate_script('jQuery.active').zero?
sleep 1.second
counter+=1
end
我尝试使用 gem capybara-select2 运行:
@session.select2 client.email, css: '#publish_to', 搜索:真
但我收到错误 undefined method
select2' for #and I have
World(CapybaraSelect2)in my
env.rb`
我正在使用 Cucumber v3.1.2
和 ruby gem 'cucumber-rails'
poltergeist 驱动程序大致相当于 7 年前的 Safari 版本,这意味着它不支持很多当前 JS/CSS。这意味着您的问题可能只是 select2 不再与 Poltergeist 兼容(没有大量填充)。更新为使用真正的浏览器(稳定 - chrome 通过 selenium 等)或直接到 Chrome 驱动程序之一(高度测试版)已经从 Poltergeist( Apparition 就是其中之一)。这些将允许您 运行 使用可见的浏览器(对调试有用)或无头浏览器。
以下代码通过 selenium 使用 Chrome 并与 select2 演示站点交互以 select 通过 Ajax.[=12= 加载的条目]
require "selenium/webdriver"
require "capybara/dsl"
sess = Capybara::Session.new(:selenium_chrome)
sess.visit("https://select2.org/data-sources/ajax")
sess.first('.select2-container', minimum: 1).click
sess.find('.select2-dropdown input.select2-search__field').send_keys("capy")
sleep 5 # just to watch the browser search
sess.find('.select2-results__option', text: 'teamcapybara/capybara').click
sess.assert_selector(:css, '.select2-selection__rendered', text: 'teamcapybara/capybara')
sleep 5 # just to see the effect