Попытка переместить код e2e в функцию безуспешно - PullRequest
0 голосов
/ 01 мая 2018

Проблема связана с разрешением обещаний, я передаю 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 голосов
/ 02 мая 2018

Ваша функция 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);
    }
  }
...