繁体   English   中英

如何使用 protractor 页面 object model 设计和承诺创建和返回对象数组

[英]How to create and return an array of objects using protractor page object model design and promises

我正在创建一个页面 object model ,其中一个属性是表中的所有用户。 该表有几列,所以我想解析该表并为每一行创建一个用户 object,然后返回该集以用于测试。 到目前为止,我的页面 object 的属性如下所示:

users: {
    get: function() {
        let userRecords = [];
        var users = element.all(by.repeater('user in users')).each(function(tr, index) {
            let user = {
                name:   tr.element(by.css('td:nth-child(2)')).getText().then(text => {return text;}),
                role:   tr.element(by.css('td:nth-child(3)')).getText().then(text => {expect(text).toBeTruthy();}),
                status: tr.element(by.css('td:nth-child(4)')).getText().then(text => {expect(text).toBeTruthy();}),
                //actionsButton: tr.element(by.css('btn btn-default'))
            };
            userRecords += user;
        }).then(userRecords => {return userRecords});
        
        return userRecords;
    }
},

通过反复试验,我在尝试打印以筛选userRecords的每个元素时遇到了两种结果之一:

  1. 每个元素打印为undefined
  2. userRecords is not defined

重申一下,我只是想构建一个数组,将每个用户保存为 object,然后能够在我的测试中对该集合进行迭代/过滤。

鉴于我正在采用的方法,构建此用户数组并解决承诺的理想方法是什么?

编辑:值得注意的是,如果我在每个getText().then()语句中执行console.log() ,它确实会从表中打印正确的数据。 所以,我知道它正在正确读取表格。

我会 go 使用返回 json 的方法,并使其异步

users: async function() {
  let userRecords = [];
  var users = element.all(by.repeater('user in users'));
  for (let i = 0; i < await users.count(); i++) {
    let tr = users.get(i);
    let user = {
      name: await tr.element(by.css('td:nth-child(2)')).getText(),
      role: await tr.element(by.css('td:nth-child(3)')).getText(),
      status: await tr.element(by.css('td:nth-child(4)')).getText()
    };

    userRecords.push()
  }
        
  return userRecords;
},

然后使用:

console.log(
  JSON.stringify(
    await constructorName.users()
  )
)

应该就这么简单。 请注意,我没有测试代码,但根据我的经验,我确实使用了这种方法。 所以它可能需要一些小的修改

一般来说,尽量避免使用.then - async/await更容易使用, .each - go 用for循环代替。 还有userRecords += user; 没有做你认为的事情(尽管我在这里可能错了)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM