playwright
playwright copied to clipboard
[Bug]: locators suggested are incorrect when using getByText and the text contains digits
Version
1.45.3
Steps to reproduce
- Create an HTML file with this body:
<body> <div>Level 1</div> <div>Level 1</div> </body> - Create a test like this:
test('Repro', async ({ testUser }) => { await testUser.page.goto('file:///path/to/test.html'); await testUser.page.getByText('Level 1', { exact: true }).click();
});
3. In VS Code, use "Pick locator."
4. Hover over one of the elements in the HTML page.
3. Repeat with variations like Level 1 1, Level 2000
Expected behavior
The suggested locators should use the full text provided to getByText in the test, but only the first word is included. Note the aka getByText('Level 1')
Error: locator.click: Error: strict mode violation: getByText('Level 1', { exact: true }) resolved to 2 elements:
1) <div>Level 1</div> aka getByText('Level 1').first()
2) <div>Level 1</div> aka getByText('Level 1').nth(1)
Actual behavior
This suggested locator will only include the text before the last space in the string in all cases noted in the steps. Note the aka getByText('Level')
Error: locator.click: Error: strict mode violation: getByText('Level 1', { exact: true }) resolved to 2 elements:
1) <div>Level 1</div> aka getByText('Level').first()
2) <div>Level 1</div> aka getByText('Level').nth(1)
When using pick locator it will also suggest the wrong text:
Additional context
No response
Environment
System:
OS: macOS 14.5
Memory: 172.08 MB / 16.00 GB
Binaries:
Node: 18.16.0 - ~/.nvm/versions/node/v18.16.0/bin/node
Yarn: 1.22.22 - ~/.yarn/bin/yarn
npm: 9.5.1 - ~/.nvm/versions/node/v18.16.0/bin/npm
Languages:
Bash: 3.2.57 - /bin/bash
This was a heuristic introduced in https://github.com/microsoft/playwright/pull/28074. Sounds like it might benefit from a revision.