Skip to main content

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('Check heading text', async ({ page }) => { const heading = await page.locator('h1'); await expect(heading).toHaveText('Example Domain'); });

✅ Step 3: Use test.describe to Group Tests


import { test, expect } from '@playwright/test'; test.describe('🌐 Example.com Homepage Tests', () => { test('Test 1 - Check title', async ({ page }) => { await page.goto('https://example.com'); await expect(page).toHaveTitle(/Example Domain/); }); test('Test 2 - Check heading', async ({ page }) => { await page.goto('https://example.com'); const heading = await page.locator('h1'); await expect(heading).toHaveText('Example Domain'); }); });

Now both tests are grouped logically under one label.


✅ Step 4: test.describe with beforeEach and afterEach

import { test, expect } from '@playwright/test';
test.describe('πŸ§ͺ Grouped tests with setup/teardown', () => { test.beforeEach(async ({ page }) => { console.log('πŸ”§ Running beforeEach in describe block'); await page.goto('https://example.com'); }); test.afterEach(async ({ page }, testInfo) => { console.log(`✅ Completed: ${testInfo.title}`); }); test('Test A - Page title', async ({ page }) => { await expect(page).toHaveTitle(/Example Domain/); }); test('Test B - Heading check', async ({ page }) => { const heading = await page.locator('h1'); await expect(heading).toHaveText('Example Domain'); }); });

✅ Summary Chart:

StepWhat’s ShownKey Feature
1test.only()Run single test
2beforeEach & afterEach globallySetup/teardown
3test.describe()Group related tests
4describe + beforeEach + afterEachReusable logic within group

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 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...