con un clic
playwright-frontend-testing
End-to-end frontend testing with Playwright Java and Chromium. Use for UI validation, form testing, API interaction verification, and screenshot capture on failures.
Menú
End-to-end frontend testing with Playwright Java and Chromium. Use for UI validation, form testing, API interaction verification, and screenshot capture on failures.
Test Driven Development (TDD) workflow automation for Java Spring Boot projects. Use for writing tests, checking coverage, generating test scaffolds, and implementing Red-Green-Refactor cycles with JUnit 5, Mockito, and Testcontainers.
Research Maven dependency updates with breaking changes, release notes, and security information
| name | playwright-frontend-testing |
| description | End-to-end frontend testing with Playwright Java and Chromium. Use for UI validation, form testing, API interaction verification, and screenshot capture on failures. |
End-to-end testing for vanilla JavaScript frontends using Playwright Java with Chromium.
# Ensure Playwright installed (one-time setup)
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps chromium"
# Run all frontend tests
mvn test -Dtest="*FrontendTest"
# Run specific test
mvn test -Dtest="V1DashboardFrontendTest"
# Debug with visible browser
HEADED=true mvn test -Dtest="V1DashboardFrontendTest"
Test class:
AbstractFrontendTest (provides browser, page, baseUrl)src/test/java/.../web/frontend/{Feature}FrontendTest.java@SpringBootTest(webEnvironment = RANDOM_PORT) with real backendPage Object:
public PageObject(Page page, String baseUrl)src/test/java/.../web/frontend/pages/{Feature}Page.javaExample test:
@Test
void shouldCreateSampleWhenFormSubmitted() {
// Given
DashboardPage page = new DashboardPage(this.page, baseUrl);
page.navigate();
// When
page.fillForm("Test", 42, "active");
page.submitForm();
// Then
assertThat(page.getSuccessMessage()).contains("created");
}
public class DashboardPage {
private final Page page;
private final String baseUrl;
public DashboardPage(Page page, String baseUrl) {
this.page = page;
this.baseUrl = baseUrl;
}
public void navigate() {
page.navigate(baseUrl + "/dashboard.html");
page.waitForLoadState(LoadState.NETWORKIDLE);
}
public void fillForm(String text, int number, String status) {
page.locator("#text").fill(text);
page.locator("#number").fill(String.valueOf(number));
page.locator("#status").selectOption(status);
}
public String getSuccessMessage() {
Locator msg = page.locator(".message.success");
return msg.count() > 0 ? msg.textContent() : null;
}
}
Waiting: Use Playwright's auto-waiting (built-in). For specific needs:
page.locator("#result").waitFor(); // Wait for element
page.waitForLoadState(LoadState.NETWORKIDLE); // Wait for network
Screenshots on failure: Automatic via AbstractFrontendTest.captureScreenshotOnFailure(). Files saved to target/playwright-screenshots/.
Test isolation: Each test gets fresh BrowserContext and Page (per-test cleanup in base class).
src/main/resources/static/src/test/java/.../web/frontend/pages/AbstractFrontendTestmvn test -Dtest="YourNewFrontendTest"Base test class:
@TestInstance(PER_CLASS) - Browser shared across tests (performance)@BeforeEach - Fresh context/page per test (isolation)@AfterEach - Screenshot on failure, close contextEnvironment variables:
HEADED=true - Run with visible browser (debugging)SLOWMO=1000 - Slow down actions by 1000ms (debugging)Frontend tests run automatically in CI. Screenshots uploaded as artifacts on failure:
- name: Run frontend tests
run: mvn test -Dtest="*FrontendTest"
- name: Upload screenshots on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-failure-screenshots
path: target/playwright-screenshots/
Official docs: https://playwright.dev/java/docs/test-runners
Test examples: See src/test/java/.../web/frontend/V1DashboardFrontendTest.java
Base class: See src/test/java/.../web/frontend/AbstractFrontendTest.java