我使用 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 站点完全加载。
此外,您不应同时使用 ignoreSynchronization
和 waitForAngularEnabled
,因为它们执行相同的操作 ( 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/