testing-e2e

SKILL.md

testing-e2e

Purpose

This skill enables end-to-end (E2E) testing using tools like Playwright, Cypress, and Selenium for browser automation, visual regression testing, and integration with CI/CD pipelines. It focuses on reliable test automation for web applications.

When to Use

Use this skill for full-stack testing of web apps, such as verifying user flows, UI interactions, or visual changes. Apply it in scenarios like regression testing before deployments, cross-browser compatibility checks, or when debugging UI issues in production-like environments.

Key Capabilities

  • Automate browser interactions with Playwright: Supports headless mode, tracing, and visual comparisons via expect.toHaveScreenshot().
  • Run Cypress tests: Includes real-time reloading, automatic waiting, and custom commands for assertions.
  • Implement Selenium for legacy setups: Use WebDriver to control browsers and handle dynamic content.
  • Page Object Model (POM): Structure tests with reusable page classes, e.g., define locators in a separate file.
  • Visual regression: Capture and compare screenshots using Playwright's trace viewer or Cypress plugins.
  • CI integration: Generate reports and artifacts for tools like GitHub Actions or Jenkins.

Usage Patterns

To set up E2E tests, initialize a project with the chosen tool and write tests in a dedicated directory. Always use environment variables for sensitive data, like $PLAYWRIGHT_BROWSER for browser selection.

Example 1: Playwright test for login flow

  • Create a test file: tests/login.spec.js
  • Code snippet:
    const { test } = require('@playwright/test');
    test('login success', async ({ page }) => {
      await page.goto('https://app.example.com');
      await page.fill('#username', 'user');
      await page.click('#login');
    });
    
  • Run with: npx playwright test --headed --project=chromium

Example 2: Cypress test for form submission

  • Add to cypress/integration/form.spec.js
  • Code snippet:
    describe('Form Submission', () => {
      it('submits correctly', () => {
        cy.visit('/form');
        cy.get('#name').type('Test User');
        cy.get('button[type=submit]').click();
        cy.url().should('include', '/success');
      });
    });
    
  • Execute via: npx cypress run --browser chrome --spec cypress/integration/form.spec.js

For Selenium, use WebDriver with POM: Define a page class and call methods in tests.

Common Commands/API

  • Playwright CLI: npx playwright install to setup browsers; npx playwright test --trace on for tracing; API: page.locator('selector').click() for interactions.
  • Cypress CLI: npx cypress open for interactive mode; npx cypress run --config video=true to enable videos; API: cy.get('selector').should('be.visible') for assertions.
  • Selenium setup: Use webdriverio or similar; Command: node selenium-test.js with script like driver.get('https://example.com'); Config: JSON file for WebDriver options, e.g., { "browserName": "chrome" }.
  • Visual regression: Playwright's npx playwright show-trace trace.zip to view traces; Cypress via plugins like cypress-image-snapshot.

Integration Notes

Integrate this skill into your workflow by adding it to package.json scripts, e.g., "test:e2e": "npx playwright test". For CI, use GitHub Actions with a step: run: npx cypress run --reporter junit. If API keys are needed (e.g., for cloud services), set env vars like $SELENIUM_GRID_URL or $CYPRESS_API_KEY. Ensure browsers are installed via tools like playwright install --with-deps. For multi-tool setups, use a config file like playwright.config.ts with exports for projects.

Error Handling

When tests fail, check logs first: Use Playwright's --trace flag to generate traces and debug with the trace viewer. For Cypress, enable --config video=true to capture videos. Handle common errors by adding retries, e.g., in Playwright: test('retry', { retries: 2 }, async () => { ... }). For Selenium, wrap code in try-catch blocks:

try {
  await driver.findElement(By.id('element')).click();
} catch (error) {
  console.error('Element not found:', error);
}

Assert conditions explicitly to avoid flaky tests, and use env vars for dynamic configs to prevent setup errors.

Graph Relationships

  • Cluster: Connected to "testing" cluster for related skills like unit testing or integration testing.
  • Tags: Links to skills with tags "e2e", "playwright", "cypress", and "testing".
  • Dependencies: Relates to CI/CD skills for pipeline integration and browser automation tools for execution environments.
Weekly Installs
4
First Seen
9 days ago
Installed on
openclaw4
gemini-cli4
github-copilot4
codex4
kimi-cli4
cursor4