angular - 如何解决错误: Failed: Error while waiting for Protractor to sync with the page

标签 angular webdriver protractor e2e-testing

我使用 Protractor 进行了 e2e 测试。我的测试涉及 Angular 页面和非 Angular 页面。我在非 Angular 页面上测试没有问题。但是当测试在非 Angular 页面上完成并返回到 Angular 页面时,我遇到了错误。

我的测试从主页( Angular 页面)开始,然后单击登录按钮。这将重定向到非 Angular 页面。输入用户名和密码后,再次重定向到 Angular 页面。当测试返回 Angular 页面时,我在最后一步遇到问题。

beforeAll(() => {
    page = new Abcflow();
});

fdescribe('step 1', () => {
   beforeEach(async () => await page.navigateToStart());

    fit('login as staff and come back to home page', async () => {
    //start from an angular page
    await page.clickButton('a', 'Login / Register');

    //now in a non-angular page
    browser.driver.findElement(by.id('Email')).sendKeys('email');
    browser.driver.findElement(by.id('Password')).sendKeys('password');
    browser.driver.findElement(by.name('button')).click();

    //navigate back to angular page
    await page.navigateToStart();

    expect(await page.getPageTitleText()).toEqual('abc title');
  });
});

我可以看到我的测试页面从非 Angular 页面返回到 Angular 页面。然后我得到了类似的错误

  • 失败:WAITING Protractor 与页面同步时出错:“AngularJS 可测试性和 Angular 可测试性均未定义。这可能是因为这是非 Angular 页面,也可能是因为您的测试 涉及客户端导航,这可能会干扰 Protractor 的引导。请参阅https://github.com/angular/protractor/issues/2643了解详情”

我尝试添加以下行:

browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);

然后我收到另一个错误:“使用定位器找不到元素”。有趣的是,如果我不测试登录页面而只测试最后一行,它将成功通过。从非 Angular 页面导航后, Angular 页面测试似乎停止工作。

最佳答案

添加后:

browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);

你得到了:

No element found using locator

因为Protractor没有等待页面完全加载就开始搜索元素。同步已禁用,因此您需要添加特定时间来等待页面加载:

browser.ignoreSynchronization = true;
browser.sleep(3000);

ignoreSynchronization=true 用于非 Angular 页面或 Protractor 无法将其识别为 Angular 页面时。默认情况下,Protractor 使用 ignoreSynchronization=false 并等待 Angular 站点完全加载。

此外,您不应同时使用 ignoreSynchronizationwaitForAngularEnabled,因为它们执行相同的操作 ( What is difference between waitForAngularEnabled and browser.ignoreSynchronization in protractor? )。

关于angular - 如何解决错误: Failed: Error while waiting for Protractor to sync with the page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54242064/

相关文章:

Angular 2继承启用禁用 ionic 菜单滑动

angular - 选择日期和时间后,p-calendar 弹出模式不会关闭

javascript - 为什么toBe()在测试中不起作用 - Protractor e2e

javascript - '类型错误 : undefined is not a function' using Protractor

javascript - 如何在 JavaScript/TypeScript 中创建具有非唯一键的 Map?

angular - 导入具有其他名称的组件类

javascript - WebDriver:WAITING 'JS Popup Screen' 加载而不使用 Thread.sleep()

python webdriver_manager chrome 自定义配置文件

java - 如何解决ElementNotInteractableException : Element is not visible in Selenium webdriver?

javascript - 我发现使用 log4js-protractor-appender 有问题