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

Trying to move e2e code into a function with no success

问题是由于 promise 解决,我传入了一个 xPath 用于所有要搜索的元素以及一个要搜索的字符串,我想要元素 returned。这是代码:

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

点击作品的注释行。它可以看到元素并单击它。我想 return 将元素发送给调用者,然后调用者会点击。

如果 return 不在 .then 部分中,那么 return 发生得太快并且 z = 0。现在的情况是,没有任何 returned。

你的函数findListItem没有return值,在itemList.then

之前添加return
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);
    }
  }