编写量角器场景的方法

时间:2015-10-12 13:30:12

标签: javascript testing protractor end-to-end

假设角度应用程序包含两个页面:联系人(包含带有联系人列表的表格和一个“添加新联系人”按钮)和新的联系人页面(带有添加新联系人的表单)。我想写那个场景:

  1. 点击添加按钮
  2. 检查“新联系人”页面是否打开
  3. 输入联系人数据
  4. 按添加按钮
  5. 检查新联系人是否在表格中
  6. 对于这些页面,我的页面对象具有“单击某个按钮”,“输入一些字段”等功能,所有函数都返回promises。

    编写测试场景的最佳方法是:使用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”功能是否有意义?

2 个答案:

答案 0 :(得分:2)

无需明确解决承诺。量角器有一个Control Flow并自然地处理承诺队列。由于这是一个单一场景,您可以将其保留在单个it()内,除非您不重复:

contactPage.clickAddButton();
newContactPage.checkUrl();
newContactPage.inputData(data);
newContactPage.clickAddButton();
checkContact(data);

答案 1 :(得分:1)

如果坚持量角器,你应该处理为answered by alecxe

但是如果你想保持承诺链明确(远离量角器,与app编码格式一致),那么就可以这样重写:

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);
  });

但如果你使用的是量角器,那么将它写成answered by alecxe就更清晰了。