Если вы тестируете одностраничное приложение с помощью Selenium, вы обязательно столкнетесь с проблемами ожидания (знаменитые StaleElementReferenceError
, NoSuchElementError
или ElementNotClickableError
и другие).
Это происходит, когда Selenium думает, что страница завершила рендеринг, и приступает к выполнению своих утверждений, в то время как ваш Javascript все еще работает.
Selenium-webdriver, библиотека NodeJS для Selenium, поставляется с удобным модулем до, который позволяет нам избежать этих проблем. Однако я нашел его синтаксис немного неуклюжим, поскольку многие из его методов требуют, чтобы вы передавали ему элемент вместо селектора.
Я хотел иметь возможность совершать такие звонки:
until.elementTextMatches('.myElementClass', /some content/); until.elementIsNotVisible('.myElementClass');
Поэтому я решил написать небольшой вспомогательный модуль для ожидания:
На данный момент он предоставляет только три метода: elementTextMatches
, elementIsNotVisible
и seconds
. Однако, если вы найдете это полезным и хотите, чтобы я добавил еще несколько методов, дайте мне знать в комментариях.