Проверьте видимость элемента, которая видна менее чем за секунду в Rails Capybara - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь написать интеграционный тест, в котором я должен проверить видимость элемента при нажатии кнопки. Код отлично работает на одной машине и не работает на другой. Элемент отображается до тех пор, пока данные не поступят из бэкэнда. Так что его видимость зависит также от скорости машины. Это проблема? Это код:

assert page.has_css?('#my_element_id')

assert find('#my_element_id', visible: true)

Но я получаю сообщение об ошибке: expected false to be truthy.

Есть ли другой способ подтвердить видимость элемента?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Не используйте обычный assert, используйте утверждения, предоставленные Capybara, которые включают в себя поведение повторных попыток

assert_css(‘#my_element_id’)

По умолчанию это будет проверять только видимые элементы, но если вы установили Capybara.ignore_hidden_elements = false (не делайте этого, правда, не надо), тогда вам также нужно будет передать параметр: visible

Примечание: у вас могут остаться проблемы, если они видны только в течение очень короткого времени - в этом случае, если вы ' Используя Chrome, вы можете установить очень медленные условия сети, чтобы увеличить время, необходимое для возврата данных

0 голосов
/ 16 января 2020

Вы также можете попробовать: assert find('#my_element_id').visible?

из: https://rubydoc.info/gems/capybara/0.4.0/Capybara/Element#visible% 3F-instance_method

Тем не менее, он говорит:

виден? ⇒ Boolean

Независимо от того, видим элемент или нет. Не все драйверы поддерживают CSS, поэтому результат может быть неточным.

Я предполагаю, что вы говорите о том, является ли #my_element_id видимым.

РЕДАКТИРОВАТЬ:

Если вы ожидаете, пока элемент будет виден в первую очередь, прежде чем проверять элемент с идентификатором #my_element_id, эти сообщения могут быть полезны: Как заставить Capybara проверять видимость после некоторого JS ? 1026 *

Итак, вы можете подождать, пока пройдут данные бэкэнда, а затем проверить видимость. Если вы попытаетесь проверить, что они видны до того, как эти данные, я не совсем уверен, похоже, что это будет зависеть от соединения машины inte rnet со мной.

...