When it comes to using locators in @playwright/test, there are a few best practices you should follow.
Firstly, prefer user-facing attributes over XPath or CSS selectors. The DOM can change, and relying on its structure can lead to failing tests. For instance, if a button's CSS class changes, your test might break.
// Instead of this
const button = page.locator('.submit-button');
// Do this
const button = page.locator('[role="button"]');Secondly, use chaining and filtering when selecting elements. You can chain locators to narrow down the search or filter locators by text or another locator.
// Chaining locators
const buttonInForm = page.locator('form').locator('[role="button"]');
// Filtering locators
const buttonWithText = page.locator('[role="button"]').withText('Submit');Playwright's codegen feature can generate tests and pick locators for you. It prioritizes role, text, and test id locators, making your tests more resilient.
// Run this command in your terminal
npx playwright codegen https://ray.runFinally, Playwright provides several new selector engines, like the nth selector engine and the visible selector engine. These can be combined with other selector engines for more precise element selection.
// Using nth selector engine
const thirdListItem = page.locator('li:nth(3)');
// Using visible selector engine
const visibleDiv = page.locator('div:visible');By following these practices, you can create robust automated testing scripts that can handle changes in web pages' structures over time.
If you still have questions, please ask a question and I will try to answer it.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email luc@ray.run.