Когда я тестирую графический интерфейс, элемент появляется и исчезает слишком быстро

Я тестирую графический интерфейс, используя инструменты 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)

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

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

Другие вопросы по тегам