Locator Fundamentals

Loading concept...

Finding Elements: Locator Fundamentals in Playwright

The Treasure Hunt Analogy

Imagine you’re a pirate captain with a magic map. The map doesn’t just show where treasure is buried—it gives you special commands to find exactly what you need on any island (webpage).

These magic commands are called Locators. They’re your treasure-finding spells!


What is a Locator?

A Locator is like giving directions to find something on a webpage.

Simple Example:

  • You tell your friend: “Find the red button near the top of the page
  • Your friend looks around and finds it!
  • A Locator does the same thing—but for computers

Real Life:

  • Finding the “Login” button on a website = Locator
  • Finding the search box to type in = Locator
  • Finding your profile picture to click = Locator

Think of it this way:

A Locator is like an address for elements on a webpage. Just like your home address helps the mailman find your house, a Locator helps Playwright find buttons, text boxes, and links!


The page.locator() Method

This is your main treasure-finding spell!

How It Works:

// Basic formula
page.locator('your-directions-here')

// Find a button
page.locator('button')

// Find something with a specific ID
page.locator('#login-button')

// Find something with a class
page.locator('.submit-btn')

The Magic Pattern:

graph TD A[🎯 page.locator] --> B[Give it directions] B --> C[It finds the element] C --> D[Now you can click, type, read!]

Real Examples:

// Find and click a button
await page.locator('button').click()

// Find a text box and type
await page.locator('#search').fill('cats')

// Find and read text
const text = await page.locator('h1').textContent()

Why is this cool?

page.locator() doesn’t immediately search. It creates a “recipe” for finding something. Playwright only looks when you actually need it—like .click() or .fill().


CSS Selectors: The Universal Language

CSS Selectors are the most common way to give directions. They’re like describing someone by what they wear!

The 4 Essential CSS Selectors:

1. Tag Name (What type of element)

// Find all buttons
page.locator('button')

// Find all input boxes
page.locator('input')

// Find all links
page.locator('a')

Analogy: “Find me a dog” (any dog!)


2. ID Selector (The unique name)

// Use # before the ID
page.locator('#username')
page.locator('#submit-button')
page.locator('#main-header')

Analogy: “Find the dog named Max” (there’s only one Max!)

IDs are like social security numbers—each element should have a unique one!


3. Class Selector (The group name)

// Use . before the class
page.locator('.btn')
page.locator('.error-message')
page.locator('.nav-link')

Analogy: “Find a dog wearing a red collar” (could be many!)


4. Combining Selectors (Be more specific!)

// Tag + Class
page.locator('button.primary')

// Tag + ID
page.locator('input#email')

// Multiple classes
page.locator('.btn.large.blue')

// Parent > Child
page.locator('form > button')

// Descendant (anywhere inside)
page.locator('div button')

Analogy: “Find a golden retriever wearing a red collar in the park


CSS Selector Cheat Table:

Pattern Meaning Example
tag Element type button
#id Unique identifier #login
.class Group/style name .active
tag.class Specific combo button.submit
parent child Inside parent form input
parent > child Direct child ul > li

XPath Selectors: The Detailed Directions

XPath is like giving turn-by-turn directions instead of just an address. More words, but super precise!

When to Use XPath:

  • CSS can’t find what you need
  • You need to find by text content
  • You need to go backwards (from child to parent)

Basic XPath Patterns:

// Find by exact text
page.locator('//button[text()="Submit"]')

// Find by partial text (contains)
page.locator('//button[contains(text(),"Sign")]')

// Find by attribute
page.locator('//input[@type="email"]')

// Find by ID (XPath style)
page.locator('//div[@id="main"]')

XPath vs CSS - Quick Compare:

graph TD A[Need to Find Element?] --> B{What info do you have?} B -->|ID, Class, Tag| C[Use CSS ✅] B -->|Text Content| D[Use XPath ✅] B -->|Parent from Child| E[Use XPath ✅] C --> F[Faster & Simpler] D --> G[More Flexible] E --> G

XPath Examples Explained:

Finding by Text:

// Button that says exactly "Login"
page.locator('//button[text()="Login"]')

// Link containing word "Learn"
page.locator('//a[contains(text(),"Learn")]')

Analogy: “Find the sign that says ‘Exit’


Finding by Attribute:

// Input with type="password"
page.locator('//input[@type="password"]')

// Div with class containing "error"
page.locator('//div[contains(@class,"error")]')

// Any element with data-testid
page.locator('//*[@data-testid="submit"]')

Analogy: “Find the door with the ‘Staff Only’ sign


XPath Axes (Going in different directions):

// Find parent of an element
page.locator('//span[@class="icon"]/parent::button')

// Find following sibling
page.locator('//label[@for="email"]/following-sibling::input')

Putting It All Together

The Complete Picture:

graph TD A[🎯 Finding Elements] --> B[page.locator] B --> C{Choose Your Weapon} C --> D[CSS Selectors] C --> E[XPath Selectors] D --> F[#id .class tag] E --> G[//path text attr] F --> H[Fast & Clean] G --> I[Powerful & Precise]

Best Practices:

  1. Start with CSS - It’s simpler and faster
  2. Use IDs when available - Most reliable
  3. Switch to XPath for text-based finding
  4. Be specific enough - Don’t be too broad or too narrow

Quick Decision Guide:

Scenario Use This
Element has ID #myId
Element has class .myClass
Need exact text XPath text()=
Need partial text XPath contains()
Simple structure CSS
Complex navigation XPath

Your New Superpowers!

You now know how to:

  • Create Locators with page.locator()
  • Use CSS Selectors for quick, clean finding
  • Use XPath when you need extra power

Remember: Locators are just addresses for web elements. Once you can find something, you can click it, type in it, read from it, and test it!

🎯 Pro Tip: Start simple. If page.locator('#submit') works, don’t make it more complicated!


Happy treasure hunting! 🏴‍☠️

Loading story...

No Story Available

This concept doesn't have a story yet.

Story Preview

Story - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

Interactive Preview

Interactive - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Interactive Content

This concept doesn't have interactive content yet.

Cheatsheet Preview

Cheatsheet - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Cheatsheet Available

This concept doesn't have a cheatsheet yet.

Quiz Preview

Quiz - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Quiz Available

This concept doesn't have a quiz yet.