javascript - 发送消息到 console.log (jest puppeteer)

标签 javascript node.js jestjs puppeteer

为什么我在 console.log 中看不到我的消息 page.evaluatepage.$page.$$page.$evalpage.$$eval 并且无法访问变量吗?

let variable = 0;
const divColors = await page.evaluate(() => {
      const divs = Array.from(document.querySelectorAll('.map-filters div'));
      let text = divs.map((element, index) => {
        console.log(element.textContent)
        variable =1;
        return element.style.color;
      })
      return text;
    })

为什么在此示例中我无法执行 variable=1console.log(element.textContent) 操作?

最佳答案

您在 page.evaluate 内部使用 console.log,因此它将其输出记录到 Chromium 浏览器而不是 Node 输出。要在 Node 控制台中查看来自浏览器的控制台消息,需要在创建 page 对象之后且在脚本中使用 console.log 之前订阅它们:

const page = await browser.newPage();

page.on('console', consoleObj => console.log(consoleObj.text()));

page.evaluate(...);

至于variable变量,实际上你的脚本中有两个。

第一个存在于 node.js 上下文中:

let variable = 0;

另一个 - 在网页上下文中:

page.evaluate( () => {
    variable = 1;
})

他们是完全不同的。将 page.evaluate 视为通往另一个世界的门户:那里存在的对象仅存在于 puppeteer 所在的 Web 浏览器中打开的页面上的 JavaScript 运行时内部驾驶。 node 有自己的运行时和自己的一组对象。

您可以将数据从 node 传递到 page.evaluate:

let variable = 420;

page.evaluate(variable => {

    // it is now passed here from outside
    console.log(variable) 

}, variable);

关于javascript - 发送消息到 console.log (jest puppeteer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56272865/

相关文章:

javascript - 创建一个接受多个字符串参数并将它们全部打印在一起的函数

Javascript fillRect 不从变量中绘制

node.js - 在 Sails.js 中定义可重用函数的正确位置

node.js - 仅从搜索中返回 _source

javascript - 如何测试按钮是否被点击?

javascript - 为什么 onload 事件没有按预期绑定(bind) `this` 变量?

javascript - 如何使用React Hooks重写React Native的TVEventHandler?

node.js - nodejs从url下载并解压文件,错误No END header found

reactjs - 如何使用 FormData 发送 event.target 以模拟函数

javascript - 使用 jest 更新组件状态