无法选择并单击具有“按钮”角色的div

时间:2019-08-13 09:10:59

标签: node.js dom puppeteer

我正在尝试点击具有div属性的role="button", 即使我没有使用它,也无法通过其DOM路径来获取它。

我尝试过的事情:

try {
  let Button = await this.page.$("div.class1.class2 > div");
  await Button.click();
  console.log("Clicked");
} catch (e) {
  console.log(e);
  console.log("No button");
}

我得到的错误是:

TypeError: Cannot read property '$' of undefined

我试图通过包含div的{​​{1}}进入div,它确实有2个我可以关联的类,但似乎不起作用。

是否有一种方法可以使用role="button"获取所有div的数组,并仅单击其中具有跨度并带有特定文本的div?

1 个答案:

答案 0 :(得分:1)

删除this关键字以解决TypeError错误。

let Button = await page.$("div.class1.class2 > div");

要获取包含role=buttonSpecific text文本的所有div数组:

const buttons = await page.$x('//div[@role="button"][text()="Specific Text"]'); // returns: <Promise<Array<ElementHandle>>>

但是我建议添加waitForXPath方法来等待该元素。

完整示例:

try {
  const button = await page.waitForXPath('//div[@role="button"][text()="Specific Text"]');
  await button.click();
  console.log("Clicked");
} catch (e) {
  console.log("No button", e);
}