Подтвердить что ты не робот

Selenium WebDriver JS - Явная ожидаемая

Я использую selenium-webdriverjs. Я хочу дождаться появления определенного элемента, для которого я создал явное ожидание следующим образом, и он работает нормально,

var displayed = false;
driver.wait(function(){
    driver.findElement(locator).isDisplayed().then(function(value){
        displayed = value;
    });
    return displayed;
}, timeout);

Это лучшее, что я могу сделать, или есть лучший способ сделать это? Причина, по которой я спрашиваю, заключается в том, что при первом вызове callback вызова (в моем случае) он всегда возвращает false. Только после выполнения isDisplayed обещания будет отображаться значение отображаемого изменения.

4b9b3361

Ответ 1

Ваш код смешивает синхронный возврат с асинхронными обратными вызовами, следующий код должен делать правильно:

return driver.wait(function() {
    return driver.findElement(locator).isDisplayed();
}, timeout);

Внутренняя функция вернет обещание, что driver.wait будет ждать и примет его значение (true/false) в качестве условия ожидания.

Ответ 2

Чтобы избежать значительной путаницы в асинхронных ароматах webdriver и js, вы можете попробовать webdriver-sync: https://npmjs.org/package/webdriver-sync

По моему опыту, асинхронные версии API-интерфейса webdriver становятся трудными для чтения после слишком большого количества вложенных обратных вызовов.

Это, конечно, предполагает, что у вас нет требований оставаться асинхронными.

Отказ от ответственности: я являюсь создателем этого программного обеспечения (webdriver-sync)