Pure reference catalog for picking a test automation framework - covers Playwright / Cypress / Selenium / WebdriverIO / Appium / Espresso / XCUITest / RestAssured / Karate / k6 / Locust with side-by-side tradeoffs on speed, cross-browser, mobile, parallelisation, language support, ecosystem maturity, CI integration; a decision tree for matching project NFRs to framework choice; and reference directory / fixture / CI layouts for the chosen stack. This is the **upstream selection step**: it decides which tool to adopt, not how to configure a tool already chosen, and not how to rebalance the unit / integration / E2E mix of an existing suite. Use when starting a new test-automation suite from scratch, before installing any tool.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Deep reference for the framework-choice-advisor SKILL.md, Step 4. After the team has chosen a stack, these are the canonical directory layouts the per-framework skill assumes. Layouts are conventions, not mandates - every project has reasons to deviate, but the canonical layout is the starting point a newcomer can read.
tests/
├── e2e/
│ ├── auth/
│ │ ├── login.spec.ts
│ │ └── login.fixture.ts
│ ├── cart/
│ │ ├── add-item.spec.ts
│ │ └── checkout.spec.ts
│ └── pages/ # Page Objects (per Martin Fowler's pattern)
│ ├── LoginPage.ts
│ ├── CartPage.ts
│ └── CheckoutPage.ts
├── helpers/
│ ├── api-client.ts # HTTP client for setup / teardown
│ ├── test-data.ts # Fixtures and seeds
│ └── selectors.ts # Shared accessibility-first locators
├── fixtures/ # Static test data
├── playwright.config.ts
├── tsconfig.json
└── package.jsonConventions:
*.spec.ts per feature flow; one Page Object per page or major component.describe blocks; global fixtures are an anti-pattern (see test-code-conventions §6).cypress/
├── e2e/
│ ├── auth/login.cy.ts
│ └── cart/checkout.cy.ts
├── support/
│ ├── commands.ts # Custom Cypress commands
│ ├── pages/ # Page Objects (Cypress idiom: command-based, not class-based)
│ └── e2e.ts
├── fixtures/
├── cypress.config.ts
└── package.jsonCypress idiom prefers custom commands over class-based POMs; the directory layout reflects that.
test/
├── specs/
│ ├── auth/login.spec.ts
│ └── cart/checkout.spec.ts
├── pageobjects/
│ ├── login.page.ts
│ └── cart.page.ts
├── helpers/
├── wdio.conf.ts
└── package.jsonWDIO's runner ergonomics improve on raw Selenium; the layout is conventional.