How to solve the error: Failed: Error while waiting for Protractor to sync with the page
How to solve the error: Failed: Error while waiting for Protractor to sync with the page
我使用量角器进行端到端测试。我的测试涉及 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 页面。然后我得到了像
这样的错误
- 失败:等待 Protractor 与页面同步时出错:“angularJS 可测试性和 angular 可测试性均未定义。这可能是因为这是非 angular 页面或者因为你的测试
涉及客户端导航,这可能会干扰 Protractor 的引导。详情见https://github.com/angular/protractor/issues/2643
我尝试添加以下行:
browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
然后我收到另一个错误 "No element found using locator"。有趣的是,如果我不测试登录页面而只检查最后一行,它将成功通过。从非 angular 页面导航后,angular 页面测试似乎停止工作。
如果您的代码如您所说的那样工作,可能只是添加了 browser.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');
});
});
您收到的错误可能是一个真正的错误,并且您在 angular 页面上的定位器存在问题,但您需要 post 您的错误消息和一些 html.
添加后:
browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
你得到了:
No element found using locator
因为Protractor没有等到页面完全加载就开始搜索元素了。同步已禁用,因此您需要添加特定时间等待页面加载:
browser.ignoreSynchronization = true;
browser.sleep(3000);
ignoreSynchronization=true
用于非 Angular 页面或量角器无法将其识别为 Angular 页面时。默认情况下 Protractor 使用 ignoreSynchronization=false
并等待 Angular 站点完全加载。
此外,您不应同时使用 ignoreSynchronization
和 waitForAngularEnabled
,因为它们的作用相同 ()。
我使用量角器进行端到端测试。我的测试涉及 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 页面。然后我得到了像
这样的错误- 失败:等待 Protractor 与页面同步时出错:“angularJS 可测试性和 angular 可测试性均未定义。这可能是因为这是非 angular 页面或者因为你的测试 涉及客户端导航,这可能会干扰 Protractor 的引导。详情见https://github.com/angular/protractor/issues/2643
我尝试添加以下行:
browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
然后我收到另一个错误 "No element found using locator"。有趣的是,如果我不测试登录页面而只检查最后一行,它将成功通过。从非 angular 页面导航后,angular 页面测试似乎停止工作。
如果您的代码如您所说的那样工作,可能只是添加了 browser.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');
});
});
您收到的错误可能是一个真正的错误,并且您在 angular 页面上的定位器存在问题,但您需要 post 您的错误消息和一些 html.
添加后:
browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
你得到了:
No element found using locator
因为Protractor没有等到页面完全加载就开始搜索元素了。同步已禁用,因此您需要添加特定时间等待页面加载:
browser.ignoreSynchronization = true;
browser.sleep(3000);
ignoreSynchronization=true
用于非 Angular 页面或量角器无法将其识别为 Angular 页面时。默认情况下 Protractor 使用 ignoreSynchronization=false
并等待 Angular 站点完全加载。
此外,您不应同时使用 ignoreSynchronization
和 waitForAngularEnabled
,因为它们的作用相同 (