我使用量角器进行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');
});
});
我可以看到我的测试页从非角度页面返回到角度页面。然后我得到了类似的错误
我尝试添加以下行:
browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
然后我又收到一个错误消息,提示“使用定位器找不到元素”。有趣的是,如果我不测试登录页面而仅进入最后一行,它将成功通过。从非角度页面导航后,角度页面测试似乎停止工作。
答案 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网站完全加载。
另外,您不应该同时使用ignoreSynchronization
和waitForAngularEnabled
,因为它们会做相同的事情(What is difference between waitForAngularEnabled and browser.ignoreSynchronization in protractor?)。