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;
};
584   2  

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

    Ничего не найдено.