#javascript #selenium #async-await
#javascript #селен #асинхронное ожидание
Вопрос:
Написание некоторых тестов с использованием Selenium Chrome.
У вас есть массив с именем dates
, который содержит два элемента: пустой массив allDates
и код, подобный этому:
dates.forEach(async date => {
console.log("🚀 ~ file: runSelenium.js ~ line 42 ~ position", await date.getText());
let newDate = await date.getText();
console.log("🚀 ~ file: runSelenium.js ~ line 44 ~ newDate", newDate)
allDates.push(newDate);
})
console.log("🚀 ~ file: runSelenium.js ~ line 47 ~ allDates", allDates)
но результат выглядит примерно так:
🚀 ~ file: runSelenium.js ~ line 47 ~ allDates []
✓ First test (678ms)
🚀 ~ file: runSelenium.js ~ line 42 ~ position 26-02-2021
🚀 ~ file: runSelenium.js ~ line 42 ~ position 06.11.2020
Прежде всего, странно, что first — это последний console.log (даже перед именем теста). Но самая большая проблема для меня заключается в том, что он полностью опускает second console.log (это с line 44
в середине).
Я попытался записать данные в newDate
переменную несколькими способами, такими как:
let newDate = (await date.getText()).toString();
let newDate = await date.getAttribute('value');
let newDate = (await date.getAttribute('value')).toString();
но ничего из вышеперечисленного не сработало.
Так мало вопросов:
- Как я могу изменить его, чтобы иметь возможность сохранять переменную newDate в массиве?
- Почему консоль.журнал с
line 44
не отображается даже с пустым значением? - Почему консоль.журналы и имя теста расположены не в правильном порядке?
Комментарии:
1. какой фреймворк вы используете
2. вы пробовали alldates = await dates.getText()4
3. Сохраните обещание в массиве, а затем используйте
Promise.all(allDates);
Ответ №1:
Используйте for-loop
вместо forEach
for (const date of dates) {
console.log("🚀 ~ file: runSelenium.js ~ line 42 ~ position", await date.getText());
let newDate = await date.getText();
console.log("🚀 ~ file: runSelenium.js ~ line 44 ~ newDate", newDate)
allDates.push(newDate);
}
console.log("🚀 ~ file: runSelenium.js ~ line 47 ~ allDates", allDates)