试图将e2e代码移动到函数中但没有成功

时间:2018-05-01 15:54:01

标签: protractor e2e-testing

问题是由于承诺解决,我传入一个xPath,搜索所有要搜索的元素以及要搜索的字符串,我希望返回该元素。这是代码:

export class Library {
  static findListItem(xPath: string, findItem: string): any {
    let z = 0;
    const allItemsXPath = xPath.split('[X]');
    const itemXPath = xPath.split('X');
    console.log(xPath + ' : ' + findItem);
    const itemList = element.all(by.xpath(allItemsXPath[0] + allItemsXPath[1])).map(function (item) {
      return item.getText();
    });
    itemList.then(function (itemText) {
      console.log(itemText.length);
      for (let k = 0; k < itemText.length; k++) {
        itemFound = true;
        console.log(itemText[k] + ' : ' + findItem);
        if (itemText[k] === findItem) {
          z = k + 1;
          console.log('found ' + z);
        }
      }
    }).then(() => {
      console.log(itemXPath[0] + z + itemXPath[1]);
      // element(by.xpath(itemXPath[0] + z + itemXPath[1])).click();
      return element(by.xpath(itemXPath[0] + z + itemXPath[1]));
    });
  };

点击作品的注释行。它可以看到元素并单击它。我想将元素返回给调用者然后单击。

如果返回不在.then部分,则返回太快,z = 0.现在的方式,没有返回任何内容。

1 个答案:

答案 0 :(得分:0)

您的函数findListItem没有返回值,请在return之前添加itemList.then

static findListItem(xPath: string, findItem: string): any {
   ...

   return itemList.then(function (itemText) {
      ...
   });
}

Library.findListItem(xxx, yyy).then(function(item){
   return item.click();
})

我对您的下面的代码有一个问题,即找到匹配的项目,您将每个迭代比较itemText的一个字符串与整个字符串findItem。您确定可以通过以下代码找到匹配的。

 for (let k = 0; k < itemText.length; k++) {
    itemFound = true;
    console.log(itemText[k] + ' : ' + findItem);
    if (itemText[k] === findItem) {
      z = k + 1;
      console.log('found ' + z);
    }
  }