【发布时间】:2021-02-08 21:08:51
【问题描述】:
使用 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(甚至在测试名称之前)。但对我来说最大的问题是它完全省略了第二个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的console.log 即使是空值也不显示? - 为什么 console.logs 和测试名称的顺序不正确?
【问题讨论】:
-
你使用的是哪个框架
-
你试过 alldates = await dates.getText()4
-
将promise存储在数组中,然后使用
Promise.all(allDates);
标签: javascript selenium async-await