Далее есть два элемента на одной странице “elementM” и “elementP”, которые мы передаем в функцию выше и результат загоняем в переменную.
let Merg = foo(elementM);
let Part = foo(elementP);
let Total = Merg+ Part; // пытаемся получить сумму двух целых чисел, вытащенных из наших двух элементов
Потом пытаюсь сравнить expect(Total).toBeGreaterThan(Total2); // Total2 - некое число полученное агалогичным образом
ИТОГ: ошибка типа Expected ‘ManagedPromise::17198 {[[PromiseStatus]]: “pending”}ManagedPromise::17212 {[[PromiseStatus]]: “pending”}’ to be greater than ‘ManagedPromise::17324 {[[PromiseStatus]]: “pending”}ManagedPromise::17338 {[[PromiseStatus]]: “pending”}’.
что я делаю не так? как привильно читать, сохранять и манипулировать числами в элементах ?
вид элемента<div title="1506">1506</div>
нас интересует число “1506” внутри.
спасибо. Но у меня Total2 еще не получен, он будет получен позднее на другой странице, соответственно тогда сравниваем.
Но в итоге пишет Total undefined. как можно вытащить Total за пределы then функции?
заранее извиняюсь за возможно глупые вопросы, т.к. я еще новичок
Promise не станет магически int - ваша функция foo всеравно возвращает промис, но он уже зарезолвится не в строку, а в результат parseInt.
попробуйте
let total = parseInt(await elementM.getText()) + parseInt(await elementP.getText())
ну или без async/await
let Merg = foo(elementM);
let Part = foo(elementP);
let Total = Promise.all(Merg, Part).then(vals => vals[0] + vals[1])
Total.then((resolved)=> console.log(resolved))
Никак, нужно работать внутри промиса. И все-таки лучше перейти на async/await, т.к. это даст больше гибкости кода. И скорее всего вы выбрали не тот язык для вхождения в автоматизацию, JS изначально ориентирован на неблокирующий i/o. И это трудно к пониманию.
@xotabu4, спасибо, попробовал, но пишет “Failed: undefined is not a function” для строки “let Total = Promise.all…”. но все равно спасибо.
@Sergei_Chipiga Спасибо также и вам, но к сожалению не могу использовать async/await для этого конкретного проекта, т.к. ранее написанный код был без использования async/await, соответственно я не могу отключить control flow / promise manager без последствий.
UPDATE: только что решил задачу, у меня эйфория, напишу чуть позже как, чтобы другие могли воспользоваться )))
@xotabu4, доработал ваш вариант, который в итоге и заработал:
let Merg = foo(elementM);
let Part = foo(elementP);
let sumPromiseValues = () => Promise.all( [Merg, Part]).then(vals =>
vals[0] + vals[1]).then(resolved => {return resolved});
let Total = sumPromiseValues();
т.о. удалось вытащить целые числа из элементов с помощью .getText, сложить их и значение суммы загнать в переменную.
Ну и далее успешно сравнили значения как и было задумано далее по ходу теста: