Существует помощь в режиме онлайн для использования select2 с capybara (см. Ссылки ниже), но никакой помощи, в частности, насколько я видел для выпадающих полей select2. Я пробовал всевозможные вещи, включая попытку заполнить поле, когда: js => false (используя что-то по линиям find(:xpath, "//input[@id='product_manufacturer_id']").set "Test product manufacturer"
) или варианты решений, которые работают с другими полями select2 (см. Ссылки ниже). До сих пор для меня ничего не работает.Как использовать capybara для выбора раскрывающегося поля select2
Заметки о моей конфигурации:
- Использование ВЫБ.2 версии 3
- Использование водосвинку WebKit
- Это особое поле также использует простую форму, и это объединение (поэтому имеет
f.association
...). В частности,ProductManufacturer
экземпляры находятся в отношенииhas_many
с продуктами. - Раскрывающееся поле select2 должно быть динамически заполнено
ProductManufacturer
экземплярами, которые соответствуют тексту запроса (т. Е. Текст, который вы вводите в поле поиска).
В случае полезно посмотреть, как я реализую завод:
Вот моя фабрика файл:
factory :product do
name "Test product"
url { Faker::Name.name.parameterize }
access_level 1
product_manufacturer
end
factory :product_manufacturer do
name "Test product manufacturer"
factory :product_manufacturer_with_product do
transient do
products_count 1
end
after(:create) do |product, evaluator|
create_list(:product,
evaluator.products_count,
product: product)
end
end
end
И затем, перед началом теста, я бегу:
@product_manufacturer = create(:product_manufacturer)
Моя последняя попытка: Мой вспомогательный метод (который работает и для других моих полей ВЫБ.2):
def select2_choose(id, options)
page.execute_script "$('#{id}').trigger('keydown').val('{options[:query]}').trigger('keyup');"
find(".select2-result-label", :text => options[:choose]).click
end
А потом, как я его реализации:
select2_choose("#s2id_autogen7",
:query => @product_manufacturer.name[0...-2],
:choose => @product_manufacturer.name)
которая выводит следующее сообщение об ошибке:
Failure/Error: create_product
Capybara::ElementNotFound:
Unable to find css ".select2-result-label" with text "Test product manufacturer"
(что в основном означает, что он нашел и нажал на раскрывающийся список, и он ввел текст запроса «Test product production». Но Выбор2 не найти вариант из базы данных, чтобы найти его)
Обратите внимание, что я успешно использовал factory_girl генерировать мой ProductManufacturer экземпляр объекта @product_manufacturer
, и называя вещи, такие как puts @product_manufacturer
успешна, возвращая экземпляр объекта:. ProductManufacturer:0x007f0145f9cb38>
.
Вот скриншот справа перед тест не пройден:
Другие вопросы, которые связаны, но не в полной мере решить эту проблему:
- Выбор падения Выбор2 спады (но не в капибары):
How to select option in drop down using Capybara
Unable to select item in Select2 drop down
- Выбор параметров ВЫБ.2 в водосвинки (но не падение падения):
How to test a Select2 element with capybara DSL? (Примечание: Я успешно использовал ответы от сюда, чтобы установить не выпадающий Select2 полей)
- выбор выбор2 раскрывающийся с использованием селен
Selenium Select2 command for drop-down box
Принял мой собственный ответ, потому что это то, что на самом деле устранило проблему. Однако для того, как реализовать capybara с select2, см. Ответ ThomasWalpole, который предоставляет решение и объяснение для решения, которое вы не можете найти в другом месте. – RyanQuey