Есть два случая для учета:
- Является ли элемент присутствует ;смысл существует ли он в DOM.
- Является ли элемент видимым ;это означает, что он находится в DOM и не имеет скрытого или эквивалентного флага.
Для первого случая я использую следующий вспомогательный метод:
this.waitForElement = function(locator) {
browser.wait(function() {
return browser.isElementPresent(locator);
}, testData.Timeout.TWO_MINUTES);
};
Это будет ждать произвольное количество времени, пока элемент, соответствующий предоставленному локатору, станет присутствующим (он существует в DOM).
Во втором случае я использую этот вспомогательный метод:
this.waitForElementIsVisible = function(el){
let EC = protractor.ExpectedConditions;
browser.wait(EC.visibilityOf(el), testData.Timeout.TWO_MINUTES, "Element did not become visible after 2 minutes");
};
Это принимает WebElement
в качестве единственного параметра и ждет, пока элемент не станет видимым (Он существует в DOM и не скрыт с помощью стиля CSS или чего-то еще)
В качестве бонуса я также обнаружил, что этот вспомогательный метод полезен для тестирования состояний ошибок в форме:
this.waitForElementIsClickable = function(el){
let EC = protractor.ExpectedConditions;
browser.wait(EC.elementToBeClickable(el), testData.Timeout.TWO_MINUTES, "Element did not become clickable after 2 minutes");
};
Принимает WebElement
в качестве первого параметра и ждет, пока этот WebElement можно будет щелкнуть.
Обратите внимание, я использую транспортир, и ссылочный транспортир в этих фрагментах.Поэтому, если вы не используете Protractor, скорее всего, они не будут работать на 100% через прямое копирование + вставка.Хотя их должно быть достаточно легко настроить, чтобы они соответствовали вашим настройкам.