Skip to main content

Understand browser, context, and page in Playwright

๐ŸŽฅ Playwright: Browser, Context & Page - Real-time Demo and Multi-User Testing

 .


๐ŸŽฏ Goal: Understand browser, context, and page in Playwright


๐Ÿง  1. What is a browser?

✅ Definition:

A browser in Playwright is a launched instance of a real browser (Chromium, Firefox, WebKit) that can be used for automated testing.

✅ Purpose:

  • It starts and controls the browser process.

  • It is the root of your test execution.

  • Required to create contexts and pages.

✅ Code Example:

ts
import { chromium } from 'playwright'; const browser = await chromium.launch({ headless: false });

๐Ÿง  2. What is a context (browser context)?

✅ Definition:

A context is like a separate browser profile (or incognito tab) inside the browser. Each context is isolated — no cookies, local storage, or sessions are shared.

✅ Purpose:

  • Simulates multiple users or sessions.

  • Enables parallel and isolated testing.

  • Allows setting user-specific preferences (geo, locale, permissions).

✅ Code Example:

ts
const context = await browser.newContext(); // new user session

You can have multiple contexts in one browser instance.


๐Ÿง  3. What is a page?

✅ Definition:

A page is a tab or window inside a context. It’s where all browser interactions happen — like navigating, clicking, typing, or making assertions.

✅ Purpose:

  • Used to interact with the web app under test.

  • Simulates a user's browser tab.

✅ Code Example:

ts
const page = await context.newPage(); // open a new tab await page.goto('https://example.com'); await page.click('#login');

๐Ÿ”„ Full Flow Summary: browser ➝ context ➝ page

css
[Browser][Context][Page] ๐Ÿง  ๐Ÿง‍♂️ ๐Ÿ–ฅ️ Launch Isolated Session Interact with App

๐Ÿ’ก Real Example: Login Flow

ts
import { chromium } from 'playwright'; (async () => { // Step 1: Launch browser const browser = await chromium.launch({ headless: false }); // Step 2: Create a context (isolated session) const context = await browser.newContext(); // Step 3: Open a page (tab) const page = await context.newPage(); // Step 4: Interact with the page await page.goto('https://example.com/login'); await page.fill('#username', 'testuser'); await page.fill('#password', 'password123'); await page.click('text=Login'); // Step 5: Assert login success await page.waitForSelector('#dashboard'); // Step 6: Close browser await browser.close(); })();

๐Ÿงช Why Use context?

Let’s say you want to test multiple users in parallel:

ts
const user1 = await browser.newContext(); const user2 = await browser.newContext(); // user1 logs in const page1 = await user1.newPage(); await page1.goto('/login'); // ... // user2 logs in const page2 = await user2.newPage(); await page2.goto('/login'); // ...

Each context has its own storage — like two separate incognito windows!


✅ Key Takeaways

TermDescriptionReal-Life Analogy
browserBrowser instance (e.g., Chromium)Opening Chrome manually
contextSeparate, isolated browser profile/sessionA new incognito window
pageA tab or window to interact with the siteA single tab in the browser

Comments

Popular posts from this blog

Step-by-Step: Launch Browser, Context, and Page in Playwright and Run Test and Configuration (JavaScript)

๐ŸŽฅ Setup Browser, Context, Page & Run Config Test Scripts with package.json & playwright.config.js Step-by-Step: Launch Browser, Context, and Page in Playwright and Run Test and Configuration (JavaScript) 1. Install Playwright You can install Playwright using the following command: npm init playwright@latest 2. Create a Basic Test Script Understand the core Playwright architecture: Element Description browser Controls the browser instance (like Chrome, Firefox, etc.) context Acts like a separate browser profile (cookies, localStorage are isolated) page A single browser tab where interaction happens 3. Run the Test npx playwright test example.spec.js Ways to Run TypeScript Tests Way Command Notes ๐ŸŸข Via npx npx playwright test Uses built-in TypeScript support ๐ŸŸข With s...

Playwright Test Structure in Details -Session-02

๐ŸŽฅ Playwright: test.only, Hooks & Grouping with test.describe Explained Let’s go step-by-step , showing how to build from a single test , to using beforeEach / afterEach , and then organizing things with test.describe . ✅ Step 1: Basic Single Test with test.only import { test, expect } from '@playwright/test' ; test. only ( '๐Ÿš€ Basic test - check title' , async ({ page }) => { await page. goto ( 'https://example.com' ); await expect (page). toHaveTitle ( /Example Domain/ ); }); test.only ensures only this test runs — great for debugging. ✅ Step 2: Add beforeEach and afterEach import { test, expect } from '@playwright/test' ; test. beforeEach ( async ({ page }) => { console . log ( '๐Ÿ”„ Setting up before each test' ); await page. goto ( 'https://example.com' ); }); test. afterEach ( async ({ page }, testInfo) => { console . log ( `๐Ÿ“ฆ Finished test: ${testInfo.title} `); }); test. only ( ...

Playwright Locators in JavaScript (Complete Guide)

๐ŸŽฏ Playwright Locators in JavaScript (Complete Guide) This guide explains each Playwright locator with: ✅ What it is ๐Ÿ• When to use ⚙️ How to use it ๐ŸŽฏ Benefits ๐Ÿงช Code Examples ๐Ÿ”น 1. Locator by ID ✅ What: Selects an element with a unique id . ๐Ÿ• When: Element has a unique id . ⚙️ How: page.locator('#username') ๐ŸŽฏ Benefit: Fast and reliable. <input id="username" /> await page.locator('#username').fill('John'); ๐Ÿ”น 2. Locator by Class ✅ What: Selects by class . ๐Ÿ• When: Repeated or styled elements. ⚙️ How: page.locator('.password') ๐ŸŽฏ Benefit: Useful for shared styling. <input class="password" /> await page.locator('.password').fill('12345'); ๐Ÿ”น 3. Locator by Text ✅ What: Matches visible element text. ๐Ÿ• When: For buttons, links, etc. ⚙️ How: page.getByText('Login') ๐ŸŽฏ Benefit: Human-readable. <button>Login...