我有一个select2 v4,它通过AJAX加载选项。 我正在运行一个Cucumber测试,需要选择列表的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
这不会给我带来错误,但是我没有选择的选项,因此我假设单击实际上没有作用。我尝试选择的选项:
# 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
,但即使等待2分钟也没有得到true
的帮助:
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”,搜索:true
但我收到#undefined method
World(CapybaraSelect2)and I have
env.rb`
in my
select2'
我将Cucumber v3.1.2
与红宝石gem 'cucumber-rails'
一起使用
答案 0 :(得分:0)
poltergeist驱动程序大致等效于7年的Safari版本,这意味着它不支持很多当前的JS / CSS。这意味着您的问题可能仅仅是select2与Poltergeist不再兼容(没有很多polyfilling)。更新到使用真实的浏览器(稳定的-通过硒的镀铬等)或直接脱离Chrome浏览器的驱动程序(高度Beta版)之一(最好是使用Poltergeist进行升级)(Apparition是其中之一)他们)。这些将使您可以使用可见的浏览器(可用于调试)或无头运行。
以下代码通过硒使用Chrome,并与select2演示站点进行交互以选择通过Ajax加载的条目。
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