С Capybara, как вы получаете утверждения о переходных элементах для работы? - PullRequest
0 голосов
/ 11 июня 2019

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

Моя проблема в том, что тест выполняется слишком быстро! Я могу выбрать между тремя утверждениями, прежде чем столкнуться с ошибкой ... но у меня есть четыре утверждения, которые я хочу сделать!

Есть ли какой-нибудь способ заставить Capybara запускать свои утверждения на странице, как она существует в определенный момент, или, возможно, какой-то обходной путь, позволяющий отображать загружаемые данные достаточно долго, чтобы надежно их проверить надлежащим образом?

Мои текущие тесты выглядят примерно так:

click_on('Submit')
assert_text('...')
refute_text('Edit')
refute_text('Submit')
refute_text('Cancel')

1 Ответ

2 голосов
/ 11 июня 2019

Capybara работает против активной страницы, поэтому нет возможности (в текущих версиях выпуска) заморозить страницу в ее текущем состоянии (на самом деле не на 100% верно, поскольку вы можете использовать document = Capybara.string(page.html) для захвата источника страницы изатем используйте искатели / совпадения / и т. д. для документа, но вы потеряете CSS, JS и т. д.).Поскольку assert_text / refute_text может принимать регулярное выражение, вы можете просто объединить все свои опровержения в одно

refute_text(/Edit|Submit|Cancel/)

, которое может привести вас к срокам (хотя все, что зависит от времени, может сломаться в некоторыхуказывает на то, что оборудование работает на изменения и т. д.)

Если проблема возникла с другой стороны, проблему можно описать, поскольку ваш запрос AJAX возвращается слишком быстро.Вы можете настроить свои данные, чтобы сделать запрос более длительным, вы можете использовать прокси-сервер для задержки вашего запроса (puffing_billy и т. Д.) Или, если вы используете селен с Chrome, вы можете посмотреть на метод network_condtions=, доступный в драйвере селена

page.driver.browser.network_conditions=(...)

как способ замедлить ваш запрос.Это ограничило бы выполнение теста только в Chrome, что может или не может быть приемлемо для вас.

Другой вариант, если вы используете Chrome и хотите попробовать бета-код, - это использовать page_freeze ветвь капибары, которая добавляет

page.driver.freeze_page # Pause page activities
page.driver.thaw_page # Resume page activities
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...