Есть 2 одинаковых значения получения из обещания: в одном случае это работает, в другом - ошибка TypeError: x не является функцией - PullRequest
0 голосов
/ 25 апреля 2020

Я использую поиск элементов в своем автотесте и беру имя из списка. Мой код работает, все хорошо. Но в автотесте я использую этот код несколько раз. Поэтому я решил поместить его в функцию и вызывать, когда мне это нужно. Код работает:

  await driver.wait(until.elementLocated(By.className("item")), 20000);
  let findItems1 = await driver.findElements(By.className("item"));
  let items1 = findItems1.map(async elem => await elem.getText());
  await Promise.all(items1);

  let currentItem1 = findItems1[findItems1.length - 1];
  await currentItem1.click();

  currentName = await currentItem1.getText();  // This string operates
  await Promise.all(currentName)
  console.log(currentName)

Я определяю значение переменной из функции, в которой лежит обещание. Я могу нажать на этот пункт. Но когда я хочу получить текстовое обещание, строка «currentName = await currentItem1.getText ()» выдает ошибку. Хотя в моем первом коде эта строка работает. Я не понимаю, в чем может быть причина.

Код не работает:

async function findCurrentItem(){
    await driver.wait(until.elementLocated(By.className("item")), 20000);
    let findItems = await driver.findElements(By.className("item"));  
    let items = findItems.map(async elem => await elem.getText());
    await Promise.all(items);
    let currentItem = findItems[findItems.length - 1];
    return currentItem;        
  }
 let current = findCurrentItem();
  await currentItem1.click();
 console.log(current, 1)    // console displays promise
 let currentName = await current.getText(); // This string doesn't operate
 await Promise.all(currentName)
 console.log(currentName, 2)   // console displays error

Ошибка:

TypeError: currentItem.getText is not a function

Что я могу сделать?

1 Ответ

1 голос
/ 25 апреля 2020

Вы сделали функцию findCurrentItem asyn c, но не ожидаете ее результата при использовании. Изменить на let current = await findCurrentItem();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...