尝试单击按钮但对我不起作用

时间:2020-06-12 01:08:34

标签: puppeteer

我有以下代码:

<div class="pt6-sm pb6-sm ta-sm-r d-sm-flx flx-jc-sm-fe"><button class="mb1-sm css-bz0cep ex41m6f0 secondary" type="button">Cancel</button><button class="ml3-sm mb1-sm css-17hmqcn ex41m6f0 primary" type="button">Save</button></div>

我试图单击“保存”按钮,并且正在尝试这样做:

  const addBtn = await select(page).getElement('button:contains(Save)');
  await addBtn.click()

我也尝试过:

  const [button] = await page.$x("//div[@class='elements']/button[contains(., 'Save')]");
  if (button) {
      await button.click();
  }

我收到未处理的承诺拒绝。知道为什么吗?

1 个答案:

答案 0 :(得分:3)

基本上,您会得到UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'click' of undefined,直到选择器不正确/元素不存在或尚未出现在页面上为止。

在这种情况下,您的xpath选择器似乎没有抓住元素。

这将完成工作:

  const addBtn = await page.$x('//button[contains(text(), "Save")]')
  await addBtn[0].click()

您知道吗?如果在Chrome DevTools的“元素”选项卡中右键单击一个元素,然后选择“复制”:您可以在其中复制元素的确切选择器或xpath。之后,您可以切换到“控制台”选项卡,并使用Chrome api可以测试选择器的内容,因此可以为操纵up脚本做好准备。例如:$x('//button[contains(text(), "Save")]').textContent应该显示您希望单击的按钮的文本,否则您需要更改访问权限,或者需要检查是否有更多具有相同选择器的元素,等等。这可能帮助您找到更合适的选择器。