我有以下代码:
<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();
}
我得到了未兑现的承诺拒绝。知道为什么吗?
基本上,您会得到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
应该显示您希望单击的按钮的文本,否则您需要更改访问权限,或者需要检查是否有更多具有相同选择器的元素,等等。这可能有助于您找到更多信息适当的选择器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句