SitePrism как ждать любого из элементов - PullRequest
0 голосов
/ 30 сентября 2018

Я тестирую поток пользовательского интерфейса с помощью стека Capybara и SitePrism.К сожалению, мой поток пользовательского интерфейса не является полностью детерминированным, и иногда в потоке появляется предупреждающее сообщение.Поэтому мне нужно иметь условный поток в тесте.

Чтобы дождаться одного элемента, SitePrism предоставляет

@page.wait_for_<element name>

В моем случае могут появиться два элемента, :button_submit или :warning_popup.Что мне нужно сделать, это что-то вроде:

element_name = @page.wait_for_any_of(:button_submit, :warning_popup)

Есть ли какой-нибудь более элегантный способ, кроме как запустить такой цикл?

element_name = nil
while (element_name.nil?) do
  element_name = :button_submit if app.page.has_button_submit?
  element_name = :warning_popup if app.page.has_warning_popup?
  sleep 0.1
end

Я знаю, что этот цикл может закончиться бесконечноцикл, я буду держать его здесь упрощенным для иллюстрации.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

SitePrism имеет класс официантов, который можно вызывать из пространства имен верхнего уровня.

Таким образом, вы можете использовать что-то вроде

SitePrism.Waiter.wait_until_true { has_button_submit? || has_warning_popup? }

Кроме того, сВ выпуске SitePrism v3 вам больше не нужно вызывать wait_for, что делается автоматически.

Если вы чувствуете, что хотите добавить / поработать с site_prism, то возможности ожидания - это то, чтоопределенно недостаточно используются.

Оба сообщения о GH здесь: https://github.com/natritmeyer/site_prism/issues с вашими мыслями

0 голосов
/ 01 октября 2018

Я не верю, что site-prism предоставляет какой-либо чистый способ ожидания одного из нескольких элементов, однако обходным решением будет добавление element к странице, которая найдет любой из элементов с помощью запятой CSS

element :button_submit_or_warning_popup, "#id_of_button, #id_of_warning_popup" 

и тогда вы можете сделать

@page.wait_for_button_submit_or_warning_popup
...