mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
157 lines
3.6 KiB
Markdown
157 lines
3.6 KiB
Markdown
![]() |
---
|
||
|
id: debug-selectors
|
||
|
title: "Debugging Selectors"
|
||
|
---
|
||
|
|
||
|
Playwright will throw a timeout exception like `locator.click: Timeout 30000ms exceeded` when an element does not exist on the page. There are multiple ways of debugging selectors:
|
||
|
|
||
|
- [Playwright Inspector](#using-playwright-inspector) to step over each Playwright API call to inspect the page.
|
||
|
- [Browser DevTools](#using-devtools) to inspect selectors with the DevTools element panel.
|
||
|
- [Trace Viewer](./trace-viewer.md) to see what the page looked like during the test run.
|
||
|
- [Verbose API logs](#verbose-api-logs) shows [actionability checks](./actionability.md) when locating the element.
|
||
|
|
||
|
## Using Playwright Inspector
|
||
|
|
||
|
Open the [Playwright Inspector](./debug.md) and click the `Explore` button to hover over elements in the screen and click them to
|
||
|
automatically generate selectors for those elements. To verify where selector points, paste it into the inspector input field:
|
||
|
|
||
|
<img width="602" alt="Selectors toolbar" src="https://user-images.githubusercontent.com/883973/108614696-ad5eaa00-73b1-11eb-81f5-9eebe62543a2.png"></img>
|
||
|
|
||
|
## Using DevTools
|
||
|
|
||
|
You can also use the following API inside the Developer Tools Console of any browser.
|
||
|
|
||
|
When running in Debug Mode with `PWDEBUG=console`, a `playwright` object is available in Developer tools console.
|
||
|
|
||
|
1. Run with `PWDEBUG=console`
|
||
|
1. Setup a breakpoint to pause the execution
|
||
|
1. Open the console panel in browser developer tools
|
||
|
|
||
|
<img src="https://user-images.githubusercontent.com/284612/92536317-37dd9380-f1ee-11ea-875d-daf1b206dd56.png"></img>
|
||
|
|
||
|
### playwright.$(selector)
|
||
|
|
||
|
Query Playwright selector, using the actual Playwright query engine, for example:
|
||
|
|
||
|
```txt
|
||
|
> playwright.$('.auth-form >> text=Log in');
|
||
|
|
||
|
<button>Log in</button>
|
||
|
```
|
||
|
|
||
|
### playwright.$$(selector)
|
||
|
|
||
|
Same as `playwright.$`, but returns all matching elements.
|
||
|
|
||
|
```txt
|
||
|
> playwright.$$('li >> text=John')
|
||
|
|
||
|
> [<li>, <li>, <li>, <li>]
|
||
|
```
|
||
|
|
||
|
### playwright.inspect(selector)
|
||
|
|
||
|
Reveal element in the Elements panel (if DevTools of the respective browser supports it).
|
||
|
|
||
|
```txt
|
||
|
> playwright.inspect('text=Log in')
|
||
|
```
|
||
|
|
||
|
### playwright.locator(selector)
|
||
|
|
||
|
Query Playwright element using the actual Playwright query engine, for example:
|
||
|
|
||
|
```txt
|
||
|
> playwright.locator('.auth-form', { hasText: 'Log in' });
|
||
|
|
||
|
> Locator ()
|
||
|
> - element: button
|
||
|
> - elements: [button]
|
||
|
```
|
||
|
|
||
|
### playwright.highlight(selector)
|
||
|
|
||
|
Highlight the first occurrence of the locator:
|
||
|
|
||
|
```txt
|
||
|
> playwright.hightlight('.auth-form');
|
||
|
```
|
||
|
|
||
|
### playwright.clear()
|
||
|
|
||
|
```txt
|
||
|
> playwright.clear()
|
||
|
```
|
||
|
|
||
|
Clear existing highlights.
|
||
|
|
||
|
### playwright.selector(element)
|
||
|
|
||
|
Generates selector for the given element.
|
||
|
|
||
|
```txt
|
||
|
> playwright.selector($0)
|
||
|
|
||
|
"div[id="glow-ingress-block"] >> text=/.*Hello.*/"
|
||
|
```
|
||
|
|
||
|
## Verbose API logs
|
||
|
|
||
|
Playwright supports verbose logging with the `DEBUG` environment variable.
|
||
|
|
||
|
```bash tab=bash-bash lang=js
|
||
|
DEBUG=pw:api npm run test
|
||
|
```
|
||
|
|
||
|
```batch tab=bash-batch lang=js
|
||
|
set DEBUG=pw:api
|
||
|
npm run test
|
||
|
```
|
||
|
|
||
|
```powershell tab=bash-powershell lang=js
|
||
|
$env:DEBUG="pw:api"
|
||
|
npm run test
|
||
|
```
|
||
|
|
||
|
```bash tab=bash-bash lang=java
|
||
|
DEBUG=pw:api mvn test
|
||
|
```
|
||
|
|
||
|
```batch tab=bash-batch lang=java
|
||
|
set DEBUG=pw:api
|
||
|
mvn test
|
||
|
```
|
||
|
|
||
|
```powershell tab=bash-powershell lang=java
|
||
|
$env:DEBUG="pw:api"
|
||
|
mvn test
|
||
|
```
|
||
|
|
||
|
```bash tab=bash-bash lang=python
|
||
|
DEBUG=pw:api pytest -s
|
||
|
```
|
||
|
|
||
|
```batch tab=bash-batch lang=python
|
||
|
set DEBUG=pw:api
|
||
|
pytest -s
|
||
|
```
|
||
|
|
||
|
```powershell tab=bash-powershell lang=python
|
||
|
$env:DEBUG="pw:api"
|
||
|
pytest -s
|
||
|
```
|
||
|
|
||
|
```bash tab=bash-bash lang=csharp
|
||
|
DEBUG=pw:api dotnet run
|
||
|
```
|
||
|
|
||
|
```batch tab=bash-batch lang=csharp
|
||
|
set DEBUG=pw:api
|
||
|
dotnet run
|
||
|
```
|
||
|
|
||
|
```powershell tab=bash-powershell lang=csharp
|
||
|
$env:DEBUG="pw:api"
|
||
|
dotnet run
|
||
|
```
|