我使用量角器创建了一个基本测试,点击一个元素,然后在新页面上检查是否存在给定元素,但是Protractor似乎没有等待,它在点击之后但在新页面加载之前运行断言。我正在寻找的元素可以在两个页面上使用,因此在新页面加载之前,量角器会看到旧页面上的元素。有人可以告诉我,我做错了什么?
it('should check when new page is loaded', function () {
button.click().then(function (){
return expect(newElement).to.exist;
});
答案 0 :(得分:4)
首先,添加" getPageTimeout"变量到您的Protractor配置文件。
如果您还没有使用它。这是根据应用程序中的平均页面加载时间设置全局页面超时。
<强> conf.js 强>
getPageTimeout: 120000,//change it based on your app response time
如果它没有帮助,那么在检查您要查找的实际元素之前,请验证下一页的页面标题(假设它与上一页不同)。
it('should check when new page is loaded', function () {
button.click().then(function (){
browser.getCurrentUrl();
browser.getTitle().then(function (title) {
expect(title).toEqual('Next Page Title');
});
return expect(newElement.isDisplayed()).toBeTruthy();
});
即使这没有帮助,您也可以使用预期的条件。有几个预先定义的条件要明确等待。如果您想等待元素出现:
var EC = protractor.ExpectedConditions;
var e = element(by.id('xyz'));
browser.wait(EC.presenceOf(e), 10000);
expect(e.isPresent()).toBeTruthy();
答案 1 :(得分:0)
您可以在配置文件
中使用以下方法jasmineNodeOpts: {
showColors: true,
includeStackTrace: true,
defaultTimeoutInterval: 1440000
},
在规范文件中,您可以根据页面和对象可见性自定义等待时间
browser.sleep(20000);
如果您正确定制等待时间,我希望上述方法在所有情况下都能正常工作。