Implicit wait в Protractor — это механизм, который
заставляет WebDriver автоматически ждать определённое время перед тем,
как выбросить исключение NoSuchElementError, если элемент
на странице не найден. В отличие от явных ожиданий
(Explicit waits), неявные ожидания применяются ко всем
операциям поиска элементов и действуют глобально на всю сессию
тестирования.
Неявное ожидание настраивается через метод
manage().timeouts().implicitlyWait():
browser.manage().timeouts().implicitlyWait(5000); // 5000 миллисекунд
Здесь время указывается в миллисекундах. После этой настройки любой
вызов element(by.css(...)) или других локаторов будет
пытаться найти элемент до истечения указанного таймаута.
Когда тест выполняет поиск элемента:
ElementFinder.NoSuchElementError.Этот подход позволяет избежать частых ошибок, связанных с динамическими страницами, где элементы загружаются с задержкой.
describe('Implicit Wait Example', function() {
beforeAll(function() {
browser.manage().timeouts().implicitlyWait(3000); // 3 секунды для поиска всех элементов
browser.get('https://example.com');
});
it('should find an element that appears after a delay', function() {
var delayedElement = element(by.id('delayed-button'));
delayedElement.click(); // если элемент ещё не загружен, WebDriver подождёт до 3 секунд
});
it('should handle missing element gracefully', function() {
var missingElement = element(by.css('.not-exist'));
missingElement.isPresent().then(function(present) {
console.log('Элемент присутствует: ', present); // false, если элемент не найден после таймаута
});
});
});
ExpectedConditions) для элементов с динамическим
появлением.Protractor поддерживает несколько уровней ожиданий:
browser.wait() с функцией:
для кастомных условий.Использование implicit wait в сочетании с явными ожиданиями требует осторожности. Если таймауты слишком велики, тест может замедлиться, а слишком малые значения могут вызвать нестабильность при динамических страницах.
browser.manage().timeouts().implicitlyWait(X ms)
↓
element search initiated
↓
element found? → да → возвращаем ElementFinder
↓
нет → пробуем снова до X ms
↓
time out → NoSuchElementError
Этот механизм обеспечивает базовую устойчивость тестов к задержкам в DOM и упрощает работу с элементами на динамических веб-страницах.