implicitlyWait не работает в WebDriver javascript
Я хочу дождаться появления сообщения об ошибке. Однако, когда я использую браузер.водитель.управлять().перерывы().implicitlyWait (), но я должен использовать браузер.водитель.сон ()
this.getErrorMessage = function () {
var defer = protractor.promise.defer();
browser.driver.sleep(2000); //This works
browser.driver.manage().timeouts().implicitlyWait(2000); // This does not work
browser.driver.findElement(By.xpath(_error_msg_xpath)).getText().then(function (errorMsg) {
defer.fulfill(errorMsg);
});
return defer.promise;
};
2 ответов:
Из того, что я понимаю, вам нужен
browser.wait()в этом случае:this.getErrorMessage = function () { var EC = protractor.ExpectedConditions; var elm = element(by.xpath(_error_msg_xpath)); browser.wait(EC.presenceOf(elm), 2000); return elm.getText(); };Это будет ждать присутствия элемента до 2 секунд, возвращая обещание с текстом элемента в случае, если элемент найден, и вы получите ошибку таймаута в случае, если элемент не будет присутствовать в течение 2 секунд.
Обновлено
Xpath-это более медленная стратегия определения местоположения. Используйте явное ожидание и, возможно, удар до 3 секунд.var aElement try { aElement = driver.wait(until.elementLocated(By.xpath(_error_msg_xpath)), 3000); aElement.getText().then(function (errorMsg) { defer.fulfill(errorMsg); }); catch (err) { message.innerHTML = "Error: " + err + "."; }Или что-то в этом роде. Установите время ожидания (AKA 3000 выше), как долго вы хотите ждать ошибки. Если элемент найден первым, вы выходите из до.
Comments