【发布时间】:2021-11-21 08:12:37
【问题描述】:
我有一个 React 应用程序正在运行。我想知道是否可以使用 Puppeteer 访问状态值。
例如,在 React 中我有:
const [gridBlocks, setGridBlocks] = useState([])
此值稍后会更新以将 gridBlocks 设置为值数组。
然后,使用 Puppeteer 我有:
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://localhost:3000/', {
waitUntil: 'networkidle2'
});
// Can I get access to React and other javascript values now?
// Something like console.log(await page.evaluate(() => <are React variables available here>));
// Another way?
await browser.close();
})();
gridBlocks 状态具有我想循环访问的值以更新 UI 并抓取每个值的屏幕截图。我不会提前知道gridBlocks 的值是什么,所以我不能只是在我的 Puppeteer 脚本中“硬编码”它们。我真的很喜欢能够从加载的页面中读取它,来自page.goto。
我见过的大多数文章都涉及测试,它们将props 传递给组件。我想直接从加载的页面中阅读……如果可能的话。
谢谢!
【问题讨论】:
-
如果您正在测试使用
useState挂钩的组件,最可能的情况是代码中的gridBlocks变量不可访问。您应该使用 puppeteer 进行测试的是,当gridBlocks更新时,生成的 HTML 与您期望的一致。您可以使用page提供的方法(例如page.$(selector)。 -
您可以通过inject proxy functions 访问所需的值。例如:
gridBlocks变量是否传递给任何原生 JavaScript 函数?
标签: javascript reactjs puppeteer