量角器:测试加载状态

时间:2015-08-20 13:22:21

标签: protractor

我为我们的网络应用设置量角器,一切正常,除了一件事:当有人点击"登录"按钮,当HTTP请求正在运行时,按钮应该有类" loading"。但是,当我尝试测试时,量角器会在运行期望之前等待HTTP请求完成,然后失败,因为再次删除了加载类。

如何断言是否添加了加载类?

describe('Authorization', function() {
    it('the site loads', () => {
        browser.get('/');

        expect(browser.getCurrentUrl()).toBe('http://localhost:8000/#/login');

        element(by.model('vm.credentials.username')).sendKeys('username');
        element(by.model('vm.credentials.password')).sendKeys('password');

        element(by.css('#sign-in')).click();

        expect(element(by.css('#sign-in')).getAttribute('class')).toMatch(/\bloading\b/);
    });
});

2 个答案:

答案 0 :(得分:2)

我想我找到了解决方案。

element()函数等待angular进入,但是browser.driver.findElement()没有。所以通过将断言行更改为

expect(browser.driver.findElement(by.css('#sign-in')).getAttribute('class')).toMatch(/\bloading\b/);

测试现在通过了

答案 1 :(得分:1)

根据您的问题,量角器正在执行您的expect语句以及click()函数。量角器是异步和快速的,所以它执行它可以执行的所有操作,然后等待promise / callback返回。尝试先等待点击,然后尝试断言该类。以下是如何做到的 -

element(by.css('#sign-in')).click().then(function(){
  expect(element(by.css('#sign-in')).getAttribute('class')).toMatch(/\bloading\b/);
});

此外,如果http请求阻止执行,则尝试等待元素显示。如果显示该元素,那么它就会验证您的元素。

browser.wait(protractor.ExpectedConditions.visibilityOf($('.loading')), 10000)
.then(function(){
  expect(true).toBe(true);
});

希望这有帮助。