【发布时间】:2016-04-25 13:10:28
【问题描述】:
Person.prototype.checkAssignmentIncomplete = Person.chain(function (data) {
var self = this;
var assignmentPane = self.browser.element(by.id(data.testId + '#' + data.deadline));
expect(assignmentPane.isPresent()).toBe(true);
assignmentPane.click();
self.browser.waitForAngular();
var foundName = false;
var promises = [];
element.all(by.binding('member.user.fullname')).each(function (nameColumn) {
var row = nameColumn.element(by.xpath('..'));
var promise = nameColumn.getText().then(function (name) {
foundName = foundName || data.name === name;
if (foundName) {
var reviewButton = row.element(by.className('icon'));
expect(reviewButton.isPresent()).toBe(false);
}
});
promises.push(promise);
});
q.all(promises).then(function () {
expect(foundName).toBe(true);
});
});
我在 Protractor 中的自动化测试遇到问题,似乎认为 foundName 是假的,我知道一个事实,当它运行时它确实是真的。我的结论是期望函数在承诺完成之前运行。
我想知道如何在我检查期望函数中的 foundName 之前确保承诺已经完成?
【问题讨论】:
-
要解决你需要明确运行
$scope.$digest()的承诺 -
感谢您的回答,但我们不能在量角器测试中使用范围。
-
all/each是异步的,对吧? -
你的规范看起来很乱,我建议使用
it块来帮助控制流。但是你在寻找这样的东西吗?var deferred = protractor.promise.defer(); return deferred.promise; -
或者尝试修改该语句?我在非角度上使用量角器,所以我无法使用
q- 但你能做到吗:promises.each(function (foundName) { expect(foundName).toBe(true); });?
标签: javascript protractor