我正在为AngularJS应用程序运行量角器测试。
我面临以下问题-有时,在页面更改后,量角器无需等待角度初始化即可继续进行。这是我执行导航的方法。
beforeAll(async function() {
await browser.get('#/page-url');
})
有时,工具包中的第一个测试也会失败,因为它试图访问页面上尚不存在的某些元素,记者向我显示了一个空白页面的屏幕截图。
的以下解决方案beforeAll(async function() {
await browser.waitForAngular();
await browser.get('#/page-url');
})
但这对我也不起作用。我做错了什么? (AngularJS版本1.7.2 /量角器版本5.4.0)
答案 0 :(得分:2)
这就是我要做的:
describe('your test spec description', async () => {
beforeAll( async () => {
await browser.waitForAngular();
await browser.get('#/page-url');
});
it('we can verify that ...', async () => {
let importantElement = element(by.xxx(''));
await browser.wait(
ExpectedConditions.presenceOf(importantElement ),
SHORT_TIMEOUT_MS, 'element is not present')
//test code here, your element is ready
});
});
答案 1 :(得分:1)
我不确定您为什么将waittForAngular()
放在页面甚至未打开之前,所以这可能是您的问题,因为没有什么可等待的。因此尝试这种方式
beforeAll( async () => {
await browser.get('#/page-url');
await browser.waitForAngular();
});
但有时还不够,在这种情况下,Hauns答案适用。首先,您可以等待任意数量的元素,其次,您可以查看最后填充哪个元素并等待它,或者可以等待下一个要交互的元素(无需等待所有元素) )。
答案 2 :(得分:0)
对于量角器,您可以使用以下方法
var EC = protractor.ExpectedConditions;
// Wait for new page url to contain newPageName
browser.wait(EC.urlContains('newPageName'), 10000);
So your code will look something like,
emailEl.sendKeys('username');
passwordEl.sendKeys('pwd');
btnLoginEl.click();
var EC = protractor.ExpectedConditions;
// Wait for new page url to contain efg
ptor.wait(EC.urlContains('efg'), 10000);
expect(ptor.getCurrentUrl()).toEqual(url + 'abc#/efg');
注意:这可能并不意味着新页面已完成加载并且DOM已准备就绪。随后的“ expect()”语句将确保量角器等待DOM可供测试。
参考:量角器ExpectedConditions