Angularjs 如何让量角器在继续之前等待登录?

Angularjs 如何让量角器在继续之前等待登录?,angularjs,protractor,Angularjs,Protractor,我的应用程序有一个非角度输入页面,我正在尝试首次登录: describe('Authentication', function() { it('should authenticate a user', function() { browser.driver.get('https://example.com') browser.driver.findElement(by.id('username')).sendKeys("user"); browser.driver.

我的应用程序有一个非角度输入页面,我正在尝试首次登录:

describe('Authentication', function() {
  it('should authenticate a user', function() {
    browser.driver.get('https://example.com')

    browser.driver.findElement(by.id('username')).sendKeys("user");
    browser.driver.findElement(by.id('password')).sendKeys("mypass");
    browser.driver.findElement(by.tagName('input')).click()
    var url = browser.getLocationAbsUrl()
    browser.driver.sleep(1)
    browser.waitForAngular()

    return
  })
})
但是,这会产生一个错误:

 Failed: Error while waiting for Protractor to sync with the page: "window.angular is undefined.  This could be either because this is a non-angular page or bec
ause your test involves client-side navigation, which can interfere with Protractor's bootstrapping.  See http://git.io/v4gXM for details"

我能做些什么来解决这个问题?

我会说等待登录页面,直到它正确显示,然后执行操作。例如

  • 以登录页面中的某个元素为目标并等待它
  • 等待url更改等
登录->浏览器。睡眠(500)/等待登录页面的元素/URL更改-> 其他行动

如果该元素在指定时间内不存在,则超时错误 将显示&您将知道unitl当时未登录


我以前写过一些助手,以便在e2e测试中完成这项工作:

waitForUrlToChangeTo: function (urlToMatch) {
    var currentUrl;
    return browser.getCurrentUrl().then(function storeCurrentUrl(url) {
            currentUrl = url;
        })
       .then(function waitForUrlToChangeTo() {
            browser.ignoreSynchronization = true;
            return browser.wait(function waitForUrlToChangeTo() {
                return browser.getCurrentUrl().then(function compareCurrentUrl(url) {
                    browser.ignoreSynchronization = false;
                    return url.indexOf(urlToMatch) !== -1;
                });
            });
        }
    );
},
login : function (username, password, url) {
    browser.get('#/login');
    element(by.model('username')).sendKeys(username);
    element(by.model('password')).sendKeys(password);
    element(by.buttonText('LOGIN')).click();
    return this.waitForUrlToChangeTo(url);
}
然后在测试中:

describe('when I login with valid credentials', function() {
    it('should redirect to dashboard', function() {
        helper.login('user', 'pass', '#/dashboard').then(function() {
            expect(browser.getTitle()).toMatch('Dashboard');
        });
    });
});

非角度,在执行该页面上的命令之前,需要设置
browser.ignoreSynchronization=false
。另外,仅供参考,
sleep
的单位是毫秒,而不是秒。您正在使用当前添加的
browser.ignoreSynchronization=false
等待0.001秒,并收到相同的错误对不起,我的意思是
true
…我在等待量角器与页面同步时收到相同的错误`Failed:error:“window.angular未定义。这可能是因为这是一个非角度页面,也可能是因为您的测试涉及客户端导航,这可能会干扰量角器的引导。详情请参阅“`
describe('when I login with valid credentials', function() {
    it('should redirect to dashboard', function() {
        helper.login('user', 'pass', '#/dashboard').then(function() {
            expect(browser.getTitle()).toMatch('Dashboard');
        });
    });
});