我使用量角器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');
});
有什么想法吗?这是一个量角器问题吗?
由于