mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
250 lines
8.4 KiB
Markdown
250 lines
8.4 KiB
Markdown
---
|
|
id: codegen
|
|
title: "Test Generator"
|
|
---
|
|
|
|
Playwright comes with the ability to generate tests out of the box and is a great way to quickly get started with testing. It will open two windows, a browser window where you interact with the website you wish to test and the Playwright Inspector window where you can record your tests, copy the tests, clear your tests as well as change the language of your tests.
|
|
|
|
```bash js
|
|
npx playwright codegen wikipedia.org
|
|
```
|
|
|
|
```bash java
|
|
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen wikipedia.org"
|
|
```
|
|
|
|
```bash python
|
|
playwright codegen wikipedia.org
|
|
```
|
|
|
|
```bash csharp
|
|
pwsh bin\Debug\netX\playwright.ps1 codegen wikipedia.org
|
|
```
|
|
|
|
Run `codegen` and perform actions in the browser. Playwright will generate the code for the user interactions. `codegen` will attempt to generate resilient text-based selectors.
|
|
|
|
<img width="1916" alt="image" src="https://user-images.githubusercontent.com/13063165/177550119-4e202a56-7d8e-43ac-ad91-bf2f7b2579bd.png"/>
|
|
|
|
## Preserve authenticated state
|
|
|
|
Run `codegen` with `--save-storage` to save [cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) and [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) at the end of the session. This is useful to separately record authentication step and reuse it later in the tests.
|
|
|
|
```bash js
|
|
npx playwright codegen --save-storage=auth.json
|
|
# Perform authentication and exit.
|
|
# auth.json will contain the storage state.
|
|
```
|
|
|
|
```bash java
|
|
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen --save-storage=auth.json"
|
|
# Perform authentication and exit.
|
|
# auth.json will contain the storage state.
|
|
```
|
|
|
|
```bash python
|
|
playwright codegen --save-storage=auth.json
|
|
# Perform authentication and exit.
|
|
# auth.json will contain the storage state.
|
|
```
|
|
|
|
```bash csharp
|
|
pwsh bin\Debug\netX\playwright.ps1 codegen --save-storage=auth.json
|
|
# Perform authentication and exit.
|
|
# auth.json will contain the storage state.
|
|
```
|
|
|
|
Run with `--load-storage` to consume previously loaded storage. This way, all [cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) and [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) will be restored, bringing most web apps to the authenticated state.
|
|
|
|
```bash js
|
|
npx playwright open --load-storage=auth.json my.web.app
|
|
npx playwright codegen --load-storage=auth.json my.web.app
|
|
# Perform actions in authenticated state.
|
|
```
|
|
|
|
```bash java
|
|
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="open --load-storage=auth.json my.web.app"
|
|
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen --load-storage=auth.json my.web.app"
|
|
# Perform authentication and exit.
|
|
# auth.json will contain the storage state.
|
|
```
|
|
|
|
```bash python
|
|
playwright open --load-storage=auth.json my.web.app
|
|
playwright codegen --load-storage=auth.json my.web.app
|
|
# Perform actions in authenticated state.
|
|
```
|
|
|
|
```bash csharp
|
|
pwsh bin\Debug\netX\playwright.ps1 open --load-storage=auth.json my.web.app
|
|
pwsh bin\Debug\netX\playwright.ps1 codegen --load-storage=auth.json my.web.app
|
|
# Perform actions in authenticated state.
|
|
```
|
|
|
|
## Record using custom setup
|
|
|
|
If you would like to use codegen in some non-standard setup (for example, use [`method: BrowserContext.route`]), it is possible to call [`method: Page.pause`] that will open a separate window with codegen controls.
|
|
|
|
```js
|
|
const { chromium } = require('playwright/test');
|
|
|
|
(async () => {
|
|
// Make sure to run headed.
|
|
const browser = await chromium.launch({ headless: false });
|
|
|
|
// Setup context however you like.
|
|
const context = await browser.newContext({ /* pass any options */ });
|
|
await context.route('**/*', route => route.continue());
|
|
|
|
// Pause the page, and start recording manually.
|
|
const page = await context.newPage();
|
|
await page.pause();
|
|
})();
|
|
```
|
|
|
|
```java
|
|
import com.microsoft.playwright.*;
|
|
|
|
public class Example {
|
|
public static void main(String[] args) {
|
|
try (Playwright playwright = Playwright.create()) {
|
|
BrowserType chromium = playwright.chromium();
|
|
// Make sure to run headed.
|
|
Browser browser = chromium.launch(new BrowserType.LaunchOptions().setHeadless(false));
|
|
// Setup context however you like.
|
|
BrowserContext context = browser.newContext(/* pass any options */);
|
|
context.route("**/*", route -> route.resume());
|
|
// Pause the page, and start recording manually.
|
|
Page page = context.newPage();
|
|
page.pause();
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
```python async
|
|
import asyncio
|
|
from playwright.async_api import async_playwright
|
|
|
|
async def main():
|
|
async with async_playwright() as p:
|
|
# Make sure to run headed.
|
|
browser = await p.chromium.launch(headless=False)
|
|
|
|
# Setup context however you like.
|
|
context = await browser.new_context() # Pass any options
|
|
await context.route('**/*', lambda route: route.continue_())
|
|
|
|
# Pause the page, and start recording manually.
|
|
page = await context.new_page()
|
|
await page.pause()
|
|
|
|
asyncio.run(main())
|
|
```
|
|
|
|
```python sync
|
|
from playwright.sync_api import sync_playwright
|
|
|
|
with sync_playwright() as p:
|
|
# Make sure to run headed.
|
|
browser = p.chromium.launch(headless=False)
|
|
|
|
# Setup context however you like.
|
|
context = browser.new_context() # Pass any options
|
|
context.route('**/*', lambda route: route.continue_())
|
|
|
|
# Pause the page, and start recording manually.
|
|
page = context.new_page()
|
|
page.pause()
|
|
```
|
|
|
|
```csharp
|
|
using Microsoft.Playwright;
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
var chromium = playwright.Chromium;
|
|
// Make sure to run headed.
|
|
var browser = await chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
|
|
|
|
// Setup context however you like.
|
|
var context = await browser.NewContextAsync(); // Pass any options
|
|
await context.RouteAsync('**/*', route => route.ContinueAsync());
|
|
|
|
// Pause the page, and start recording manually.
|
|
var page = await context.NewPageAsync();
|
|
await page.PauseAsync();
|
|
```
|
|
|
|
## Emulate devices
|
|
|
|
You can record scripts and tests while emulating a device.
|
|
|
|
```bash js
|
|
# Emulate iPhone 11.
|
|
npx playwright codegen --device="iPhone 11" wikipedia.org
|
|
```
|
|
|
|
```bash java
|
|
# Emulate iPhone 11.
|
|
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args='codegen --device="iPhone 11" wikipedia.org'
|
|
```
|
|
|
|
```bash python
|
|
# Emulate iPhone 11.
|
|
playwright codegen --device="iPhone 11" wikipedia.org
|
|
```
|
|
|
|
```bash csharp
|
|
# Emulate iPhone 11.
|
|
pwsh bin\Debug\netX\playwright.ps1 codegen --device="iPhone 11" wikipedia.org
|
|
```
|
|
|
|
## Emulate color scheme and viewport size
|
|
|
|
You can also record scripts and tests while emulating various browser properties.
|
|
|
|
```bash js
|
|
# Emulate screen size and color scheme.
|
|
npx playwright codegen --viewport-size=800,600 --color-scheme=dark twitter.com
|
|
```
|
|
|
|
```bash java
|
|
# Emulate screen size and color scheme.
|
|
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args="codegen --viewport-size=800,600 --color-scheme=dark twitter.com"
|
|
```
|
|
|
|
```bash python
|
|
# Emulate screen size and color scheme.
|
|
playwright codegen --viewport-size=800,600 --color-scheme=dark twitter.com
|
|
```
|
|
|
|
```bash csharp
|
|
# Emulate screen size and color scheme.
|
|
pwsh bin\Debug\netX\playwright.ps1 codegen --viewport-size=800,600 --color-scheme=dark twitter.com
|
|
```
|
|
|
|
## Emulate geolocation, language and timezone
|
|
|
|
```bash js
|
|
# Emulate timezone, language & location
|
|
# Once page opens, click the "my location" button to see geolocation in action
|
|
npx playwright codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" maps.google.com
|
|
```
|
|
|
|
```bash java
|
|
# Emulate timezone, language & location
|
|
# Once page opens, click the "my location" button to see geolocation in action
|
|
mvn exec:java -e -Dexec.mainClass=com.microsoft.playwright.CLI -Dexec.args='codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" maps.google.com'
|
|
```
|
|
|
|
```bash python
|
|
# Emulate timezone, language & location
|
|
# Once page opens, click the "my location" button to see geolocation in action
|
|
playwright codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" maps.google.com
|
|
```
|
|
|
|
```bash csharp
|
|
# Emulate timezone, language & location
|
|
# Once page opens, click the "my location" button to see geolocation in action
|
|
pwsh bin\Debug\netX\playwright.ps1 codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" maps.google.com
|
|
```
|