【问题标题】:Selenium, JS - Impossible to pass a getText() result to the variableSelenium,JS - 无法将 getText() 结果传递给变量
【发布时间】: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();

但以上都没有奏效。

这么几个问题:

  1. 如何修改它以将 newDate 变量存储在数组中?
  2. 为什么带有line 44 的console.log 即使是空值也不显示?
  3. 为什么 console.logs 和测试名称的顺序不正确?

【问题讨论】:

  • 你使用的是哪个框架
  • 你试过 alldates = await dates.getText()4
  • 将promise存储在数组中,然后使用Promise.all(allDates);

标签: javascript selenium async-await


【解决方案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)

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多