【问题标题】:Protractor waitForAngular() not working for an Async Call量角器 waitForAngular() 不适用于异步调用
【发布时间】:2014-08-26 17:52:06
【问题描述】:

我正在为我的应用程序创建模拟测试用例。我不想仅仅为了测试而调用我们的服务端点,因为它们有专门的测试。所以,我在模拟数据并拦截请求。但似乎量角器测试用例完成得太早,无法响应请求。我试过waitForAngular,但它似乎对测试没有任何影响。测试仍然失败。

这是我的代码:

  // Adding a metric
 it('should allow the user to add a metric', function() {
    var count = 0;
    element(by.model('p.title')).clear();
    element(by.cssContainingText('.btn', 'Add Metric')).click();

    browser.waitForAngular();

    element.all(by.cssContainingText('.btn-success', 'Add')).first().click(); // Add first metric on list

   // If adding metric fails, retry 5 times before giving up
  while (count < 3 && element(by.buttonText('Retry')).isDisplayed()) {
     element(by.buttonText('Retry')).click();
     count++;
  }

  // If we were able to load the metric data
  if (count < 3) {
     element(by.css('.close')).click();
     expect(element.all(by.repeater('metric in p.metrics')).count()).toBe(1);
  } else {
     element(by.buttonText('Cancel')).click();
  }

}, 20000);

谁能告诉我,我在这里做错了什么?

【问题讨论】:

    标签: angularjs unit-testing protractor


    【解决方案1】:

    您的 while 将不起作用,因为 isDisplayed() 返回了一个承诺。承诺将始终评估为真实,您的循环将始终单击()。

    尝试使用等待。

    browser.wait(function() {
      return element(by.buttonText('Retry')).isDisplayed();
    });
    

    【讨论】:

    • 谢谢。我用您给定的解决方案替换了循环,但循环仍然执行。
    猜你喜欢
    • 2015-06-17
    • 2015-01-24
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2017-07-07
    • 2011-08-22
    相关资源
    最近更新 更多