Заставить WebdriverIO ждать перезагрузки определенного компонента

Я тестирую приложение Electron/React, используя Spectron, который использует API команд WebdriverIO. Я хотел бы проверить атрибуты на некоторых компонентах, но я хочу быть уверен, что проверяю их только после перезагрузки компонента.

Обычные команды ожидания WebDriverIO, такие как waitForText() или же waitForExist(), подождите некоторые изменения, но мне нужно подождать, пока не произойдет перерисовка компонента. Например, компонент уже будет существовать или уже будет иметь некоторый текст до его перерисовки. Это означает, что любой тест по тексту будет проходить до перерисовки, и я не буду тестировать новый текст. Есть ли общий способ ожидания перерисовки?

1 ответ

Решение

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

Есть ли имя класса, к которому можно добавить тег?

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

Другое решение этого конкретного вопроса об ожидании изменения текста - использовать селектор XPath. Язык XPath обрабатывает HTML-страницу как дерево, но текст, помимо прочего, также является отдельным узлом в этом дереве. В отличие от селектора CSS, вы можете легко выбрать элемент на основе его внутреннего текста. См. Эту статью.

Поэтому, если мой селектор XPath использует текстовый "предикат", я могу использовать стандартный waitForExist команда.

Например, скажите мой pЭлемент после перерисовки должен иметь текст "Бургеры". Он был до перерисовки, но в нем был другой текст. Чтобы выбрать его только тогда, когда у него новый следующий:

const selector = '//*p[text()="Burgers"]';
browser.waitForExist(selector);
Другие вопросы по тегам