reactjs - 端到端测试材料-UI Select with Puppeteer
问题描述
我无法访问<MenuItem>
Material-UISelect
组件下拉列表中的下拉值 ( )。
基本上,我想要完成的是,点击输入id='x'
,等待下拉菜单显示(div
使用ul
and li
,每个 li 都有id='y'
道具),选择特定的,然后点击它。
下拉列表与过滤器有关...
注意:使用本机选择不是一个选项。
解决方案
您需要先触发 mousedown,然后单击 Material Select 元素上的事件。您可以在 Puppeteer 代码中使用以下函数。
const MaterialSelect = async (page, newSelectedValue, cssSelector) => {
await page.evaluate((newSelectedValue, cssSelector) => {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent("mousedown", true, true);
var selectNode = document.querySelector(cssSelector);
selectNode.dispatchEvent(clickEvent);
[...document.querySelectorAll('li')].filter(el => el.innerText == newSelectedValue)[0].click();
}, newSelectedValue, cssSelector);
}
用法示例:“demo-simple-select”是我分配给material-ui Select的id
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://my-app-site/page');
await MaterialSelect(page, 'new selected value', '#demo-simple-select');
})();
推荐阅读
- r - 如何在 R 中通过多个组运行循环
- c++ - 如何通过指向另一个函数返回的函数的指针调用具有默认参数的函数?
- c# - aspx网站一页的SQL超时
- ansible - 成为具有与主机信息关联的密码的 sudoer 用户
- prolog - prolog中的整数范围暂停
- reactjs - 通过 Route 中的 props 传递数据
- websocket - 如何在feathersjs中建立与频道的连接?
- octopus-deploy - 如何使用 Octopus deploy 部署连续的 azure webjob
- java - 有没有办法让改造/gson 将双时间戳转换为长?
- python - 从短文本中提取和排名关键字