量角器& Chrome - 等待输入元素类属性更改/消失间歇性失败

时间:2017-01-04 13:21:20

标签: javascript angularjs selenium-webdriver protractor selenium-chromedriver

我使用量角器4.0.10用chromedriverVersion测试角1.5.10:2.26.436382

我的测试基本上是在输入无效的电子邮件时检查输入框是否正常,然后是电子邮件是否正确。

对于第一部分,我等到ng-invalid-email出现在class属性中(然后测试它)。这一步总是很好。

之后,我清除()输入框并向其添加有效的电子邮件。在这样做之后,我等待看看ng-invalid-email是否使用帮助函数消失:

function waitClassValueToDisappear(fieldElement, class_value) {
    var local_class = class_value;
    browser.wait(function() {
      return element(by.model(fieldElement)).getAttribute('class').then(function(value) {
          //console.log(value ,' <> ', local_class);
          return value.indexOf(local_class) < 0;
      });
  }, 5000);
}

大多数情况下,这似乎运作正常,但有时会超时。在做了一些调试之后,我发现ng-invalid-email被保留为class属性,直到上面的测试超时。

测试用例屏幕截图显示输入框中的有效电子邮件,输入框有一个蓝框(当存在ng-invalid-email时,我们使用红框)。

我想知道量角器查询可能导致上述行为的ui元素属性的方式是否存在任何问题(或者这可能是由webdriver / selenium提供的)?

如果我取消注释上面的console.log,我会在错误发生时看到:

  

表单控制(其他值的.. ..)ng-not-modified-remove-active   ng-modified-add-active ng-valid-error-add-active   ng-invalid-pattern-remove-active ng-valid-pattern-add-active   ng-invalid-remove-active ng-valid-add-active&lt;&gt; ng-invalid-email(*   开头一两次)

然后是mutiples:

  

形控制   ng-untouched ng-dirty ng-not-empty ng-invalid-email ng-valid-required   ng-invalid-pattern ng-valid ng-valid-error ng-modified&lt;&gt;   ng-invalid-email(....重复直到超时)

所以看起来对象类属性已经改变,但是ng-invalid-email仍然存在,即使屏幕截图告诉我它是有效的。

作为参考,完整的测试用例如下:

it(this.description, function() {
  ...
  utils.waitModelExist(cs.alerts.ADD_EMAIL_INPUT);
  browser.wait(EC.visibilityOf(app.getAppElementByModel(cs.alerts.ADD_EMAIL_INPUT)), TIME_TO_WAIT_MILLISECONDS);
  app.getAppElementByModel(cs.alerts.ADD_EMAIL_INPUT).sendKeys('username');
  actions.waitClassValueToBePresent(cs.alerts.ADD_EMAIL_INPUT, 'ng-invalid-email');
  expect(app.getAppElementByModel(cs.alerts.ADD_EMAIL_INPUT).getAttribute('class')).toContain('ng-invalid-email');
  app.getAppElementByModel(cs.alerts.ADD_EMAIL_INPUT).clear();
  //actions.waitForAttributeValue(cs.alerts.ADD_EMAIL_INPUT, '');
  app.getAppElementByModel(cs.alerts.ADD_EMAIL_INPUT).sendKeys('username@nowitis.valid');
  //actions.waitForAttributeValue(cs.alerts.ADD_EMAIL_INPUT, 'username@nowitis.valid');
  actions.waitClassValueToDisappear(cs.alerts.ADD_EMAIL_INPUT, 'ng-invalid-email');
  expect(app.getAppElementByModel(cs.alerts.ADD_EMAIL_INPUT).getAttribute('class')).not.toContain('ng-invalid-email');
});

有什么想法吗?这是一个量角器问题吗?

由于

0 个答案:

没有答案