如何解决错误:失败:等待量角器与页面同步时出错

时间:2019-01-17 18:23:43

标签: angular webdriver protractor e2e-testing

我使用量角器进行e2e测试。我的测试涉及角度页面和非角度页面。我可以在非角度页面上进行测试。但是在非角度页面上完成测试并返回角度页面时出现错误。

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

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');
  });
});

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

  • 失败:等待量角器与页面同步时出错:“ angularJS可测试性和角度可测试性均未定义。这可能是因为这是一个非角度页面,或者是因为您的测试 涉及客户端导航,这可能会干扰量角器的引导。有关详情,请参见https://github.com/angular/protractor/issues/2643

我尝试添加以下行:

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

然后我又收到一个错误消息,提示“使用定位器找不到元素”。有趣的是,如果我不测试登录页面而仅进入最后一行,它将成功通过。从非角度页面导航后,角度页面测试似乎停止工作。

2 个答案:

答案 0 :(得分:1)

如果您的代码按您所说的那样工作,那可能只是添加浏览器的一种情况。waitForAngularEnabled(false);

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
    await browser.driver.findElement(by.id('Email')).sendKeys('email');
    await browser.driver.findElement(by.id('Password')).sendKeys('password');
    await browser.driver.findElement(by.name('button')).click();

    //Setting this before you navigate back to the Angular page will ensure it will wait 
    // wait for page to load correctly
    await browser.waitForAngularEnabled(false);

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

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

您收到的错误可能是真正的错误,并且在角度页面上定位器存在问题,但是您需要发布错误消息和一些html。

答案 1 :(得分:1)

添加后:

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

您得到了:

No element found using locator

因为量角器没有等待页面完全加载并开始搜索元素。同步功能已被禁用,因此您需要添加特定时间以等待页面加载:

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

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

另外,您不应该同时使用ignoreSynchronizationwaitForAngularEnabled,因为它们会做相同的事情(What is difference between waitForAngularEnabled and browser.ignoreSynchronization in protractor?)。