Выбор опции с помощью select2 и Capybara с тестом на огурец - PullRequest
0 голосов
/ 13 марта 2019

У меня есть select2 v4, который загружает опции через AJAX.Я запускаю тест Cucumber, где мне нужно выбрать 2 варианта списка, но я не могу открыть список и загрузить его (который обычно заполняется, когда я набираю 2 или символы).

Я попытался:

Как и предполагалось здесь :

@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, но у меня никогда не было 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 running: @ session.select2 client.email, css: '#publish_to', search: true, но я получаю ошибку undefined method select2 'для # and I have World (CapybaraSelect2) in my env.rb`

Я использую Cucumber v3.1.2 с рубином gem 'cucumber-rails'

1 Ответ

0 голосов
/ 13 марта 2019

Драйвер poltergeist примерно эквивалентен 7-летней версии Safari, что означает, что он не поддерживает много современных JS / CSS. Это означает, что ваша проблема может заключаться просто в том, что select2 больше не совместим с Poltergeist (без большого количества заполнения). Вам будет гораздо лучше перейти на использование реального браузера (стабильного - chrome через селен и т. Д.) Или одного из драйверов для Chrome (с высокой степенью бета-тестирования), которые выделены из Poltergeist ( Apparition is один из них). Это позволит вам работать с видимым браузером (полезно для отладки) или без него.

Следующий код использует 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
...