如何在 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'.

另见