angular 按顺序测试多个文件 - 等待 Protractor 与页面同步时出错

angular testing multiple files in sequence - Error while waiting for Protractor to sync with the page

从 Angular E2E 开始,并尝试测试多个文件(明智地划分测试用例模块)。

protractor.conf.js

中所做的更改
specs: [
     "./src/login/login.component.e2e-spec.ts",
     "./src/customs-portal/home.component.e2e-spec.ts",
],

这会以相同的顺序运行两个文件的测试用例。

在我写的家庭测试用例文件中

beforeAll(() => {
     homePage= new HomePage();
     helperService = new HelperService();

     CSS = homePage.CSS;
     helperService.navigate("/home");

     helperService.skipIntro();
});

我导航到 /home,在主页上有 skip 按钮,我单击该按钮以避免页面介绍阶段。这是 skipIntro 函数的样子

async skipIntro(): Promise<any> {
    const _skipBtn = await element(by.css(this.CSS.SKIP_INTRO));
    console.log("HelperService -> _skipBtn", _skipBtn);
    if (_skipBtn) {
        _skipBtn.click();
    }
}

但它显示错误并且未通过测试用例

it("dummy test always paas", async () => {
        expect(true).toEqual(true);
});

这里是错误

- Error: Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are undefined.  This could be either because this is a non-angular page or because your test involves client-side navigation, which can interfere with Protractor's bootstrapping.  See http://git.io/v4gXM for details"

这里是helperService.navigate

navigate(path: string): promise.Promise<any> {
        return browser.get(path);
}

对此有任何帮助,Angular E2E 经验不多。

通过查看错误,我假设被测应用程序不是 Angular 应用程序。 Protractor 主要用于测试 angular 应用程序,但要测试 non-angular 应用程序,您可以执行以下配置更改,并且您可能不会收到此错误

browser.waitForAngularEnabled(false);

这将禁止在应用程序中搜索 angular 组件并执行测试。

似乎异步和控制流混合在一起,这似乎是个问题

试试这个应该有用

     beforeAll(async () => {
     homePage= new HomePage();
     helperService = new HelperService();
     CSS = homePage.CSS;

    await helperService.navigate("/home");
    await  helperService.skipIntro();
});

async skipIntro(): Promise<any> {
 const _skipBtn =await element(by.css(this.CSS.SKIP_INTRO));
    console.log("HelperService -> _skipBtn", _skipBtn);
    if (_skipBtn) {
        await _skipBtn.click();
    }
}

async navigate(path: string): promise.Promise<any> {
        await return browser.get(path);
}

async skipIntro(): Promise<any> {
    const _skipBtn = await element(by.css(this.CSS.SKIP_INTRO));
    console.log("HelperService -> _skipBtn", _skipBtn);
    if (_skipBtn) {
        await _skipBtn.click();
    }
}

async navigate(path: string): promise.Promise<any> {
        await return browser.get(path);
}