Real products rarely live on one platform. A typical engagement means web, iOS, and Android — and a test stack that covers all three without becoming a maintenance nightmare.
The tool stack
- WebdriverIO — a flexible runner that drives both browsers and mobile via the same API, which keeps the mental model consistent across platforms.
- Appium — the standard for native iOS/Android automation; pairs naturally with WebdriverIO.
- Playwright — my default for web, especially where cross-browser and tracing matter.
- BrowserStack — real-device and cross-browser coverage in the cloud, so you aren't maintaining a device lab.
- Postman / REST clients — for exploratory and contract-adjacent API checks.
Keep it cohesive
The trap is letting each platform grow its own bespoke framework. Instead:
- Share test data builders and API setup helpers across platforms so a test can arrange state via the API and assert through the UI.
- Keep a single reporting format (e.g. Allure) so web and mobile results land in one dashboard.
- Push platform-specific detail down into page/screen objects; keep the specs reading like user behaviour.
Match the layer to the risk
- Pure logic → unit tests.
- Service integrations → API/contract tests.
- Critical journeys → a small, stable set of UI/mobile end-to-end tests on real devices via BrowserStack.
A good stack isn't about using every tool — it's about a small set that compose well and produce one trustworthy signal across every platform.