我正在使用Puppeteer对使用React和Material-UI构建的应用程序进行e2e测试。
在我的登录表单中,我尝试单击登录按钮,但我得到loginBtn.click is not a function
-这是因为Material UI(版本0.21.0)将<RaisedButton>
包装了一个额外的div,所以我只能到达外部元素。我需要一种访问内部元素然后模拟click事件的方法。
我已经尝试过了:
const loginBtn = await page.$eval(
'.login-form-button',
(element) => element.innerHTML
);
await loginBtn.click();
但是看来element.innerHTML
只是文本,无法点击。
有什么想法可以获取内部元素吗?
答案 0 :(得分:1)
page.$eval
选择一个元素(.login-form-button
)并将该元素传递给第二个参数((element) => element.innerHTML
),在您的情况下,该参数将以字符串形式返回节点的HTML。因此loginBtn
不是按钮,而是字符串。要单击元素,您可能需要使用page.click。
如果您要执行更复杂的条款,建议使用page.evaluate
。在您的情况下,您可以像这样使用它查询元素并单击其第一个子元素:
await page.evaluate(() => {
document.querySelector('.login-form-button').firstElementChild.click();
});