量角器waitForAngularEnabled

时间:2018-07-10 09:09:58

标签: angular protractor

waitForAngularEnabled似乎不起作用。

用例: -将waitForAngularEnabled设置为false以获取sso页并填充用户/密码字段 -返回角度应用程序并将waitForAngularEnabled设置为true会导致错误

我已经创建了一个简单的有角度的应用程序projet来再现它,简单地运行ng e2e

https://github.com/lilletech/protractor-issue

2 个答案:

答案 0 :(得分:1)

为调试起见,并减轻量角器控制流程的问题,您应该进一步分解测试。将测试更改为以下工作:

import { browser, element, by } from 'protractor';

describe('protractor-test-project App', () => {

    it('goes to google', () => {
        browser.waitForAngularEnabled(false);
        browser.get('https://www.google.com');
        expect(browser.getCurrentUrl()).toEqual('https://www.google.com/');
    });

    it('enters a search', () => {
        const inputEl = element(by.id('lst-ib'));
        browser.wait(() => inputEl.isPresent(), 10000, 'too long');
        inputEl.sendKeys("protractor issue waitForAngularEnabled");
        expect(inputEl.getAttribute('value')).toEqual('protractor issue waitForAngularEnabled');
    });

    it('returns to angular page', () => {
        browser.get('/');
        browser.waitForAngularEnabled(true);
        const titleElement = element(by.id("title"));
        expect(titleElement.isPresent());
    });
});

不能肯定地说为什么控制流不能正确处理这个问题,但这似乎是由于在同一规范中有两个waitForAngularEnabled(也可能是因为导航了两次)引起的。如果禁用第二个(重新启用它的位置),则测试有效。

因此,您可以使用上面的解决方案将其分解为多个步骤,也可以将调用嵌套在browser.get下,这似乎也可以正常工作

   browser.get('/').then(() => {
        browser.waitForAngularEnabled(true);
    });

同样,不确定为什么会那样。控制流应该同步这些步骤,因此不必使用.then()……但显然是必要的。将测试分为多个it块也可以帮助量角器以正确的顺序同步事物

答案 1 :(得分:0)

可以在同一测试中多次使用waitForAngularEnabled,但是需要明确添加browser.get。凭直觉,大多数人认为设置waitForAngularEnabled(true)等待量角器再次执行Angular任务,但这返回了希望。大多数人使用它的方式是可以在非Angular页面上禁用它,也可以以同步方式在Angular页面上重新启用它。要解决此问题,可以使用以下命令:

// do things on your Angular application

waitForAngularEnabled(false)

// do things on non-angular page

waitForAngularEnabled(true)
browser.get('/home') // this is a page from your Angular application

browser.get函数将一直阻塞,直到加载“ Angular”页面为止。