Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器:页面更改后等待角度(异步/等待)_Javascript_Angularjs_Protractor - Fatal编程技术网

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

Javascript 量角器:页面更改后等待角度(异步/等待),javascript,angularjs,protractor,Javascript,Angularjs,Protractor,我正在为AngularJS应用程序运行量角器测试 我面临以下问题-有时,在页面更改后,量角器在不等待初始化的情况下继续运行。下面是我执行导航的方式 beforeAll(async function() { await browser.get('#/page-url'); }) 有时,工具包中的第一个测试失败了,因为它试图访问页面上的某些元素,而这些元素还不存在,记者向我展示了一个空白页面截图 我尝试了下面的解决方案 但这对我也不起作用。我做错了什么?(AngularJS 1.7.2版/

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

我面临以下问题-有时,在页面更改后,量角器在不等待初始化的情况下继续运行。下面是我执行导航的方式

beforeAll(async function() {
    await browser.get('#/page-url');
})
有时,工具包中的第一个测试失败了,因为它试图访问页面上的某些元素,而这些元素还不存在,记者向我展示了一个空白页面截图

我尝试了下面的解决方案


但这对我也不起作用。我做错了什么?(AngularJS 1.7.2版/量角器5.4.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可用于测试


参考:量角器这是我应该做的:

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 

    });
});

我不知道你为什么在页面打开之前就放置了
waittforanger()
,所以这可能是你的问题,因为现在还没有什么可以等待的。因此,试着这样做

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

但有时这是不够的,豪斯的答案适用于这种情况。首先,您可以等待任意多的元素,其次,您可以观察最后一个填充的元素并等待它,或者您可以等待下一个要交互的元素(无需等待所有元素)。

好建议,尽管这看起来就像一个解决方法,但如果我有很多不同的元素该怎么办?这将是一个巨大的代码块,只是等待元素出现,应该有另一个解决方案我不熟悉您的具体情况,但我不同意“变通方法”。如果您的元素在那里,我相信它是可测试的(在e2e中)。我从来没有听说过其他任何类似的方法…:-)花了一段时间后,我不得不承认你的回答是唯一对我起作用的答案<代码>等待浏览器。当路由更改时,获得,但当角完成编译时,放置<代码>等待浏览器。代码中的WaITFrOrthOb/ToC>不能证明它是UTITIY放置在前面的,因为这是在UnD下使用这种方法的量角器团队如何再一次考虑Huns的答案,虽然这对我来说真的很奇怪,量角器团队没有想出一个优雅的方式来考虑页面是完全LoADDHEE!感谢您的关注,尽管1)我使用的是异步/等待方法,这似乎与常规的
控制流
2)更改的url如何证明DOM是如何完成的?肯定不是AngularJS应用程序的情况
beforeAll( async ()  => {
    await browser.get('#/page-url');
    await browser.waitForAngular();
});