我想等待错误信息出来。但是,当我使用browser.driver.manage()。timeouts()。implicitlyWait()时,我必须使用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;
};
答案 0 :(得分: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 + ".";
}
或类似的东西。将等待时间(上面的AKA 3000)设置为您要等待错误的时间。如果首先找到元素,则退出直到。
答案 1 :(得分: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秒,如果找到元素,则返回带有元素文本的promise,如果元素将会出现超时错误不会在2秒内出现。