mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
379 lines
11 KiB
Markdown
379 lines
11 KiB
Markdown
# class: Tracing
|
|
* since: v1.12
|
|
|
|
API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](../trace-viewer.md) after Playwright script runs.
|
|
|
|
Start recording a trace before performing actions. At the end, stop tracing and save it to a file.
|
|
|
|
```js
|
|
const browser = await chromium.launch();
|
|
const context = await browser.newContext();
|
|
await context.tracing.start({ screenshots: true, snapshots: true });
|
|
const page = await context.newPage();
|
|
await page.goto('https://playwright.dev');
|
|
await context.tracing.stop({ path: 'trace.zip' });
|
|
```
|
|
|
|
```java
|
|
Browser browser = chromium.launch();
|
|
BrowserContext context = browser.newContext();
|
|
context.tracing().start(new Tracing.StartOptions()
|
|
.setScreenshots(true)
|
|
.setSnapshots(true));
|
|
Page page = context.newPage();
|
|
page.navigate("https://playwright.dev");
|
|
context.tracing().stop(new Tracing.StopOptions()
|
|
.setPath(Paths.get("trace.zip")));
|
|
```
|
|
|
|
```python async
|
|
browser = await chromium.launch()
|
|
context = await browser.new_context()
|
|
await context.tracing.start(screenshots=True, snapshots=True)
|
|
page = await context.new_page()
|
|
await page.goto("https://playwright.dev")
|
|
await context.tracing.stop(path = "trace.zip")
|
|
```
|
|
|
|
```python sync
|
|
browser = chromium.launch()
|
|
context = browser.new_context()
|
|
context.tracing.start(screenshots=True, snapshots=True)
|
|
page = context.new_page()
|
|
page.goto("https://playwright.dev")
|
|
context.tracing.stop(path = "trace.zip")
|
|
```
|
|
|
|
```csharp
|
|
using var playwright = await Playwright.CreateAsync();
|
|
var browser = await playwright.Chromium.LaunchAsync();
|
|
await using var context = await browser.NewContextAsync();
|
|
await context.Tracing.StartAsync(new()
|
|
{
|
|
Screenshots = true,
|
|
Snapshots = true
|
|
});
|
|
var page = await context.NewPageAsync();
|
|
await page.GotoAsync("https://playwright.dev");
|
|
await context.Tracing.StopAsync(new()
|
|
{
|
|
Path = "trace.zip"
|
|
});
|
|
```
|
|
|
|
## async method: Tracing.start
|
|
* since: v1.12
|
|
|
|
Start tracing.
|
|
|
|
**Usage**
|
|
|
|
```js
|
|
await context.tracing.start({ screenshots: true, snapshots: true });
|
|
const page = await context.newPage();
|
|
await page.goto('https://playwright.dev');
|
|
await context.tracing.stop({ path: 'trace.zip' });
|
|
```
|
|
|
|
```java
|
|
context.tracing().start(new Tracing.StartOptions()
|
|
.setScreenshots(true)
|
|
.setSnapshots(true));
|
|
Page page = context.newPage();
|
|
page.navigate("https://playwright.dev");
|
|
context.tracing().stop(new Tracing.StopOptions()
|
|
.setPath(Paths.get("trace.zip")));
|
|
```
|
|
|
|
```python async
|
|
await context.tracing.start(screenshots=True, snapshots=True)
|
|
page = await context.new_page()
|
|
await page.goto("https://playwright.dev")
|
|
await context.tracing.stop(path = "trace.zip")
|
|
```
|
|
|
|
```python sync
|
|
context.tracing.start(screenshots=True, snapshots=True)
|
|
page = context.new_page()
|
|
page.goto("https://playwright.dev")
|
|
context.tracing.stop(path = "trace.zip")
|
|
```
|
|
|
|
```csharp
|
|
using var playwright = await Playwright.CreateAsync();
|
|
var browser = await playwright.Chromium.LaunchAsync();
|
|
await using var context = await browser.NewContextAsync();
|
|
await context.Tracing.StartAsync(new()
|
|
{
|
|
Screenshots = true,
|
|
Snapshots = true
|
|
});
|
|
var page = await context.NewPageAsync();
|
|
await page.GotoAsync("https://playwright.dev");
|
|
await context.Tracing.StopAsync(new()
|
|
{
|
|
Path = "trace.zip"
|
|
});
|
|
```
|
|
|
|
### option: Tracing.start.name
|
|
* since: v1.12
|
|
- `name` <[string]>
|
|
|
|
If specified, intermediate trace files are going to be saved into the files with the
|
|
given name prefix inside the [`option: BrowserType.launch.tracesDir`] directory specified in [`method: BrowserType.launch`].
|
|
To specify the final trace zip file name, you need to pass `path` option to
|
|
[`method: Tracing.stop`] instead.
|
|
|
|
### option: Tracing.start.screenshots
|
|
* since: v1.12
|
|
- `screenshots` <[boolean]>
|
|
|
|
Whether to capture screenshots during tracing. Screenshots are used to build
|
|
a timeline preview.
|
|
|
|
### option: Tracing.start.snapshots
|
|
* since: v1.12
|
|
- `snapshots` <[boolean]>
|
|
|
|
If this option is true tracing will
|
|
* capture DOM snapshot on every action
|
|
* record network activity
|
|
|
|
### option: Tracing.start.sources
|
|
* since: v1.17
|
|
* langs: js, csharp, python
|
|
- `sources` <[boolean]>
|
|
|
|
Whether to include source files for trace actions.
|
|
|
|
### option: Tracing.start.sources
|
|
* since: v1.17
|
|
* langs: java
|
|
- `sources` <[boolean]>
|
|
|
|
Whether to include source files for trace actions. List of the directories with source code for the application
|
|
must be provided via `PLAYWRIGHT_JAVA_SRC` environment variable (the paths should be separated by ';' on Windows
|
|
and by ':' on other platforms).
|
|
|
|
### option: Tracing.start.title
|
|
* since: v1.17
|
|
- `title` <[string]>
|
|
|
|
Trace name to be shown in the Trace Viewer.
|
|
|
|
## async method: Tracing.startChunk
|
|
* since: v1.15
|
|
|
|
Start a new trace chunk. If you'd like to record multiple traces on the same [BrowserContext], use [`method: Tracing.start`] once, and then create multiple trace chunks with [`method: Tracing.startChunk`] and [`method: Tracing.stopChunk`].
|
|
|
|
**Usage**
|
|
|
|
```js
|
|
await context.tracing.start({ screenshots: true, snapshots: true });
|
|
const page = await context.newPage();
|
|
await page.goto('https://playwright.dev');
|
|
|
|
await context.tracing.startChunk();
|
|
await page.getByText('Get Started').click();
|
|
// Everything between startChunk and stopChunk will be recorded in the trace.
|
|
await context.tracing.stopChunk({ path: 'trace1.zip' });
|
|
|
|
await context.tracing.startChunk();
|
|
await page.goto('http://example.com');
|
|
// Save a second trace file with different actions.
|
|
await context.tracing.stopChunk({ path: 'trace2.zip' });
|
|
```
|
|
|
|
```java
|
|
context.tracing().start(new Tracing.StartOptions()
|
|
.setScreenshots(true)
|
|
.setSnapshots(true));
|
|
Page page = context.newPage();
|
|
page.navigate("https://playwright.dev");
|
|
|
|
context.tracing().startChunk();
|
|
page.getByText("Get Started").click();
|
|
// Everything between startChunk and stopChunk will be recorded in the trace.
|
|
context.tracing().stopChunk(new Tracing.StopChunkOptions()
|
|
.setPath(Paths.get("trace1.zip")));
|
|
|
|
context.tracing().startChunk();
|
|
page.navigate("http://example.com");
|
|
// Save a second trace file with different actions.
|
|
context.tracing().stopChunk(new Tracing.StopChunkOptions()
|
|
.setPath(Paths.get("trace2.zip")));
|
|
```
|
|
|
|
```python async
|
|
await context.tracing.start(screenshots=True, snapshots=True)
|
|
page = await context.new_page()
|
|
await page.goto("https://playwright.dev")
|
|
|
|
await context.tracing.start_chunk()
|
|
await page.get_by_text("Get Started").click()
|
|
# Everything between start_chunk and stop_chunk will be recorded in the trace.
|
|
await context.tracing.stop_chunk(path = "trace1.zip")
|
|
|
|
await context.tracing.start_chunk()
|
|
await page.goto("http://example.com")
|
|
# Save a second trace file with different actions.
|
|
await context.tracing.stop_chunk(path = "trace2.zip")
|
|
```
|
|
|
|
```python sync
|
|
context.tracing.start(screenshots=True, snapshots=True)
|
|
page = context.new_page()
|
|
page.goto("https://playwright.dev")
|
|
|
|
context.tracing.start_chunk()
|
|
page.get_by_text("Get Started").click()
|
|
# Everything between start_chunk and stop_chunk will be recorded in the trace.
|
|
context.tracing.stop_chunk(path = "trace1.zip")
|
|
|
|
context.tracing.start_chunk()
|
|
page.goto("http://example.com")
|
|
# Save a second trace file with different actions.
|
|
context.tracing.stop_chunk(path = "trace2.zip")
|
|
```
|
|
|
|
```csharp
|
|
using var playwright = await Playwright.CreateAsync();
|
|
var browser = await playwright.Chromium.LaunchAsync();
|
|
await using var context = await browser.NewContextAsync();
|
|
await context.Tracing.StartAsync(new()
|
|
{
|
|
Screenshots = true,
|
|
Snapshots = true
|
|
});
|
|
var page = await context.NewPageAsync();
|
|
await page.GotoAsync("https://playwright.dev");
|
|
|
|
await context.Tracing.StartChunkAsync();
|
|
await page.GetByText("Get Started").ClickAsync();
|
|
// Everything between StartChunkAsync and StopChunkAsync will be recorded in the trace.
|
|
await context.Tracing.StopChunkAsync(new()
|
|
{
|
|
Path = "trace1.zip"
|
|
});
|
|
|
|
await context.Tracing.StartChunkAsync();
|
|
await page.GotoAsync("http://example.com");
|
|
// Save a second trace file with different actions.
|
|
await context.Tracing.StopChunkAsync(new()
|
|
{
|
|
Path = "trace2.zip"
|
|
});
|
|
```
|
|
|
|
### option: Tracing.startChunk.title
|
|
* since: v1.17
|
|
- `title` <[string]>
|
|
|
|
Trace name to be shown in the Trace Viewer.
|
|
|
|
### option: Tracing.startChunk.name
|
|
* since: v1.32
|
|
- `name` <[string]>
|
|
|
|
If specified, intermediate trace files are going to be saved into the files with the
|
|
given name prefix inside the [`option: BrowserType.launch.tracesDir`] directory specified in [`method: BrowserType.launch`].
|
|
To specify the final trace zip file name, you need to pass `path` option to
|
|
[`method: Tracing.stopChunk`] instead.
|
|
|
|
## async method: Tracing.group
|
|
* since: v1.49
|
|
|
|
:::caution
|
|
Use `test.step` instead when available.
|
|
:::
|
|
|
|
Creates a new group within the trace, assigning any subsequent API calls to this group, until [`method: Tracing.groupEnd`] is called. Groups can be nested and will be visible in the trace viewer.
|
|
|
|
**Usage**
|
|
|
|
```js
|
|
// use test.step instead
|
|
await test.step('Log in', async () => {
|
|
// ...
|
|
});
|
|
```
|
|
|
|
```java
|
|
// All actions between group and groupEnd
|
|
// will be shown in the trace viewer as a group.
|
|
page.context().tracing.group("Open Playwright.dev > API");
|
|
page.navigate("https://playwright.dev/");
|
|
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("API")).click();
|
|
page.context().tracing.groupEnd();
|
|
```
|
|
|
|
```python sync
|
|
# All actions between group and group_end
|
|
# will be shown in the trace viewer as a group.
|
|
page.context.tracing.group("Open Playwright.dev > API")
|
|
page.goto("https://playwright.dev/")
|
|
page.get_by_role("link", name="API").click()
|
|
page.context.tracing.group_end()
|
|
```
|
|
|
|
```python async
|
|
# All actions between group and group_end
|
|
# will be shown in the trace viewer as a group.
|
|
await page.context.tracing.group("Open Playwright.dev > API")
|
|
await page.goto("https://playwright.dev/")
|
|
await page.get_by_role("link", name="API").click()
|
|
await page.context.tracing.group_end()
|
|
```
|
|
|
|
```csharp
|
|
// All actions between GroupAsync and GroupEndAsync
|
|
// will be shown in the trace viewer as a group.
|
|
await Page.Context().Tracing.GroupAsync("Open Playwright.dev > API");
|
|
await Page.GotoAsync("https://playwright.dev/");
|
|
await Page.GetByRole(AriaRole.Link, new() { Name = "API" }).ClickAsync();
|
|
await Page.Context().Tracing.GroupEndAsync();
|
|
```
|
|
|
|
### param: Tracing.group.name
|
|
* since: v1.49
|
|
- `name` <[string]>
|
|
|
|
Group name shown in the trace viewer.
|
|
|
|
### option: Tracing.group.location
|
|
* since: v1.49
|
|
- `location` ?<[Object]>
|
|
- `file` <[string]>
|
|
- `line` ?<[int]>
|
|
- `column` ?<[int]>
|
|
|
|
Specifies a custom location for the group to be shown in the trace viewer. Defaults to the location of the [`method: Tracing.group`] call.
|
|
|
|
## async method: Tracing.groupEnd
|
|
* since: v1.49
|
|
|
|
Closes the last group created by [`method: Tracing.group`].
|
|
|
|
## async method: Tracing.stop
|
|
* since: v1.12
|
|
|
|
Stop tracing.
|
|
|
|
### option: Tracing.stop.path
|
|
* since: v1.12
|
|
- `path` <[path]>
|
|
|
|
Export trace into the file with the given path.
|
|
|
|
## async method: Tracing.stopChunk
|
|
* since: v1.15
|
|
|
|
Stop the trace chunk. See [`method: Tracing.startChunk`] for more details about multiple trace chunks.
|
|
|
|
### option: Tracing.stopChunk.path
|
|
* since: v1.15
|
|
- `path` <[path]>
|
|
|
|
Export trace collected since the last [`method: Tracing.startChunk`] call into the file with the given path.
|