Когда я тестирую графический интерфейс, элемент появляется и исчезает слишком быстро
Я тестирую графический интерфейс, используя инструменты Webdriver.io и mocha. Сами тесты написаны на CoffeeScript. Некоторые элементы интерфейса загружаются в течение длительного времени, и появляется индикатор вращающейся загрузки. Чтобы продолжить процесс тестирования, необходимо дождаться полной загрузки данных (то есть дождаться исчезновения индикатора загрузки). Этот процесс был выполнен с использованием функции (1):
wait_for_page_load = () ->
$('... load indicator selector ...').waitForDisplayed(20000)
$('... load indicator selector ...').waitForDisplayed(20000, true)
В первой строке я ожидаю момента, когда индикатор загрузки станет видимым. Во втором семестре ожидаю исчезновения индикатора загрузки.
Однако в процессе я столкнулся с ситуацией, когда индикатор загрузки появляется и исчезает слишком быстро. В то же время я просто не успеваю "поймать" индикатор загрузки, потому что в тот момент, когда я ожидаю его появления, он уже исчезает. В то же время в консоли отображается сообщение об ошибке:
element ("... load indicator selector ...") still not displayed after 20000ms
Я нашел выход из этой ситуации. Когда возникла подобная проблема, я исправил только исчезновение индикатора загрузки. Этот процесс был выполнен с использованием функции (2):
wait_for_page_load = () ->
$('... load indicator selector ...').waitForDisplayed(20000, true)
Следует отметить, что с быстрым исчезновением индикатора загрузки также невозможно обойтись вообще без ожидания - в этом случае новые данные не успеют загрузиться.
Однако в некоторых ситуациях я не могу заранее точно определить, как долго индикатор загрузки будет виден: иногда он исчезает почти сразу, и я не могу отследить момент, когда он появляется, в этих случаях я должен использовать функцию (2); иногда он вращается в течение длительного времени, и можно отслеживать момент его появления, используя функцию (1).
Можно ли написать универсальную функцию, которая будет фиксировать появление и исчезновение графического элемента, даже если этот элемент появляется и исчезает очень быстро?
1 ответ
До сих пор я нашел следующий способ решения проблемы. В ситуациях, когда необходимо дождаться исчезновения индикатора загрузки, я сначала отключаюсь на одну секунду, а затем ожидаю исчезновения индикатора загрузки.
utilities.wait_for_page_load = () ->
browser.pause(1000)
$('... селектор индикатора загрузки ...').waitForDisplayed(20000, true)
Таким образом, если индикатор загрузки появился и исчез слишком быстро, то по истечении времени ожидания он больше не будет отображаться на экране, соответственно, мы автоматически ждали, пока индикатор загрузки исчезнет. Если индикатор загрузки висит на экране в течение длительного времени, то по истечении времени ожидания мы просто продолжаем ждать его исчезновения.
Метод не идеален. Основным его недостатком является увеличение общего времени выполнения теста. Однако этот метод универсален и позволяет справиться с обеими ситуациями, описанными в вопросе.