【问题标题】:Pending Tasks and Protractor待处理的任务和量角器
【发布时间】:2021-02-13 05:33:20
【问题描述】:

我正在尝试使用 Protractor 来测试我的团队的新 Angular 站点。目前,Protractor 项目不在本地,而是在不同的 repo 中,与 Angular 代码分开。登录页面不是有角度的,所以我们为登录页面运行waitForAngularEnabled(false),但是一旦我们登录我们运行waitForAngularEnabled(true)

不幸的是,测试最终挂起并且由于超时而无法继续。这是堆栈跟踪...stacktrace

我阅读了一些关于 Protractor 执行的信息,它等待待处理的任务得到解决。当我在 devtools 控制台中运行getAllAngularTestabilities() 时,它显示有一个待处理的宏任务。这就是我的测试在waitForAngularEnabled(true) 之后挂起的原因吗?这是devtools控制台的图片...devtools console output

如果我不使用waitForAngularEnabled(true),那么我将不得不使用显式睡眠。我希望能够运行它并让测试正常运行。

这里是测试文件代码login.ts。 “beforeEach”块处理非角度登录,“it”块处理其余测试。

import { browser } from 'protractor';
import { LoginPage } from '../pageobjects/LoginPage';
import { SelectOrgPage } from '../pageobjects/SelectOrgPage';
import { MainPage } from '../pageobjects/MainPage';

describe('Login', () => {
  beforeEach(async () => {
    // Make sure to set the ignoreSynchronization for every testrun
    // for non Angular applications
    // browser.ignoreSynchronization = true;
    
    await browser.driver.manage().window().maximize();
    const loginPage = new LoginPage();
    await browser.waitForAngularEnabled(false);
    await loginPage.open(site-address);
    await loginPage.typeIntoEmailAddressInput(Email);
    await loginPage.typeIntoPasswordInput(Password);
    await loginPage.clickSigninBtn();
    await browser.sleep(5000);
  });

  it('go to resources', async () => {

    await browser.waitForAngularEnabled(true);
    
    // await browser.refresh();
    // await browser.sleep(10000);

    const mainPage = new MainPage();
    await mainPage.clickResourcesTab();
    await mainPage.clickCropsSideNav();

  });
});

【问题讨论】:

    标签: javascript angular protractor automated-tests


    【解决方案1】:

    是的,这是 100% 的原因,但我不确定是什么导致 hasPendingMicroTasks 为真。所以我只是继续使用browser.waitForAngularEnabled(false)

    【讨论】:

    • 这样做,您是否获得了量角器的全部好处?
    • 好吧,你会在内置等待中失去一点......但如果应用程序构建正确,如果有什么要等待的话,它总会有一个加载动画。这样我所做的就是写wait until no loading animation is in the DOM
    • 你有没有试过弄清楚待处理的任务是什么?有办法吗?
    【解决方案2】:

    您的量角器与 Angular 通信,它使用 Angular 可测试性 API,该 API 返回一个名为 is_stable 的变量。当这个变量为真时,这意味着你的 Angular 网站是稳定的。这意味着您页面中的所有承诺都已解决,并且该页面没有等待完成的活动进程。

    一个解决方案可以在侧角区域外运行所有异步任务,即您可以为此目的使用NgZonengZong.runOutsideAngular();.

    【讨论】:

    • 是的,is_stable 变量是真的。这是否意味着它不等待挂起的“宏任务”而问题是别的?
    • 您的应用中是否有任何第三方集成?
    • 我相信我们使用 Auth0 进行登录,但我相信就是这样。
    • 我不确定,但我猜你应该在afterAll 函数的 login.ts 文件中使用waitForAngularEnabled(true)。希望它会工作
    猜你喜欢
    • 2012-03-22
    • 2014-10-02
    • 2023-03-14
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多