【发布时间】:2015-06-14 01:59:21
【问题描述】:
我正在使用量角器为 Angular 应用程序设置一套 e2e 测试。我正在遵循article 中详细介绍的页面对象模型模式。我在进行涉及创建用户并验证数据是否已正确处理/保存的特定测试时遇到问题。本次测试步骤如下:
1.) 通过让 protactor 从 User 对象向表单发送数据并提交来创建用户:
//models.js
TestUser = {
Title: 'Big Boss Man',
Email: 'theboss@gmail.com',
}
2.) 通过检查新创建用户的“帐户详细信息”视图中的数据,验证数据是否得到正确处理/保留。该数据显示在表格中,如下所示:
// accountdetails.html
<table class="account-details" summary="Account details">
<tbody>
<tr>
<th>Title:</th>
<td class="ng-binding">Big Boss Man</td>
</tr>
<tr>
<th>Email:</th>
<td class="ng-binding">theboss@gmail.com</td>
</tr>
</tbody>
</table>
3.) 使用一个简单的辅助方法,使用 jasmine 的 toEqual() 方法比较两个传入对象的匹配键/值对:
compareTwoObjects: function(object1, object2) {
Object.keys(object1).forEach(function(key) {
expect(object2[key].getAttribute('value')).toEqual(object1[key]);
});
问题:我如何编写一个使用元素选择器查找表的方法,深入了解<th> 和<td> 元素,获取它们的文本值,并构建一个键/值对对象我可以与原始的TestUser 对象进行比较吗?因为我显然对promise不是很了解,所以我想出了以下内容:
getUserData: {
get: function() {
var userData = {};
$$('table[summary="Account details"] tbody tr')
.then(function(rowElements) {
rowElements.forEach(function(rowElement) {
rowElement.$('th').getText().then(function(label) {
rowElement.$('td').getText().then(function(text) {
userData[label.slice(0,-1)] = text;
// success! logs {Title: 'Big Boss Man', Email: 'theboss@gmail.com'}
// on completion of loop
console.log(userData);
});
});
});
});
// failure, logs an empty object
console.log(userData);
return userData;
}
}
我知道它不起作用,因为在解决上述承诺之前返回了 userData。我该如何解决这个问题,或者我需要有什么不同的想法?
【问题讨论】:
标签: javascript angularjs protractor