量角器随机不与Angular页面同步

时间:2017-04-28 11:16:19

标签: angularjs protractor angular-strap

我正在使用Protractor 4.0.14来测试Angular应用程序。

最近,我遇到了随机错误,我不明白为什么。这就像Protractor正在失去同步。

我尝试通过自己禁用同步并等待元素存在来防止这种情况发生。 但最后,量角器不会等待加载页面来执行测试,所以我得到了不同的错误,如:

stale element reference: element is not attached to the page document

或者这个:

document unloaded while waiting for result

例如,在10次执行中,我可能会收到一行错误:

return $('#information-email').getAttribute('value') != '';

我尝试在执行任何操作之前等待元素完全加载内容。 由量角器执行的正常waitForAngular不会等待填充字段,因此即使它实际上是一个角度页面,我也禁用了同步。但它无法等待元素。

it('Should change user email', function() {
    $('#information-email').clear().sendKeys(browser.params.login.userExtra);
    $('#my-information button[type="submit"]').click();
    browser.ignoreSynchronization = true;
    browser.wait(function () {
        return $('div.toast.toast-success').isPresent();
    });
    browser.ignoreSynchronization = false;
    expect($('div.toast.toast-success').isPresent()).toBe(true);
    $$('button.toast-close-button').each(function (item) {
        item.click();
    });
});

it('Should check that the user is saved', function() {
    browser.ignoreSynchronization = true;
    browser.wait(function () {
        return $('#information-email').getAttribute('value') != '';
    });
    browser.ignoreSynchronization = false;
    expect($('#information-email').getAttribute('value')).toEqual(browser.params.login.userExtra);
});

此外,当我使用browser.get加载页面时,有时页面未完全加载,并且当ignoreSynchronization为false时,在加载角度之前执行测试。

所以我有点迷失,因为几周前我没有遇到这些问题。它可能是我错过的conf.js中的一个参数,还是一个打破同步的角度超时?欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

如果您尝试这样做,您应该避免使用beforeEach和afterEach之类的aSynch - Synch问题:

beforeEach(function(){
      browser.ignoreSynchronization = true;
});

afterEach(function(){
      browser.ignoreSynchronization = false;
});

同样使用.waitForAngular()而不是ignoreSynch也应该避免一些同步问题。