reactjs - E2E测试 Material -UI Select with Puppeteer

标签 reactjs material-ui puppeteer

我无法访问 Material-UI <MenuItem> 下拉列表中的下拉值 ( Select )组件。

基本上,我想要完成的任务如下,点击 id='x' 输入,等待下拉列表显示( divulli ,其中每个 li 都有 id='y' 属性),选择特定的一个,然后单击它。

下拉菜单与过滤器有关...

注意:使用 native 选择不是一个选项。

最佳答案

您需要先触发Material Select 元素上的mousedown 事件,然后再触发click 事件。您可以在 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');
})();

关于reactjs - E2E测试 Material -UI Select with Puppeteer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60949856/

相关文章:

javascript - 如何绕过 Puppeteer 阻止系统

node.js - Puppeteer 加载页面需要很长时间

javascript - 如何在 Material ui 表单输入字段中添加验证

javascript - 如何让node js文件在linux中的某个日期的某个时间运行?

javascript - React.js 和 jQuery 能完成同样的事情吗?

javascript - 需要触发通过映射函数reactjs编写的元素数组中的单个元素

reactjs - 我的 Material UI Button 组件的自定义 makeStyles 被 ..css-zln006-MuiButtonBase-root-MuiButton-root 覆盖

reactjs - 当另一个字段更改时,MUI 自动完成更改所选选项

reactjs - 如何在 HighchartsReact 中使用来自 react-emotion 的样式?

reactjs - 使用 Redux Thunk 和 Axios 测试 Action Creator