Automation Playground
01

Basic Form Elements

Practise filling text, password, email, phone inputs and a textarea, then submitting and resetting a real form.

Enter a password
Status: Not submitted
02

Button Interactions

Practise single click, double click, right click, disabled buttons, a button that enables after 3s, and a self-relabelling button.

Outputs:
Single click: No click yet
Double click: Not double-clicked
Right click: Not right-clicked
03

Checkboxes & Radio Buttons

Practise toggling checkboxes, a select-all that controls them, radio groups, and a checkbox that reveals hidden text.

Colors (Checkboxes)

Select Preference (Radio Buttons)

Radio group: Selected: none

Dynamic Visibility Toggle

🔐 Secret Revealed: Playwright is awesome!
04

Dropdowns

Practise standard select, multi-select, a custom div-based dropdown, and a select populated from state.

05

Locator Practice

One element per common locator strategy plus a deeply nested tree for XPath axis practice.

Deeply nested structure for XPath axes:

Parent
Sibling 1
Target Element
Descendant Child
Sibling 2
Output: No action yet
06

Dynamic Content

Practise waiting for elements to appear/disappear, text changes, a counter, and dynamically injected content.

Waiting for delayed element...
Original text
Counter: 0
07

Waits & Synchronisation

Practise explicit waits: a spinner that becomes Loaded, delayed text, an animated progress bar, and a delayed AJAX response.

âŗ Spinner Wait

Loading spinner...

đŸ’Ŧ Delayed Text Value

Waiting...

📊 Animated Progress Bar

0%

⚡ AJAX Delay Simulation

No request sent
08

Table Automation

Practise reading rows, sorting by name, filtering with search, and paginating (page size 3).

ID Name ↕ Role Status
Page 1 of 3
Table: Click a name to edit it inline
09

Alerts

Practise handling native JS dialogs: alert, confirm and prompt.

Dialog Response: No interaction yet
10

Modals

Practise opening a modal, closing via the X or close button, and closing by clicking the overlay.

Modal Status: Closed
Delete Confirmation: No action yet
11

iFrame

Practise switching into an iframe context before interacting with the form inside it.

12

Shadow DOM

Practise piercing a shadow root: the input and button live inside a custom element's shadow DOM.

13

Drag & Drop

Practise native HTML5 drag and drop: drag the source onto the drop zone.

Drag Box

Drag Target Box
Drop Zone
Drop Status: Nothing dropped

Reorderable List

  • Item 1
  • Item 2
  • Item 3
14

Hover Menu

Practise hovering a menu item to reveal a submenu (Actions class hover/move-to-element).

Dropdown Hover Menu ▾
Active Choice: No item hovered yet
15

Tooltip

Practise triggering and reading a tooltip that appears on hover.

This is the target tooltip message!
16

File Upload

Practise uploading a file and verifying the selected file name appears.

Drag and drop a file here, or click to browse

File Status: No file selected
17

Download

Practise triggering a file download (practice.txt) and asserting on the downloaded file.

Download Status: Not downloaded
18

Hidden Elements

Practise locating elements that are in the DOM but hidden via CSS, and revealing hidden content.

Visible via visibility:hidden pierce!
Visible via opacity:0 pierce!
Cover Block Active
Visibility Status: No action yet
19

Scroll Testing

Practise scrolling a far-away element into view before asserting on it.

Scroll Down...
🚩 You scrolled to me!

Infinite Scroll List

  • Seed Item 1
  • Seed Item 2
  • Seed Item 3
  • Seed Item 4
  • Seed Item 5
  • Seed Item 6
  • Seed Item 7
  • Seed Item 8
Scroll Result: Waiting for scroll...
20

Multiple Windows

Practise switching between window/tab handles after opening a new one.

Window Status: No window opened
21

Authentication Simulation

Practise a login flow. Demo credentials: username admin, password admin123.

Auth State: Logged Out
22

Stale Element Simulation

Practise StaleElementReferenceException: the target node is replaced (new key), so a previously located reference is no longer attached.

Stale target instance #0
23

Dynamic List

Practise adding and removing items and asserting on the changing list length.

  • First item
  • Second item
24

Network Delay Simulation

Practise waiting through a simulated network delay before the response text appears.

Network Status: Idle
25

Random Fail (Flaky) Elements

Practise handling flaky outcomes: this button passes or fails roughly 50/50 each run.

Server Status: Not run yet
26

Keyboard Actions

Practise sending keys: type here and watch the last key; Arrow Up/Down change the counter. Try Enter, Tab and arrows.

Last key: None
Arrow counter: 0
27

Slider

Practise moving a range slider and reading its live value.

Value: 50
28

Date Picker

Practise selecting a date and asserting the echoed value. Use both the native HTML5 date input and the custom interactive calendar dialog picker.

Custom Calendar Dialog Picker (past dates and dates beyond 60 days out are disabled)

Chosen date: none
Chosen time: none
29

Resizable Element

Practise resizing an element by dragging its bottom-right handle.

Drag handle corner
180px x 150px
30

