如何在 XPath 中定位带有额外包装标签的按钮?
How do I target a button with extra wrapper tag in XPath?
我尝试针对以下目标,但似乎无法正常工作。我得到的错误是
Error: Node is either not clickable or not an HTMLElement.
JavaScript
const btn = await page.$x(//button[contains(., 'My Button')])
await btn[0].click()
HTML/XML
<div>
<button>
<translate original="My Button">My Button</translate>
</button>
</div>
而不是
//button[contains(., 'My Button')]
尝试
//translate[contains(., 'My Button')]
或者也许
//*[local-name()='translate' and contains(., 'My Button')]
如果您确实需要子串匹配(例如,所有 "My Button"
、"Not My Button"
和 "My Buttonless Shirt"
),则使用 contains()
作为 .
另一方面,如果您只是想抽象掉 whitespace(以及包装目标文本的任何元素),则使用 normalize-space()
:
//button[normalize-space() = 'My Button']
这将选择 button
元素,其 space-标准化 string value 正好是 'My Button'
.
另见
我尝试针对以下目标,但似乎无法正常工作。我得到的错误是
Error: Node is either not clickable or not an HTMLElement.
JavaScript
const btn = await page.$x(//button[contains(., 'My Button')])
await btn[0].click()
HTML/XML
<div>
<button>
<translate original="My Button">My Button</translate>
</button>
</div>
而不是
//button[contains(., 'My Button')]
尝试
//translate[contains(., 'My Button')]
或者也许
//*[local-name()='translate' and contains(., 'My Button')]
如果您确实需要子串匹配(例如,所有 "My Button"
、"Not My Button"
和 "My Buttonless Shirt"
),则使用 contains()
作为
另一方面,如果您只是想抽象掉 whitespace(以及包装目标文本的任何元素),则使用 normalize-space()
:
//button[normalize-space() = 'My Button']
这将选择 button
元素,其 space-标准化 string value 正好是 'My Button'
.