Однако иногда при нажатии кнопки перенаправление страницы не выполняется.
срабатывает. Я уверен, что кнопка нажимается правильно, так как
Анимация кнопки срабатывает, и Selenium продолжает тест, где она
не удается, потому что он не находит элементы, которые должны быть на
следующая страница.
Чтобы найти надежное решение, вероятно, нет никакого способа фактически разобраться в проблеме и отладить страницу, чтобы выяснить, что именно она обычно делает при нажатии кнопки, и почему она не работает в этом случае. В идеале вы хотели бы протестировать страницу, не зная о ее внутренностях, но иногда это невозможно.
Хотя только отладка действительно скажет вам, что происходит, я могу предложить обоснованное предположение:
Кажется, что страница выполняет дополнительную инициализацию в фоновом режиме после загрузки видимой части. Например, он может запустить JavaScript после загрузки, который прикрепляет обработчики событий к кнопкам. Это означает, что после загрузки страницы есть короткое время, когда она не полностью функциональна. Если вы нажмете на это окно во время теста, произойдут странные вещи.
Чтобы правильно справиться с этим, вам необходимо:
- узнайте, что именно еще не «готово» на странице
- найдите на странице что-то, что говорит о том, что страница готова, например, появляется DIV
- вставьте код в свой тест (в идеале в объект страницы , который вы, как мы надеемся, используете), который ожидает готовности страницы, обычно используя
WebDriverWait
К сожалению, детали того, как это сделать, будут зависеть от страницы, поэтому вам придется немного покопаться (см. Выше :-)). Между прочим, этот тип проблемы не является редкостью при тестировании сложных веб-приложений: часто приложение будет выполнять какие-либо действия в фоновом режиме после завершения действия (например, загрузки страницы или нажатия кнопки), и вам придется подождать " реальное завершение "перед дальнейшим взаимодействием со страницей.
Одним из возможных решений проблемы будет Thread.sleep () перед нажатием
кнопку, но я бы хотел избежать этого решения.
Да, это обходной путь, который я действительно использовал. Это может быть прагматичным решением, если «правильное» решение, изложенное выше, слишком утомительно, но, как вы, вероятно, знаете, это не надежное решение (вы никогда не знаете, как долго ждать), и, если оно используется часто, замедлит ваши тесты Поэтому я рассматриваю это как вариант последней инстанции.