Да, это плохо
Особенно, если ваши тесты проводятся на общедоступном веб-сайте c и работают в различных браузерах, время может сильно различаться, а различные веб-драйверы имеют различные степени качества. Селеновые тесты просто не очень детерминированы c даже в контролируемой среде. Некоторые комбинации веб-драйверов и браузеров особенно подвержены сбоям. (По моему личному опыту Safari наихудший, намного хуже, чем, скажем, IE 11.)
Что такое сбой?
Наша политика состоит в том, чтобы считать сбой только в том случае, если тест не пройден три раза. Мы запустили все тесты, повторно запустили сбои, затем еще раз повторили оставшиеся сбои. Затем мы начинаем расследование.
Устойчивое улучшение
Если вы сохраняете историю результатов теста (и вам следует!), То время от времени вы можете проверять тесты, которые чаще всего дают сбой при первом запуске и посмотрите, есть ли улучшения, которые вы можете сделать. У нас есть регулярное собрание с нестабильным тестированием, на котором мы пытаемся улучшить хотя бы один тест, не ставя под угрозу его целостность. В качестве примера того, как это может выглядеть, вот код (Java), который мы используем, чтобы сделать Safari менее надуманным:
public void click(boolean useSafariWorkaround) {
if (useSafariWorkaround && driver.isSafari()) {
driver.executeScript("arguments[0].click();", webElement);
}
else {
webElement.click();
}
}
Если мы не используем специальную обработку для Safari, это часто терпит неудачу на щелчках. Но если мы используем этот обходной путь везде , многие места терпят неудачу, что иначе сработало бы. Поэтому мы используем значение по умолчанию false
, когда вызываем его, и меняем его на true только в тех местах, где Safari имеет тенденцию к сбою.
Подождите, но не навсегда
Конечно, вы должны использовать неявное ожидание в большинстве мест, где вы запрашиваете в течение 5 или 10 секунд что-то на странице, и происходит сбой только в том случае, если вы не можете найти его за это время. Убедитесь, что вы используете методы ожидания, предоставляемые Selenium (например, WebDriverWait
), чтобы не ждать дольше, чем нужно. Тесты Selenium достаточно медленные, не дожидаясь 5 или 10 секунд на каждом селекторе.