Is there any method (didn\'t find in API) or solution to click on element with text?
For example I have html:
This XPath expression will query a button which contains the text "Button text":
const [button] = await page.$x("//button[contains(., 'Button text')]");
if (button) {
await button.click();
}
To also respect the To explain why using the text node ( First, let's check the results when using Here are the XPath expressions for So in most cases, it makes more sense to use the const [button] = await page.$x("//div[@class='elements']/button[contains(., 'Button text')]");
Explanation
text()
) is wrong in some cases, let's look at an example:contains(text(), 'Text')
:
//button[contains(text(), 'Start')]
will return both two nodes (as expected)//button[contains(text(), 'End')]
will only return one nodes (the first) as text()
returns a list with two texts (Start
and End
), but contains
will only check the first one//button[contains(text(), 'Middle')]
will return no results as text()
does not include the text of child nodescontains(., 'Text')
, which works on the element itself including its child nodes:
//button[contains(., 'Start')]
will return both two buttons//button[contains(., 'End')]
will again return both two buttons//button[contains(., 'Middle')]
will return one (the last button).
instead of text()
in an XPath expression.