木偶-如何单击内部元素

时间:2019-02-07 14:21:40

标签: reactjs material-ui puppeteer e2e-testing

我正在使用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只是文本,无法点击。

有什么想法可以获取内部元素吗?

1 个答案:

答案 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();
});