teswiz is a Java-first automation framework for:
- web: Selenium, Playwright-Java, Playwright-TS
- mobile: Appium Java for Android and iOS
- desktop/web-adjacent: Electron, Windows apps, PDF validation
- visual testing: Applitools Eyes and Ultrafast Grid
- reporting: Cucumber HTML, ReportPortal, engine-aware artifacts
The test authoring style stays the same:
feature -> steps -> business layer -> screen contract
teswiz handles persona routing, session lifecycle, platform selection, cloud execution, and reporting underneath that flow.
Read these before upgrading or enabling Playwright:
- Web engine selection is explicit.
WEB_ENGINEnow supportsselenium,playwright-java, andplaywright-ts. Checked-in sample web configs should set this explicitly, even though the runtime still defaults toseleniumwhen omitted. - Playwright is opt-in, not a replacement. Existing Selenium suites continue to work. To use Playwright, choose the engine and add the matching screen implementation.
- Playwright screen model differs by engine.
playwright-javauses Java screen implementations.playwright-tsuses TypeScript screen modules undersrc/test/resources/playwright/screens. - Older context imports changed in
1.0.13+. Replacecom.context.*imports withcom.znsio.teswiz.context.*. - Playwright web on HeadSpin is intentionally unsupported. teswiz now fails fast with an explicit message if that combination is selected.
Detailed guidance:
flowchart TD
A["Install prerequisites"] --> B["Create or update config.properties"]
B --> C{"Platform?"}
C -->|Web| D["Set PLATFORM=web and WEB_ENGINE"]
C -->|Mobile| E["Set PLATFORM=android or PLATFORM=iOS"]
D --> F["Implement shared screen contract"]
E --> F
F --> G{"Web engine?"}
G -->|selenium| H["Add Selenium web screen"]
G -->|playwright-java| I["Add Playwright-Java web screen"]
G -->|playwright-ts| J["Add TypeScript screen module"]
H --> K["Run tests"]
I --> K
J --> K
K --> L["Optional: visual checks and ReportPortal"]
Recommended reading order:
Set this in your suite config:
WEB_ENGINE=seleniumValid values:
seleniumplaywright-javaplaywright-ts
Use:
seleniumwhen you want the current Selenium web pathplaywright-javawhen you want Playwright web with Java screen implementationsplaywright-tswhen you want Playwright web with TypeScript screen modules
Examples:
- Selenium web example
- Playwright-Java web example
- Playwright-TS web example
- Android example
- iOS example
./gradlew clean build
./gradlew verifyScreenContracts
./gradlew reportMissingScreenContractsIf you need a fresh dependency resolution:
./gradlew clean build -PforceUpdate=trueNotes:
- use JDK 17 or higher
- run
verifyScreenContractsexplicitly when adding or migrating screens - use
-PincludeMissingScreenTargets=truewithverifyScreenContractswhen you want stricter coverage reporting
teswiz supports:
- Applitools Eyes for Selenium web, Playwright-Java web, Playwright-TS web, and mobile visual flows
- Applitools Ultrafast Grid for web visual runs
- ReportPortal publishing with engine, platform, provider, persona, and session metadata
- unified scenario artifacts such as screenshots, traces, console logs, HARs, and provider links
Read more:
The high-level architecture is documented separately in:
That doc covers:
- Java orchestration layer
- Selenium, Playwright-Java, and Playwright-TS web engines
- Appium mobile execution
- screen resolution and contract verification
- cloud/provider adapters
- reporting and visual integration
For GitHub Actions in this repo:
- use
actions/setup-nodebefore Node-based installs - use
npm ciin CI workflows - commit
package-lock.jsonwheneverpackage.jsondependencies or overrides change - install Playwright browsers only in workflows that actually execute Playwright
- keep only the latest artifact set per workflow for user-created branches
- do not retain artifacts for dependency-management branches such as
dependabot/*orrenovate/*
If you are adding or migrating screen implementations:
- keep the screen contract stable
- add the engine/platform-specific implementation
- run
./gradlew verifyScreenContracts - add or update the relevant sample/docs if user-facing behavior changed