
Вместо этого используйте ExpectedConditions для работы с транспортиром.
browser.wait (EC.presenceOf (detailsTableResidents), 3500);
Это означает, что он будет ждать до 3500 мс, пока элемент не отобразится.
Если элемент отображается в течение 1000 мс, он пропустит оставшиеся 2500 мс ожидания. Таким образом, вы сэкономили 2500 мс.
Объяснение. Почему вы должны использовать EC вместо сна, чтобы дождаться рендеринга элемента с помощью Protractor.
Protractor «знает об Angular», что означает, что он делает для вас некоторые приятные вещи, например, достаточно умен, чтобы знать, когда приложение Angular загружается, обрабатывать такие вещи, как ожидание завершения цикла дайджеста при обновлении вашей модели и т. Д.
Нет абсолютно никаких правил относительно того, сколько времени потребуется для отображения определенного элемента. Если сеть работает хорошо, загрузка источников займет больше времени.
Проще говоря, это означает, что Protractor будет напрямую связываться с приложением Angular, чтобы сократить время, и он будет получать информацию в реальном времени о том, что конкретный элемент DOM был обновлен.
Разница между browser.sleep () и browser.wait () заключается в том, что browser.wait () ожидает определенного значения / условия. Это условие ожидания действительно для Protractor или любой инфраструктуры WebDriver.
Еще одна вещь, о которой необходимо упомянуть здесь, это то, что Protractor / WebDriver прекратит выполнение этой функции, как только эта функция будет оценена как истинная или истечет время ожидания.
Теперь я покажу, как использовать Smart Waits с транспортиром / Как использовать ожидаемые условия с транспортиром.
Другой способ переписать protractor.driver.sleep - использовать асинхронные функции и ожидание браузера.
пусть matchingFile = UtilsFiles.getFile (filePath);
browser.driver.wait (function () {
if (matchingFile) {
вернуть истину;
}
вернуть ложь;
}, 3000);
В приведенном выше примере UtilsFiles.getFile (filePath); метод, вызывает значение. Если этот метод получит значение в течение 3000 миллисекунд, он вернет true и продолжит, в противном случае вернет false.
Как дождаться, пока элемент будет содержать какой-либо текст, вы можете написать собственное ожидаемое условие:
пусть EC = транспортир.ExpectedConditions;
let testSearchingLookingMethod = function (elementFinder) {
let searchForText = function () {
return elementFinder.getText (). then (function (actualTextResaledFromAPromise) {
return actualTextResaledFromAPromise;
});
};
вернуть EC.and (EC.presenceOf (elementFinder), searchForText);
};
Как запустить указанную выше функцию:
browser.wait (testSearchingLookingMethod (element (by.css (‘.divName’)), 5000);
Есть несколько методов для EC, уже написанных для Protractor, которые вы должны использовать в своих тестах!
Http://www.protractortest.org/#/api?view=ProtractorExpectedConditions
Примеры ожидаемых условий для транспортира:
нет
Отменяет результат обещания.
EC.not (EC.titleIs (‘Foo’));
и
Объедините несколько ожидаемых условий, используя логическое_и, замыкая первое ожидаемое условие, которое оценивается как ложное.
vartitleContainsFoo = EC.titleContains (‘Foo’);
vartitleIsNotFooBar = EC.not (EC.titleIs (‘FooBar’));
// Ожидает, что заголовок будет содержать «Foo», но не «FooBar»
browser.wait (EC.and (titleContainsFoo, titleIsNotFooBar), 5000);
or
Объедините несколько ожидаемых условий в цепочку с помощью logical_or, замыкая первое ожидаемое условие, которое оценивается как истинное.
vartitleContainsFoo = EC.titleContains (‘Foo’);
vartitleContainsBar = EC.titleContains («Бар»);
// он ждет, пока заголовок не будет содержать «Foo» или «Bar»
browser.wait (EC.or (titleContainsFoo, titleContainsBar), 5000);
alertIsPresent
Ожидайте появления предупреждения.
browser.wait (EC.alertIsPresent (), 5000);
elementToBeClickable
Ожидание проверки элемента видно и включено, так что вы можете щелкнуть по нему.
browser.wait (EC.elementToBeClickable ($ (‘# abc’)), 5000);
textToBePresentInElement
Ожидание проверки, присутствует ли данный текст в элементе.
browser.wait (EC.textToBePresentInElement ($ (‘# abc’), ’foo’), 5000);
textToBePresentInElementValue
Ожидание для проверки, присутствует ли данный текст в значении элемента.
browser.wait (EC.textToBePresentInElementValue ($ (‘# myInput’), ’foo’), 5000);
titleContains
Ожидание для проверки того, что заголовок содержит подстроку с учетом регистра.
browser.wait (EC.titleContains (‘foo’), 5000);
titleIs
Ожидание проверки заголовка страницы.
browser.wait (EC.titleIs (‘foo’), 5000);
urlContains
Ожидание для проверки того, что URL-адрес содержит подстроку с учетом регистра.
browser.wait (EC.urlContains (‘foo’), 5000);
urlIs
Ожидание проверки URL-адреса страницы.
browser.wait (EC.urlIs (‘foo’), 5000);
Присутствие
Ожидание для проверки наличия элемента в DOM страницы.
browser.wait (EC.presenceOf ($ (‘# abc’)), 5000);
stalenessOf
Ожидание проверки того, что элемент не прикреплен к DOM страницы.
browser.wait (EC.stalenessOf ($ (‘# abc’)), 5000);
visibilityOf
Ожидание для проверки того, что элемент присутствует в DOM страницы и виден.
browser.wait (EC.visibilityOf ($ (‘# abc’)), 5000);
invisibilityOf
Ожидание для проверки того, что элемент невидим или отсутствует в DOM.
browser.wait (EC.invisibilityOf ($ (‘# abc’)), 5000);
elementToBeSelected
Выделено ожидание проверки выбора.
browser.wait (EC.elementToBeSelected ($ (‘# myCheckbox’)), 5000);
Как дождаться завершения страницы после щелчка по элементу с помощью WebDriver
elementToClick.click (). then (function () {
// обработка начнется, как только щелчок завершится.
});
Обновленный пост о Smart Waits читайте в моей обновленной статье здесь.
У вас есть какие-то конкретные вопросы?
Свяжитесь со мной и спросите меня!
Прочтите здесь: http://bit.ly/browserSleepInProtractor