В Интернете есть помощь по использованию select2 с капибарой (см. ссылки ниже), но никакой помощи, в частности, насколько я видел, для раскрывающихся полей select2. Я пробовал всевозможные вещи, в том числе пытался заполнить поле, когда :js => false (используя что-то вроде строк find(:xpath, "//input[@id='product_manufacturer_id']").set "Test product manufacturer"
) или варианты решений, которые работают с другими полями select2 (см. ссылки, приведенные ниже). У меня пока ничего не работает.
Примечания к моей конфигурации:
- Использование select2 версии 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)
Моя последняя попытка: мой вспомогательный метод (который работает для других моих полей select2):
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"
(что в основном означает, что он нашел и щелкнул раскрывающееся окно, и он вставил текст запроса «Производство тестового продукта». Но select2 не нашел вариант в базе данных, чтобы найти его.)
Обратите внимание, что я успешно использовал factory_girl для создания моего объекта экземпляра ProductManufacturer @product_manufacturer
, и вызов таких вещей, как puts @product_manufacturer
, успешен, возвращая объект экземпляра: ProductManufacturer:0x007f0145f9cb38>
.
Вот скриншот, сделанный прямо перед сбоем теста:
Другие вопросы, которые связаны с этой проблемой, но не решают ее полностью:
– Выбор раскрывающихся списков select2 (но не в капибаре):
Как выбрать параметр в раскрывающемся списке с помощью Capybara
Невозможно выбрать элемент в раскрывающемся списке Select2
– Выбор варианта select2 в капибаре (но не в раскрывающихся списках):
Как протестировать элемент Select2 с помощью Capybara DSL? (Примечание: я успешно использовал ответы отсюда, чтобы выбрать не раскрывающиеся поля select2)
– выбор раскрывающегося списка select2 с помощью селена