量角器场景的写法
The way to write protractor scenarios
假设 angular 应用程序包含两个页面:联系人(包含 table 以及联系人列表和一个按钮 "add new contact")和新联系人页面(包含表单添加新联系人)。我想写那个场景:
- 点击添加按钮
- 检查 "new contacts" 页面是否打开
- 输入联系人数据
- 按添加按钮
- 检查新联系人是否在 table
对于这些页面,我的页面对象具有 "click some button"、"input some field" 和所有功能 returns 承诺。
编写测试场景的最佳方式是什么:使用 js 链接,例如
contactPage.clickAddButton()
.then(function () {
return newContactPage.checkUrl();
})
.then(function () {
return newContactPage.inputData(data);
})
.then(function () {
return newContactPage.clickAddButton();
})
.then(function () {
return checkContact(data);
})
.then(function (succes) {
}, function (error) {
console.error(error);
});
或者我可以这样写:
contactPage.clickAddButton();
newContactPage.checkUrl();
newContactPage.inputData(data);
newContactPage.clickAddButton();
checkContact(data);
将场景拆分为多个 "it" 功能有意义吗?
没有必要明确解决承诺。 Protractor 有一个 Control Flow 并且开箱即用地处理承诺队列。由于这是一个单一的场景,你可以把它放在一个单一的 it()
中,除非你不重复自己:
contactPage.clickAddButton();
newContactPage.checkUrl();
newContactPage.inputData(data);
newContactPage.clickAddButton();
checkContact(data);
如果坚持使用量角器,则应按 处理。
但是如果你想让承诺链保持明确(远离量角器,与应用程序编码格式一致等),那么它可以像这样重写:
contactPage.clickAddButton()
.then(newContactPage.checkUrl) // Must resolve `data` for next function
.then(newContactPage.inputData)
.then(newContactPage.clickAddButton) // Must resolve `data` for next function
.then(checkContact)
.then(function (success) {
// Test passes...
}, function (error) {
console.error(error);
});
但是如果你使用量角器,写成 会更简洁。
假设 angular 应用程序包含两个页面:联系人(包含 table 以及联系人列表和一个按钮 "add new contact")和新联系人页面(包含表单添加新联系人)。我想写那个场景:
- 点击添加按钮
- 检查 "new contacts" 页面是否打开
- 输入联系人数据
- 按添加按钮
- 检查新联系人是否在 table
对于这些页面,我的页面对象具有 "click some button"、"input some field" 和所有功能 returns 承诺。
编写测试场景的最佳方式是什么:使用 js 链接,例如
contactPage.clickAddButton()
.then(function () {
return newContactPage.checkUrl();
})
.then(function () {
return newContactPage.inputData(data);
})
.then(function () {
return newContactPage.clickAddButton();
})
.then(function () {
return checkContact(data);
})
.then(function (succes) {
}, function (error) {
console.error(error);
});
或者我可以这样写:
contactPage.clickAddButton();
newContactPage.checkUrl();
newContactPage.inputData(data);
newContactPage.clickAddButton();
checkContact(data);
将场景拆分为多个 "it" 功能有意义吗?
没有必要明确解决承诺。 Protractor 有一个 Control Flow 并且开箱即用地处理承诺队列。由于这是一个单一的场景,你可以把它放在一个单一的 it()
中,除非你不重复自己:
contactPage.clickAddButton();
newContactPage.checkUrl();
newContactPage.inputData(data);
newContactPage.clickAddButton();
checkContact(data);
如果坚持使用量角器,则应按
但是如果你想让承诺链保持明确(远离量角器,与应用程序编码格式一致等),那么它可以像这样重写:
contactPage.clickAddButton()
.then(newContactPage.checkUrl) // Must resolve `data` for next function
.then(newContactPage.inputData)
.then(newContactPage.clickAddButton) // Must resolve `data` for next function
.then(checkContact)
.then(function (success) {
// Test passes...
}, function (error) {
console.error(error);
});
但是如果你使用量角器,写成