Complex DOM Structure

Practise advanced XPath axes and CSS combinators on a deeply nested, multi-sibling tree.

  • Node Group A
    • list leaf 1
    • list leaf 2
  • Node Group B
    • list leaf 3
    • list leaf 4

Nested Sibling Actions Table

Item Row Identifier Actions
Item Alpha ID-ALPHA
Item Beta ID-BETA
Complex Action Triggered: None
31

Autocomplete / Typeahead

Type in the search field to trigger a live suggestions dropdown. Practice waiting for dynamic options and selecting an item from an async list.

    Selected: None selected
    32

    Context Menu (Right-Click)

    Right-click the target area to open a custom context menu. Practice using page.click({ button: 'right' }) and selecting menu options.

    Right-click anywhere in this box
    Action: No action taken
    33

    Clipboard / Copy to Clipboard

    Click the copy button to capture the snippet to your clipboard. Practise reading the clipboard with Playwright's page.evaluate() or browser context grants.

    npx playwright test --headed --project=chromium
    Status: Not copied yet
    34

    Multi-Step Wizard / Stepper

    Navigate a 3-step form wizard: Personal Info → Account Setup → Review. Practice state validation across multiple steps and Next/Back button interactions.

    1
    2
    3

    Step 1: Personal Info

    Wizard: Step 1 of 3
    35

    Color Picker

    Use the native color picker to select a colour. Practice automating input[type=color] using Playwright's page.fill() with hex values like #ff6600.

    #3b82f6
    Selected color: Not applied yet
    36

    Nested iFrames

    Practise switching between multiple levels of nested iframes. An outer frame contains an inner frame — you must switch context twice to reach the deepest element.

    Challenge: Switch to outer → switch to inner → fill input → click Submit
    37

    Nested Tables

    Practise navigating complex table structures: a main data table with an expandable nested inner table per row. Use XPath row indexing and CSS nth-child selectors.

    Order ID Customer Total Status Details
    #ORD-001 Alice Johnson $142.00 Shipped
    #ORD-002 Bob Martinez $78.50 Processing
    #ORD-003 Carol Lee $219.99 Cancelled
    Expanded: No row expanded
    38

    Page Operations

    Practise page-level interactions: changing document title, reloading/refresh tracking, and handling multiple pages.

    Current Title: Automation Playground
    Last Page Load: Initializing...
    Ops Status: Ready
    39

    Bulk Links Scraper

    Practise scraping: identify, iterate, and count 100+ unique links on the page.

    Scrape Stats: 0 links verified
    40

    Infinite Scroll

    Practise infinite scrolling: scroll the container to auto-load new items and verify dynamically added DOM elements.

    Items Loaded: 0 items
    41

    Search with Debounce

    Practise waiting for asynchronous input: the search query triggers matching results after a 500ms pause.

    Search Status: Idle
    42

    Character API Call Simulation

    Practise network interception: typing each character fires a separate simulated API request instantly.

    Simulated Network Request Log:
    API Requests: 0 requests
    43

    Tabs

    Practise switching between tab panels, including a disabled tab that should never become active.

    👤 Profile settings panel content.

    Active Tab: profile
    44

    Accordion

    Practise expanding/collapsing accordion panels — multiple panels can be open at the same time.

    Open Panels: 0 open
    45

    Toggle / Switch

    Practise a checkbox visually rendered as an iOS-style toggle switch — automate it the same way as a checkbox (`.check()`/`.click()`), not by clicking a raw slider pixel.

    Enable Notifications
    Dark Mode (starts ON)
    Locked Setting (disabled)
    Notifications: off
    46

    Toast Notifications

    Practise waiting for a transient toast to appear and auto-dismiss after 3 seconds (or dismiss it manually) — an element that exists only briefly.

    Toasts Shown: 0
    47

    Dependent Dropdowns

    Practise cascading selects: choosing a Country repopulates State, which repopulates City. Each downstream select stays disabled until its parent has a value.

    Selection: none
    48

    OTP / Verification Code Input

    Practise a 6-box OTP input: typing a digit auto-advances focus to the next box; Backspace on an empty box moves focus back. Correct demo code is 123456.

    Code Status: Incomplete
    49

    Rich Text Editor

    Practise a contenteditable-based editor: select text, apply Bold/Italic/Underline formatting, and read back the resulting HTML — a different automation model than a plain input or textarea.

    Start typing here, then select text and click Bold/Italic/Underline...
    Character Count: 0 characters
    50

    Tree View

    Practise an interactive file-tree: expand/collapse folders, and check a parent node to cascade-select all its children.

    Selected Files: 0 selected
    51

    Responsive Navigation

    A self-contained nav bar that shows full links above a 640px container width, and collapses to a hamburger menu below it. Resize your browser (or use Playwright's setViewportSize) to see it switch.

    Layout Mode: desktop
    52

    Popover

    Practise a click-triggered popover (unlike Section 15's hover-only tooltip): it stays open until you click its own close button, click outside it, or press Escape.

    Popover State: closed