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 обещания будет отображаться значение отображаемого изменения.
Ответы
Ответ 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)