mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
193 lines
5.7 KiB
Markdown
193 lines
5.7 KiB
Markdown
---
|
|
id: browser-contexts
|
|
title: "Isolation"
|
|
---
|
|
|
|
Tests written with Playwright execute in isolated clean-slate environments called browser contexts. This isolation model improves reproducibility and prevents cascading test failures.
|
|
|
|
[BrowserContext]s are equivalent to incognito-like profiles, they are fast and cheap to create and completely isolated, even when running in a single browser. Playwright creates a context for each test, and provides a default [Page] in that context.
|
|
|
|
When using Playwright as a Test Runner, this happens out of the box for each test. Otherwise, you can create browser contexts manually.
|
|
|
|
```js tab=js-ts
|
|
const { test } = require('@playwright/test');
|
|
|
|
test('example test', async ({ page, context }) => {
|
|
// "context" is an isolated BrowserContext, created for this specific test.
|
|
// "page" belongs to this context.
|
|
});
|
|
|
|
test('another test', async ({ page, context }) => {
|
|
// "context" and "page" in this second test are completely
|
|
// isolated from the first test.
|
|
});
|
|
```
|
|
|
|
```js tab=js-js
|
|
import { test } from '@playwright/test';
|
|
|
|
test('example test', async ({ page, context }) => {
|
|
// "context" is an isolated BrowserContext, created for this specific test.
|
|
// "page" belongs to this context.
|
|
});
|
|
|
|
test('another test', async ({ page, context }) => {
|
|
// "context" and "page" in this second test are completely
|
|
// isolated from the first test.
|
|
});
|
|
```
|
|
|
|
```js tab=js-library
|
|
const browser = await chromium.launch();
|
|
const context = await browser.newContext();
|
|
const page = await context.newPage();
|
|
```
|
|
|
|
```java
|
|
Browser browser = chromium.launch();
|
|
BrowserContext context = browser.newContext();
|
|
Page page = context.newPage();
|
|
```
|
|
|
|
```python async
|
|
browser = await playwright.chromium.launch()
|
|
context = await browser.new_context()
|
|
page = await context.new_page()
|
|
```
|
|
|
|
```python sync
|
|
browser = playwright.chromium.launch()
|
|
context = browser.new_context()
|
|
page = context.new_page()
|
|
```
|
|
|
|
```csharp
|
|
await using var browser = playwright.Chromium.LaunchAsync();
|
|
var context = await browser.NewContextAsync();
|
|
var page = await context.NewPageAsync();
|
|
```
|
|
|
|
Browser contexts can also be used to emulate multi-page scenarios involving mobile devices, permissions, locale and color scheme. Check out our [Emulation](./emulation.md) guide for more details.
|
|
|
|
## Multiple contexts in a single test
|
|
|
|
Playwright can create multiple browser contexts within a single scenario. This is useful when you want to test for multi-user functionality, like a chat.
|
|
|
|
```js tab=js-js
|
|
import { test } from '@playwright/test';
|
|
|
|
test('admin and user', async ({ browser }) => {
|
|
// Create two isolated browser contexts
|
|
const adminContext = await browser.newContext();
|
|
const userContext = await browser.newContext();
|
|
|
|
// Create pages and interact with contexts independently
|
|
const adminPage = await adminContext.newPage();
|
|
const userPage = await userContext.newPage();
|
|
});
|
|
```
|
|
|
|
```js tab=js-ts
|
|
const { test } = require('@playwright/test');
|
|
|
|
test('admin and user', async ({ browser }) => {
|
|
// Create two isolated browser contexts
|
|
const adminContext = await browser.newContext();
|
|
const userContext = await browser.newContext();
|
|
|
|
// Create pages and interact with contexts independently
|
|
const adminPage = await adminContext.newPage();
|
|
const userPage = await userContext.newPage();
|
|
});
|
|
```
|
|
|
|
```js tab=js-library
|
|
const { chromium } = require('playwright');
|
|
|
|
// Create a Chromium browser instance
|
|
const browser = await chromium.launch();
|
|
|
|
// Create two isolated browser contexts
|
|
const userContext = await browser.newContext();
|
|
const adminContext = await browser.newContext();
|
|
|
|
// Create pages and interact with contexts independently
|
|
const adminPage = await adminContext.newPage();
|
|
const userPage = await userContext.newPage();
|
|
```
|
|
|
|
```java
|
|
import com.microsoft.playwright.*;
|
|
|
|
public class Example {
|
|
public static void main(String[] args) {
|
|
try (Playwright playwright = Playwright.create()) {
|
|
BrowserType chromium = playwright.chromium();
|
|
// Create a Chromium browser instance
|
|
Browser browser = chromium.launch();
|
|
// Create two isolated browser contexts
|
|
BrowserContext userContext = browser.newContext();
|
|
BrowserContext adminContext = browser.newContext();
|
|
// Create pages and interact with contexts independently
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
```python async
|
|
import asyncio
|
|
from playwright.async_api import async_playwright
|
|
|
|
async def run(playwright):
|
|
# create a chromium browser instance
|
|
chromium = playwright.chromium
|
|
browser = await chromium.launch()
|
|
|
|
# create two isolated browser contexts
|
|
user_context = await browser.new_context()
|
|
admin_context = await browser.new_context()
|
|
|
|
# create pages and interact with contexts independently
|
|
|
|
async def main():
|
|
async with async_playwright() as playwright:
|
|
await run(playwright)
|
|
asyncio.run(main())
|
|
```
|
|
|
|
```python sync
|
|
from playwright.sync_api import sync_playwright
|
|
|
|
def run(playwright):
|
|
# create a chromium browser instance
|
|
chromium = playwright.chromium
|
|
browser = chromium.launch()
|
|
|
|
# create two isolated browser contexts
|
|
user_context = browser.new_context()
|
|
admin_context = browser.new_context()
|
|
|
|
# create pages and interact with contexts independently
|
|
|
|
with sync_playwright() as playwright:
|
|
run(playwright)
|
|
```
|
|
|
|
```csharp
|
|
using Microsoft.Playwright;
|
|
using System.Threading.Tasks;
|
|
|
|
class Program
|
|
{
|
|
public static async Task Main()
|
|
{
|
|
using var playwright = await Playwright.CreateAsync();
|
|
// Create a Chromium browser instance
|
|
await using var browser = await playwright.Chromium.LaunchAsync();
|
|
await using var userContext = await browser.NewContextAsync();
|
|
await using var adminContext = await browser.NewContextAsync();
|
|
// Create pages and interact with contexts independently.
|
|
}
|
|
}
|
|
```
|