量角器:页面更改后等待角度(异步/等待)

时间:2018-12-17 12:05:58

标签: javascript angularjs protractor

我正在为AngularJS应用程序运行量角器测试。

我面临以下问题-有时,在页面更改后,量角器无需等待角度初始化即可继续进行。这是我执行导航的方法。

beforeAll(async function() {
    await browser.get('#/page-url');
})

有时,工具包中的第一个测试也会失败,因为它试图访问页面上尚不存在的某些元素,记者向我显示了一个空白页面的屏幕截图。

我尝试了similar issue answer

的以下解决方案
beforeAll(async function() {
    await browser.waitForAngular();
    await browser.get('#/page-url');
})

但这对我也不起作用。我做错了什么? (AngularJS版本1.7.2 /量角器版本5.4.0)

3 个答案:

答案 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