Skip to content
Testing
Skill

/webapp-selenium-testing

Author and maintain versioned Selenium WebDriver tests with Java and JUnit 5. Use for creating, debugging, or running Selenium specs, implementing Page Objects, handling explicit waits, capturing screenshots, or setting up Maven test projects. Supports Chrome, Firefox, and Edge.

From plugin
test-automation-skills-agents
2159 skills7 agents
Install
$ npx -y skills add fugazi/test-automation-skills-agents --skill webapp-selenium-testing --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/webapp-selenium-testing

Context preview

The summary Claude sees to decide when to auto-load this skill.

Author and maintain versioned Selenium WebDriver tests with Java and JUnit 5. Use for creating, debugging, or running Selenium specs, implementing Page Objects, handling explicit waits, capturing screenshots, or setting up Maven test projects. Supports Chrome, Firefox, and Edge.

SKILL.md

webapp-selenium-testing.SKILL.md
name: webapp-selenium-testing
description: 'Author and maintain versioned Selenium WebDriver tests with Java and JUnit 5. Use for creating, debugging, or running Selenium specs, implementing Page Objects, handling explicit waits, capturing screenshots, or setting up Maven test projects. Supports Chrome, Firefox, and Edge. Keywords: Selenium WebDriver, Java, JUnit 5, Page Object Model, explicit waits, Maven, screenshots.'
license: 'Complete terms in LICENSE.txt'

Web Application Testing with Selenium WebDriver

This skill provides patterns and best practices for browser-based test automation using Selenium WebDriver within a Java/Maven environment.

> **Activation:** This skill is triggered when you need to create Selenium tests, debug browser automation, implement Page Objects, or set up Java test infrastructure.

When to Use This Skill

  • Create Selenium WebDriver tests with JUnit 5
  • Implement Page Object Model (POM) architecture
  • Handle synchronization with Explicit Waits
  • Verify UI behavior with AssertJ assertions
  • Debug failing browser tests or DOM interactions
  • Set up Maven test infrastructure for a new project
  • Capture screenshots for debugging
  • Validate complex user flows and form submissions
  • Test across multiple browsers (Chrome, Firefox, Edge)

Do NOT Use For

  • Playwright/TypeScript UI tests (use `playwright-e2e-testing`).
  • Driving a live browser interactively for exploration (use `playwright-cli`).
  • Standalone API/contract testing (use `api-testing`).
  • Governing a regression suite's CI tiers and sharding (use `playwright-regression-testing`).

Prerequisites

| Component | Requirement | | --------- | ------------------------------ | | Java JDK | 11 or higher (17+ recommended) | | Maven | 3.6 or higher | | Browser | Chrome, Firefox, or Edge |

> **Note:** Selenium Manager (included in Selenium 4.6+) automatically handles browser driver binaries.

---

Core Patterns

Page Object Model

Separate page interaction logic from test code:

src/
├── main/java/
│   └── com/example/
│       ├── pages/          # Page Object classes
│       │   └── LoginPage.java
│       ├── components/      # Reusable UI components
│       ├── factories/       # WebDriver factory
│       ├── utils/          # Utilities
│       └── base/           # Base classes
└── test/java/
    └── com/example/
        └── tests/          # Test classes
            └── LoginTest.java

Explicit Waits

Always use explicit waits over `Thread.sleep()`:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement element = wait.until(
    ExpectedConditions.visibilityOfElementLocated(By.id("element-id"))
);

Fluent Assertions (AssertJ)

import static org.assertj.core.api.Assertions.assertThat;

assertThat(driver.getTitle())
    .contains("Expected Title");

assertThat(errorMessage.isDisplayed())
    .as("Error message should be visible")
    .isTrue();

---

Step-by-Step Workflows

Workflow 1: Create New Selenium Test

1. **Analyze requirements**

  • Identify the user flow to test
  • List elements to interact with
  • Define expected outcomes

2. **Create Page Objects**

  • Create `BasePage` with common methods
  • Create page-specific classes with locators
  • Implement action methods

3. **Implement test class**

  • Extend base test class
  • Use `@DisplayName`, `@Tag` annotations
  • Use assertions for validations

4. **Run tests**

   mvn test -Dtest=YourTest
   mvn test -Dtest=YourTest -Dheadless=true

Workflow 2: Debug Failing Test

1. **Run in non-headless mode**

   mvn test -Dtest=FailingTest -Dheadless=false

2. **Capture screenshot on failure**

   ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

3. **Check browser console logs**

   driver.manage().logs().get(LogType.BROWSER);

4. **Verify locator in browser DevTools**

   document.querySelector('[data-testid="element"]');

5. **Adjust wait conditions** - increase timeout or change ExpectedCondition

Workflow 3: Set Up New Project

1. **Use the included setup script**

   # Run from skills/webapp-selenium-testing/scripts/
   .\setup-maven-project.ps1 -ProjectName "my-tests"

2. **Or use the pom-template.xml**

  • Copy `scripts/pom-template.xml` to your project as `pom.xml`
  • Versions are managed via BOM (Bill of Materials)

3. **Create base classes**

  • `WebDriverFactory` - creates and manages WebDriver instances
  • `BasePage` - common page interaction methods
  • `BaseTest` - setup/teardown logic

---

Best Practices Checklist

  • **Never use `Thread.sleep()`** - Use explicit waits
  • **Implement Page Object Model** - Separate locators from test logic
  • **Use assertions properly** - AssertJ for fluent syntax
  • **Prefer stable locators** - `id`, `data-testid`, semantic CSS
  • **Clean up resources** - Close driver in `@AfterEach`
  • **Keep tests independent** - Each test runs in isolation
  • **Use `@DisplayName`** - Human-readable test descriptions
  • **Capture evidence** - Screenshots on failure
  • **Test only your own application** - Never navigate to third-party or public URLs

---

Security Considerations

> This skill is designed for testing **your own application**. Navigating to third-party or > public websites introduces untrusted content into the AI-assisted session.

  • **Only test against your own app** — Use `localhost` or an internal dev/staging server.

Never hardcode external URLs (e.g. `https://some-third-party.com`) in generated tests; always read the base URL from configuration (`ConfigReader`, env vars, or `config.properties`).

  • **Avoid raw page source ingestion** — `driver.getPageSource()` returns the full HTML of the

current page. In an AI-assisted session that HTML becomes part of the AI context and can carry prompt injection

Read more
Ships withtest-automation-skills-agents

A practical library of agents, instructions, and skills designed specifically for QA Automation Engineers, focusing on production-oriented solutions.

Get the whole plugin