【问题标题】:Protractor: test loading state量角器:测试加载状态
【发布时间】:2015-11-14 03:59:32
【问题描述】:

我正在为我们的网络应用程序设置量角器,一切正常,除了一件事:当有人单击“登录”按钮时,在 HTTP 请求运行时,该按钮应该具有“加载”类。但是,当我尝试对此进行测试时,量角器在运行期望之前等待 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/);
    });
});

【问题讨论】:

    标签: protractor


    【解决方案1】:

    根据您的问题,量角器正在执行您的期望语句以及 click() 函数。 Protractor 是异步且快速的,因此它会执行它可以执行的所有操作,然后等待返回 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);
    });
    

    希望这会有所帮助。

    【讨论】:

    • 问题是它似乎只在http请求完成之后运行断言,无论是在我的代码版本还是你的代码版本中。
    【解决方案2】:

    我想我找到了解决方案。

    element() 函数等待 angular 稳定下来,但 browser.driver.findElement() 没有。因此,通过将断言行更改为

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

    现在测试通过了

    【讨论】:

    • 酷.. 很高兴知道这一点。如果它有效,那么您可能应该将其标记为答案,以便对其他人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多