Project Brief — Test Suite for a Banking Mobile App

10 min read

You have spent six chapters building up every skill needed to automate a real mobile app. Now you bring them all together. This capstone project asks you to build a complete, production-quality Appium test suite for a banking mobile application — end to end, with proper structure, cross-platform coverage, and CI integration.

The app: FinanceApp

The capstone uses the FinanceApp demo, a fully functional banking app designed specifically for Appium practice. It is available on GitHub as a free open-source test target.

Android: Download FinanceApp-debug.apk from the course resources.
iOS: Download FinanceApp.app (Simulator) from the course resources.

FinanceApp has the features a real banking app would have:

  • Login with email and password (and biometric toggle)
  • Account dashboard with balance, recent transactions
  • Transfer money between accounts
  • Bill payment with payee management
  • Account statements (WebView)
  • Profile and settings

What you will build

A Maven project with the following structure:

financeapp-tests/
├── pom.xml
├── testng.xml
├── testng-parallel.xml
├── .github/workflows/android-tests.yml
└── src/test/java/com/qa/
    ├── base/
    │   └── BaseTest.java
    ├── pages/
    │   ├── LoginPage.java
    │   ├── DashboardPage.java
    │   ├── TransferPage.java
    │   ├── BillPaymentPage.java
    │   └── StatementsPage.java
    ├── tests/
    │   ├── LoginTest.java
    │   ├── DashboardTest.java
    │   ├── TransferTest.java
    │   ├── BillPaymentTest.java
    │   └── StatementsTest.java
    └── utils/
        ├── DriverFactory.java
        └── WaitUtils.java

Test scope

Module 1: Authentication (LoginTest.java)

TestScenarioTags
validLoginAndroidLogin with correct credentials on Androidsmoke
validLoginIOSLogin with correct credentials on iOSsmoke
invalidPasswordShowsErrorWrong password shows error messageregression
emptyEmailShowsValidationSubmit with empty email shows inline errorregression
sessionPersistsAfterBackgroundBackground app for 10s, foreground, still logged inregression
logoutClearsSessionLogout, relaunch, lands on login screenregression

Module 2: Dashboard (DashboardTest.java)

TestScenarioTags
balanceDisplayedAccount balance visible after loginsmoke
recentTransactionsLoadedAt least 3 recent transactions shownsmoke
transactionTapShowsDetailTap transaction item opens detail screenregression

Module 3: Transfer (TransferTest.java)

TestScenarioTags
successfulTransferTransfer $10 from Checking to Savingssmoke
insufficientFundsErrorTransfer more than balance shows errorregression
decimalAmountAccepted$10.50 transfer processes correctlyregression
transferConfirmationRequiredConfirmation dialog appears before transferregression

Module 4: Statements (StatementsTest.java)

TestScenarioTags
statementsLoadInWebViewStatements page loads HTML table in WebViewsmoke
transactionRowsPresentStatement table has at least one rowsmoke
returnToNativeAfterStatementsBack button returns to native dashboardregression

Acceptance criteria

Your submission must meet all of these:

  1. All 16 tests pass on an Android emulator running API 34
  2. Page Object Model — no findElement calls in test classes
  3. Explicit waits — no Thread.sleep() anywhere in the code
  4. Cross-platform — at least the 2 smoke login tests run on both Android and iOS using the same test class
  5. CI workflow — the GitHub Actions file starts the emulator, runs smoke tests, and uploads surefire results
  6. Screenshot on failure@AfterMethod captures and saves screenshots for failed tests
  7. Context switching — the StatementsTest correctly switches to WEBVIEW context

Technical requirements

  • Java 11 or later
  • Maven
  • TestNG with testng.xml for smoke and testng-parallel.xml for regression (parallel="methods", thread-count=3)
  • Appium Java Client 9.x

Getting started

  1. Clone the FinanceApp repository from the course resources page
  2. Install the APK on your emulator: adb install FinanceApp-debug.apk
  3. Open FinanceApp in Appium Inspector and map all the locators you'll need
  4. Build your DriverFactory and BaseTest first — get a driver connecting before writing any page objects
  5. Write LoginPage and LoginTest — the simplest flow — before tackling the other modules

The walkthrough in the next lesson guides you through every module step by step.

// tip to track lessons you complete and pick up where you left off across devices.