Как неявное ожидание транспортира взаимодействует с явным ожиданием?
недоразумение происходит, когда неявное ожидание менее явные:
var timeOut = 5000;
var search = element(by.xpath(`//*[@name='qwer']`));
browser.manage().timeouts().implicitlyWait(4000);
browser.ignoreSynchronization = true;
describe('Protractor Test', function () {
beforeEach(function () {
browser.get('https://www.google.com.ua');
});
it('EC', function () {
console.log('START');
// browser.sleep(timeOut);
browser.wait(protractor.ExpectedConditions.presenceOf(search), timeOut);
});
});
Общее время: 8.613 секунд. Установите implicitlyWait на секунду ниже: 3000 и результат 6.865 секунд. Как это работает под капотом? Большое спасибо заранее!
3 ответов
это хороший вопрос. Многие хорошие ребята из QA automation разбили этим головы.
неявные ожидания
это специальное скрытое автоматическое ожидание, на каждом driver.findElement(...)
.
Исходный webdriver (JS, python, java) вызывает исключение NoSuchElementException, если элемент не может быть найден в структуре DOM страницы. Такого рода ожидание будет сделано перед каждым driver.findElement
, независимо от того, какой указатель вы используете. Когда неявные ожидания истекло, NoSuchElementException будет выброшен
это отличный вопрос, и эти непредсказуемые времена ожидания при использовании комбинации неявных и явных ожиданий были предупреждены и заявлены в селен документация. browser.wait()
является явным ожиданием, и вы используете это в сочетании с implicit wait - browser.manage().timeouts().implicitlyWait()
ожидание имеет автоматическое выполнение задачи истекает определенное количество времени, прежде чем перейти к следующему шагу. Вы должны выбрать использовать Явное или неявное ожидание.
предупреждение: Не смешивайте неявные и явные ожидания. Это может вызвать непредсказуемое время ожидания. Например, установка неявного ожидания 10 секунды и явное ожидание 15 секунд могут привести к тайм-ауту произойти через 20 секунд.
ответ: оба ожидания ждут параллельно. Неявное ожидание опрашивает 4 секунды и возвращает сбой, после которого явное ожидание ждало только 4 секунды и имеет еще 1 идти. Это переиздает неявное ожидание снова, и он опрашивает еще 4 секунды и снова терпит неудачу. После 8 секунд (2 попытки неявного ожидания) явное ожидание 5 секунд также истекло, и мы, наконец, имеем нашу ошибку после потери 3 неожиданных секунд. Например, в случае неявного набора в 8 и явного набора в 17 мы будем ждать 8*3 = 24 секунды. Обратите внимание, что выполнение скрипта занимает некоторое время, поэтому, если он медленный, следующая итерация может не начаться.