У меня проблема, мне нужно подождать, пока компонент покажется на экране, иногда компоненты слишком долго задерживаются, чтобы отображаться. Мне нужно подождать, пока какое-то поле или переменная не станет истинным. Кто-то знает, как это сделать?
element(by.id('nextStage-button')).isPresent().then(function (visible) {
let i = 0;
while (visible !== true){
browser.sleep(2000);
console.log("test "+ i++);
if(visible === true){
break;
}
}
Посмотрите на использование ожидаемых условий.
Вы могли бы сделать что-то вроде этого:
const EC = protractor.ExpectedConditions;
const nextStageButton = $('#nextStage-button');
browser.wait(EC.visibilityOf(nextStageButton), 3000);
// do whatever you wanted to do once it visible
browser.wait() будет планировать команду, чтобы ждать условия для удержания или обещания разрешить.
Эта функция блокирует поток управления WebDriver, а не время выполнения javascript. Это задерживает выполнение будущих команд webdriver (например, это заставит Protractor ждать, прежде чем отправлять будущие команды серверу selenium), и только тогда, когда включен поток управления webdriver.
Ссылка на документацию: https://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.wait
В вашем случае вы хотите подождать, пока не появится определенный элемент, и для этого вы должны использовать isDisplayed(), поскольку он вернет обещание, которое будет разрешено, если этот элемент в данный момент отображается на странице.
await browser.wait(async () => await el.isDisplayed(), DefaultTimeout);