告诉 Protractor 在执行 expect 之前等待页面
tell Protractor to wait for the page before executing expect
当我单击导出按钮时,它会向我们的端点发出 REST 调用,几秒钟后,我会收到响应,然后我还会呈现 table。不幸的是,我读到每个调用都是异步的,这意味着即使 table 尚未呈现,我的期望也会被执行。我写的 expect 检查字符串是否在 table 上,但它失败了,因为它还不存在。正确的做法是什么?
it('should generate global user report', function() {
element(by.css('button#exportButton')).click();
expect(element(by.css("th[name*=Date]")).getText()).
toEqual('Date');
})
控制台上的错误是
NoSuchElementError: No element found using locator: By.cssSelector("th[name*=Date]")
我注意到 table 尚未呈现,这就是它失败的原因。
量角器 1.7 引入了一个名为 的功能,可以在此处应用。
等待元素变为可见:
var EC = protractor.ExpectedConditions;
var elm = element(by.css("th[name*=Date]"));
browser.wait(EC.visibilityOf(elm), 5000);
expect(elm.getText()).toEqual('Date');
我在等待动态元素出现时遇到了问题。让 driver 等待它出现或显示。最后的数字是超时。
element(by.css('button#exportButton')).click();
var header = element(by.css("th[name*=Date]"));
browser.driver.wait(function() {
return header.isPresent();
}, 1000);
expect(header.getText()).toEqual('Date');
我不得不等到它出现并显示出来,然后测试才完全稳定。你可以这样做:
var header = element(by.css("th[name*=Date]"));
browser.driver.wait(function() {
return header.isPresent().then(function(present) {
if (present) {
return header.isDisplayed().then(function(visible) {
return visible;
});
} else {
return false;
}
});
}, 1000);
当我单击导出按钮时,它会向我们的端点发出 REST 调用,几秒钟后,我会收到响应,然后我还会呈现 table。不幸的是,我读到每个调用都是异步的,这意味着即使 table 尚未呈现,我的期望也会被执行。我写的 expect 检查字符串是否在 table 上,但它失败了,因为它还不存在。正确的做法是什么?
it('should generate global user report', function() {
element(by.css('button#exportButton')).click();
expect(element(by.css("th[name*=Date]")).getText()).
toEqual('Date');
})
控制台上的错误是
NoSuchElementError: No element found using locator: By.cssSelector("th[name*=Date]")
我注意到 table 尚未呈现,这就是它失败的原因。
量角器 1.7 引入了一个名为
等待元素变为可见:
var EC = protractor.ExpectedConditions;
var elm = element(by.css("th[name*=Date]"));
browser.wait(EC.visibilityOf(elm), 5000);
expect(elm.getText()).toEqual('Date');
我在等待动态元素出现时遇到了问题。让 driver 等待它出现或显示。最后的数字是超时。
element(by.css('button#exportButton')).click();
var header = element(by.css("th[name*=Date]"));
browser.driver.wait(function() {
return header.isPresent();
}, 1000);
expect(header.getText()).toEqual('Date');
我不得不等到它出现并显示出来,然后测试才完全稳定。你可以这样做:
var header = element(by.css("th[name*=Date]"));
browser.driver.wait(function() {
return header.isPresent().then(function(present) {
if (present) {
return header.isDisplayed().then(function(visible) {
return visible;
});
} else {
return false;
}
});
}, 1000);