3

I want to wait for the error message comes out. However, when I use browser.driver.manage().timeouts().implicitlyWait(), but I have to use browser.driver.sleep()

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;
};
4

2 回答 2

0

据我了解,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 秒内不存在,您将收到超时错误。

于 2016-04-20T21:04:50.107 回答
0

更新

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 + ".";
}

或类似的东西。将等待时间(上面的又名 3000)设置为您希望等待错误的时间。如果首先找到元素,则退出直到。

于 2016-04-20T20:25:41.477 回答