End-to-end tests for the Bitkit-android and Bitkit-ios mobile app using WebdriverIO and Appium. Supports both Android and iOS platforms.
- Node.js (≥ 22)
- Android SDK (with at least API 33–35)
- Xcode (for iOS, macOS only)
- Appium server installed locally or started via WebdriverIO
- Emulator or real device running
# Clone the repo
git clone https://github.com/synonymdev/bitkit-e2e-tests.git
cd bitkit-e2e-tests
# Install dependencies
npm installartifacts/ # screenshots and (optionally) videos of failed tests
aut/ # Place your .apk / .ipa files here
docker/ # docker compose regtest based backend for Bitkit wallet
test/
├── specs/ # Test suites (e.g., onboarding.e2e.ts)
├── helpers/ # Test helpers: selectors, setup, actions
ℹ️ Screenshots and (optionally) videos of failed tests will be saved to
artifacts/. To enable video recording, set theRECORD_VIDEO=trueenvironment variable.
# Run all tests on Android
npm run e2e:android
# Run all tests on iOS
npm run e2e:iosTo run a specific test file:
npm run e2e:android -- --spec ./test/specs/onboarding.e2e.tsTo run a specific test case:
npm run e2e:android -- --mochaOpts.grep "Can pass onboarding correctly"Test suites (and some individual tests) are tagged using a simple @tag convention in the describe / it titles:
describe('@backup - Backup', () => {
it('@backup_1 - Can backup metadata, widget, settings and restore them', async () => {
// ...
});
});You can use Mocha’s --grep option to run only the tests that match a given tag (regex supported). For example:
# Run only backup tests
npm run e2e:android -- --mochaOpts.grep "@backup"
# Run backup OR onboarding OR onchain tests
npm run e2e:android -- --mochaOpts.grep "@onchain|@backup|@onboarding"
# Run everything except backup tests
npm run e2e:android -- --mochaOpts.grep "@backup" --mochaOpts.invertThese helper scripts wrap the regular npm run e2e:* commands and add CI-friendly extras such as log capture and artifact collection. You can also run them locally when debugging.
The Android script will:
- Clear and capture
adb logcatoutput into./artifacts/logcat.txt. - Reverse the regtest port (
60001). - Run the Android E2E tests.
- Forward any arguments directly to Mocha/WebdriverIO.
Usage examples:
# Run all Android tests (with logcat capture)
./ci_run_android.sh
# Run only @backup tests
./ci_run_android.sh --mochaOpts.grep "@backup"
# Run backup OR onboarding OR onchain tests
./ci_run_android.sh --mochaOpts.grep "@backup|@onboarding|@onchain"
# Run everything except @backup
./ci_run_android.sh --mochaOpts.grep "@backup" --mochaOpts.invert
# Run a specific spec file
./ci_run_android.sh --spec ./test/specs/onboarding.e2e.tsTBD 🚧
- Use
elementById()andtap()helpers to write cross-platform tests. - Use
confirmInputOnKeyboard()to handle keyboard actions across Android/iOS. - Tests are designed to work identically on both platforms where possible.
- To debug, add
console.info()or enablewdiodebug logs.