Skip to main content
Automation TestingBlogsPlaywright Category

Advanced Guide to React Components Testing Using Playwright 

By March 25, 2025No Comments5 min read
Advanced Guide to React Components Testing Using Playwright

Is your React app as flawless in functionality as it looks? Previously, we explored how Playwright ensures pixel-perfect visual testing—but functional stability is just as critical. A visually appealing interface means little if buttons don’t respond, forms fail validation, or components break under real-world conditions. 

Playwright isn’t just another test automation tool—it’s a powerhouse for end-to-end testing, offering robust cross-browser support, lightning-fast execution, and deep debugging capabilities. When paired with React, it enables seamless UI validation, ensuring that components work exactly as intended. 

In this guide, we’ll take a deep dive into setting up and testing React components with Playwright, covering everything from environment configuration to best practices for writing maintainable and scalable test cases. 

Playwright is designed for modern web applications, offering several advantages over traditional testing tools: 

  • Comprehensive Cross-Browser Testing: Supports Chromium, Firefox, and WebKit for a consistent experience across browsers. 
  • Native Headless Mode: Enables faster execution by running tests without rendering UI elements. 
  • Auto-Waiting & Retries: Ensures stable tests by automatically handling asynchronous rendering and network delays. 
  • Parallel Execution & Sharding: Drastically reduces test run time, ideal for large-scale applications. 
  • Seamless CI/CD Integration: Works effortlessly with GitHub Actions, Jenkins, CircleCI, and other CI/CD pipelines. 
  • Enhanced Debugging Tools: Features such as playwright trace viewer and time-travel debugging help analyze test failures effectively. 

Before testing a React component with Playwright, you need to set up a proper React environment. 

Step 1: Create a React Component 

Let’s create a simple Button component that we will test: 

import React from ‘react’; 

interface ButtonProps { 

  label: string; 

  onClick: () => void; 

  disabled?: boolean; 

const Button: React.FC<ButtonProps> = ({ label, onClick, disabled = false }) => { 

  return ( 

    <button  

      onClick={onClick}  

      disabled={disabled}  

      aria-disabled={disabled}  

      className={`btn ${disabled ? ‘btn-disabled’ : ‘btn-primary’}`} 

    > 

      {disabled ? ‘Disabled’ : label} 

    </button> 

  ); 

}; 

export default Button; 

Step 2: Install Playwright and Required Dependencies 

Ensure that Node.js is installed, then install Playwright along with Testing Library and Jest for assertions: 

npm init playwright@latest 

npm install @testing-library/react @playwright/test jest 

Step 3: Configure Playwright for React 

import { defineConfig } from ‘@playwright/test’; 

export default defineConfig({ 

  testDir: ‘./tests’, 

  retries: 2, // Retries failed tests twice in CI 

  use: { 

    headless: true, 

    baseURL: ‘http://localhost:3000’, 

    viewport: { width: 1280, height: 720 }, 

    trace: ‘on’, // Enables trace viewer for debugging 

    video: ‘retain-on-failure’, // Captures video for failed tests 

    screenshot: ‘only-on-failure’, // Capture screenshots only when tests fail 

  }, 

  projects: [‘chromium’, ‘firefox’, ‘webkit’].map((browser) => ({ 

    name: browser, 

    use: { browserName: browser }, 

  })), 

}); 

Now that we have a React component and Playwright configured, let’s create an actual test. 

Step 1: Writing a Playwright Test for the Button Component 

Create a test file button.test.ts inside the tests folder and write the following test: 

import { test, expect } from ‘@playwright/test’; 

import { render, screen, fireEvent } from ‘@testing-library/react’; 

import Button from ‘../components/Button’; 

test(‘validates button click event and disabled state’, async () => { 

  const handleClick = jest.fn(); 

  const { rerender } = render(<Button label=”Submit” onClick={handleClick} disabled={false} />); 

  const button = screen.getByRole(‘button’, { name: ‘Submit’ }); 

  await expect(button).toBeEnabled(); 

  fireEvent.click(button); 

  expect(handleClick).toHaveBeenCalledTimes(1); 

  // Rerender with disabled state 

  rerender(<Button label=”Submit” onClick={handleClick} disabled />); 

  const disabledButton = screen.getByRole(‘button’, { name: ‘Disabled’ }); 

  await expect(disabledButton).toBeDisabled(); 

}); 

Step 2: Running the Test 

To run all tests, use the following command: 

npx playwright test 

To debug specific tests interactively: 

npx playwright test –debug 

To run tests in a specific browser: 

npx playwright test –project=firefox 

To view test execution history: 

npx playwright show-trace 

  1. Use getByRole Over getByText: This ensures semantic correctness and improves accessibility checks. 
  1. Leverage Auto-Waiting: Playwright automatically waits for elements to be available before interacting, reducing flaky tests. 
  1. Test for Edge Cases: Validate user interactions, including disabled states, unexpected inputs, and error handling. 
  1. Run Tests in Parallel: Playwright supports parallel test execution, which can be configured for optimal speed. 
  1. Integrate Debugging Tools: Use trace viewer and video capture to diagnose and troubleshoot failed tests. 
  1. Mock API Calls and Network Requests: Playwright allows intercepting network requests to simulate API responses, making UI tests more stable. 

Example of mocking an API request: 

test(‘mocks API response in component test’, async ({ page }) => { 

 await page.route(‘**/api/data’, async (route) => {  

await route.fulfill({ 

status: 200, 

 headers: { ‘Content-Type’: ‘application/json’ },  

body: JSON.stringify({ message: ‘Success’ }),  

}); 

 }); 

await page.goto(‘/dashboard’); 
 
const messageLocator = page.getByText(‘Success’); 
await expect(messageLocator).toBeVisible(); 

}); 

Robust testing is the backbone of a high-quality React application, and Playwright empowers developers to validate components with confidence. With its intelligent auto-waiting, parallel execution, and seamless debugging, Playwright goes beyond basic UI testing to provide a rock-solid validation framework. 

By integrating Playwright into your testing workflow, you ensure that every component in your React application functions as expected—under different browsers, environments, and edge cases. Embrace Playwright’s capabilities to build resilient applications and accelerate software delivery with unparalleled confidence. 

Get in touch with us!

At Testrig Technologies, we specialize in delivering top-tier Web Automation Testing Services, including advanced Playwright testing for React applications. Our expert team ensures your applications are robust, scalable, and user-ready. Whether you need component testing, end-to-end validation, or CI/CD integration, Testrig Technologies provides tailored QA solutions to meet your quality assurance needs.