$ show webdriverio/appium-boilerplate
This is a boilerplate project for mobile app and browser test automation using Appium and WebdriverIO v9. It provides a comprehensive set of example tests, page/screen objects, reusable helpers, and configuration files for running tests locally or on cloud providers (Sauce Labs, BrowserStack, TestingBot, LambdaTest). The codebase demonstrates cross-platform testing patterns for iOS and Android, including biometric login, deep link navigation, drag-and-drop, swiping, form interactions, and WebView handling. It is well-structured with TypeScript, async/await, and the Page Object Model. The project is actively maintained with recent commits and up-to-date dependencies, making it a solid starting point for teams implementing mobile automation.
The LLM identified 4 files worth highlighting for reuse:
Handles biometric login (Touch/Face ID on iOS, FingerPrint on Android) with platform-specific implementations. Demonstrates workaround for iOS system dialogs using home screen context switching and Android fingerprint wizard setup across multiple OS versions. Reusable with minimal adaptation for any app requiring biometric authentication.
Provides utility functions for deep link navigation (Android via mobile:deepLink, iOS real device via Safari), app relaunch, time measurement, and executing actions in the iOS home screen context to interact with system dialogs. The `executeInHomeScreenContext` function is a non-obvious solution for a known Appium limitation. These patterns are reusable in any mobile test project.
Implements advanced WebView context detection for hybrid apps. Handles differences between iOS (multiple random WebView contexts) and Android (single WebView with package name). Provides `waitForWebViewContextAdded` with detailed context information (bundleId, url, title) and `waitForDocumentFullyLoaded` for reliable page readiness. Demonstrates how to correctly switch to WebView context in a cross-platform manner, a common pain point in mobile automation.
Encapsulates carousel swipe interactions with reusable methods (`swipeLeft`, `swipeRight`, `isCardActive`). Uses the modern `driver.swipe()` command with scrollable element and percent, and caches element rectangles to reduce WebDriver calls. Demonstrates a clean pattern for automating swipeable UI components that can be extracted for other apps with similar carousel behavior.