waitForAngularEnabled似乎不起作用。
用例: -将waitForAngularEnabled设置为false以获取sso页并填充用户/密码字段 -返回角度应用程序并将waitForAngularEnabled设置为true会导致错误
我已经创建了一个简单的有角度的应用程序projet来再现它,简单地运行ng e2e
答案 0 :(得分:1)
为调试起见,并减轻量角器控制流程的问题,您应该进一步分解测试。将测试更改为以下工作:
import { browser, element, by } from 'protractor';
describe('protractor-test-project App', () => {
it('goes to google', () => {
browser.waitForAngularEnabled(false);
browser.get('https://www.google.com');
expect(browser.getCurrentUrl()).toEqual('https://www.google.com/');
});
it('enters a search', () => {
const inputEl = element(by.id('lst-ib'));
browser.wait(() => inputEl.isPresent(), 10000, 'too long');
inputEl.sendKeys("protractor issue waitForAngularEnabled");
expect(inputEl.getAttribute('value')).toEqual('protractor issue waitForAngularEnabled');
});
it('returns to angular page', () => {
browser.get('/');
browser.waitForAngularEnabled(true);
const titleElement = element(by.id("title"));
expect(titleElement.isPresent());
});
});
不能肯定地说为什么控制流不能正确处理这个问题,但这似乎是由于在同一规范中有两个waitForAngularEnabled
(也可能是因为导航了两次)引起的。如果禁用第二个(重新启用它的位置),则测试有效。
因此,您可以使用上面的解决方案将其分解为多个步骤,也可以将调用嵌套在browser.get
下,这似乎也可以正常工作
browser.get('/').then(() => {
browser.waitForAngularEnabled(true);
});
同样,不确定为什么会那样。控制流应该同步这些步骤,因此不必使用.then()
……但显然是必要的。将测试分为多个it
块也可以帮助量角器以正确的顺序同步事物
答案 1 :(得分:0)
可以在同一测试中多次使用waitForAngularEnabled
,但是需要明确添加browser.get
。凭直觉,大多数人认为设置waitForAngularEnabled(true)
等待量角器再次执行Angular任务,但这返回了希望。大多数人使用它的方式是可以在非Angular页面上禁用它,也可以以同步方式在Angular页面上重新启用它。要解决此问题,可以使用以下命令:
// do things on your Angular application
waitForAngularEnabled(false)
// do things on non-angular page
waitForAngularEnabled(true)
browser.get('/home') // this is a page from your Angular application
browser.get
函数将一直阻塞,直到加载“ Angular”页面为止。