javascript - 为什么 puppeteer page.$$eval 返回 undefined
问题描述
我正在尝试使用 puppeteer 为我的 e2e 测试创建一个辅助函数,以从使用 Material UI 实现的选择下拉列表中选择一个项目。出于某种原因,下拉项返回未定义。这是我的功能。
export const selectFromDropDown = async (page, selectElement, className, value) => {
const dropdownInput = await page.waitForSelector(selectElement)
await dropdownInput.click()
await page.waitForSelector(`li.${className}`)
const dropdownItem = await page.$$eval(`li.${className}`, (listItems, val) => listItems.find((item) => item.dataset.value === val), value)
console.log(dropdownItem, '000000')
dropdownItem.click()
}
我也做过const dropdownItem = await page.$$eval(`li.${className}`, (listItems, val) => listItems.find((item) => console.log('match: ', item.dataset.value === val) || item.dataset.value === val), value)
。它为其他人记录 false,为与该值匹配的列表项记录 true,但 dropdownItem 仍未定义。我究竟做错了什么?
解决方案
$$eval
不会返回handle
您需要使用evaluateHandle
的 .
const dropdownItem = await page.evaluateHandle(
(listItemsSelector, val) =>
Array.from(document.querySelectorAll(listItemsSelector)
.find((item) => item.dataset.value === val),
`li.${className}`,
value)
console.log(dropdownItem, '000000')
await dropdownItem.click()
推荐阅读
- python - 如何使用 z3py 设置“最多 n 次”等要求?
- python - 使用pyaudio的回调模式使用pydub播放音频时出现问题
- php - 如何在 php 文件中包含静态资源,如图像、css 和 javascript
- sql - 针对 dbms 问题改进 sql 查询
- firebase - Firebase 事件发生时更新反应原生(博览会)UI
- python - 如何仅打印此输出的最后一行?
- r - 使用 read_html 在 R 中读取时处理 404 和其他错误 URL
- excel - 在 Excel VBA 中删除条件
- python - 在 sqlalchemy 中插入父对象时插入子对象列表
- javascript - Discord Bot 不会通过 node 上线。或节点 main.js