【问题标题】:Protractor and click item for loader量角器和加载器的单击项目
【发布时间】:2016-08-02 14:32:43
【问题描述】:

单击按钮时,我在测试加载程序的幻影时遇到了一些问题。

我有以下三个测试:

  it('#exigence1 - display a failing message on button fail ', () => {
    page.navigateTo();
    page.getButtonFail().click();
    expect(page.getErrorMessage()).toBeTruthy();
  });

  it('#exigence2 - display a loader on waiting list ', () => {
    page.navigateTo();
    page.getButtonLoad().click();
    expect(page.getLoader()).toBeTruthy();
  });

  it('#exigence3 - display a list of items on message ', () => {
    page.navigateTo();
    page.getButtonLoad().click();
    expect(page.getPokeList()).toBeTruthy();
  });

当我单击 getButtonLoad 时,我会在远程获取期间显示一个加载程序。我需要测试这个加载器是否出现在页面上,但是我之前的第二个测试没有通过。

这是我的实现:

 buttonClick() {
    this.showError = false;
    this.displayLoader = true;
    this.http.get('http://pokeapi.co/api/v2/pokemon/')
      .map(res => res.json())
      .subscribe(res => {
        this.pokemons = res.results;
        this.displayLoader = false;
      });
  }

用我的页面定义:

export class ProtractorDemonstrationPage {
  navigateTo() {
    return browser.get('/');
  }

  getPokeList() {
    return element(by.css('.poke-list')).getText();
  }

   getButtonLoad() {
    return element(by.css('.btn-primary'));
  }

   getButtonFail() {
    return element(by.css('.btn-warn'));
  }

   getErrorMessage() {
    return element(by.css('.panel-danger')).getText();
  }

    getLoader() {
    return element(by.css('.loader')).getText();
  }
}

我完全不知道如何进行验证这个案例的测试。

编辑:我看到的是,单击时,单击时正在等待函数完成其内容,然后再执行下一条指令。这是我的问题。我需要点击,不要等待异步的东西,直接检查我的加载器在那里。

编辑 2:这是函数的代码:

 load() {
    this.showError = false;
    this.displayLoader = true;
    this.http.get('http://pokeapi.co/api/v2/pokemon/')
      .map(res => res.json())
      .subscribe(res => {
        this.pokemons = res.results;
        this.displayLoader = false;
      });
  }

【问题讨论】:

    标签: javascript angular protractor


    【解决方案1】:

    问题在于 page.getLoader() 和您的期望语句。通过 page.getLoader() 调用,您将返回该元素的文本,但在您的期望语句中,您期望此函数返回一个布尔值。

    你应该改变你的 page.getLoader() 来返回:

    return element(by.css('.loader')).isDisplayed();
    

    或使用 keep using .getText() 但将您的期望语句更改为:

    expect(page.getLoader()).toBe('This string');
    

    【讨论】:

    • 感谢您的帮助,但它不起作用。量角器似乎在做出预期之前等待异步内容的结束。我不知道如何防止这种情况......
    • 这似乎是一个时间问题,试着把它扔进一个承诺中:page.getButtonLoad().click().then(function () { expect(page.getLoader()).toBeTruthy() ; });
    • 您是否确认每个单独的操作都按预期执行?例如,您确定 page.getButtonLoad().click();正在触发“加载程序”?我不确定您是否已经熟悉 Protractor 的 elementExplorer,但它是用于测试这类事情的好工具。在这种情况下,我将使用它来单击 getButtonLoad() 并找出检查“加载程序”是否显示的方法。
    • 其实就是在点击元素时量角器打开的chrome浏览器中显示的。我可以在真实案例的 dom 中看到它(手动单击按钮)
    • 在expect语句之前使用这个期望条件语句会得到什么样的结果 browser.wait(EC.presenceOf($('.loader')), 5000);
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多