Advanced: Wikipedia Android

A complete example using Maestro + Wikipedia App

Content

  • Go through onboarding

  • Navigate dashboard

    • Scroll feed & search for item

    • Copy text & paste

    • Validate visible items

  • Authentication

    • Signup

    • Login

  • Use javascript

Use maestro download-samples to download the app and code

Onboarding

  1. Launches app in clear state

  2. Runs onboarding flow

    1. Add language

    2. Remove language

    3. Complete onboarding

# run-test.yml
appId: org.wikipedia
---
- launchApp:
    clearState: true
- runFlow: "onboarding/main.yml"
# onboarding/onboarding.yml
appId: org.wikipedia
---
- runFlow: "add-language.yml"
- runFlow: "remove-language.yml"
- tapOn: "Continue"
- assertVisible: "New ways to explore"
- tapOn: "Continue"
- assertVisible: "Reading lists with sync"
- tapOn: "Continue"
- assertVisible: "Send anonymous data"
- tapOn: "Get started"
maestro test run-test.yml
  1. Search & Save

    1. Searches for a wiki page

    2. Saves the wiki page in favorites

    3. Returns to main dashboard

  2. Feed

    1. Scroll feed until it finds a particular article

    2. Opens article

  3. Copy & Paste

    1. Scrolls feed until it finds a particular article

    2. Copies article title

    3. Pastes copied text into another field

  4. Saved

    1. Vaidates a particular page has been saved in our favorites

# run-test.yml
appId: org.wikipedia
---
- launchApp
- runFlow: "dashboard/search.yml"
- runFlow: "dashboard/feed.yml"
- runFlow: "dashboard/copy-paste.yml"
- runFlow: "dashboard/saved.yml"
appId: org.wikipedia
---
- tapOn: "Search Wikipedia"
- inputText: "Sun"
- assertVisible: "Star in the Solar System"
- tapOn:
    id: ".*page_list_item_title"
- tapOn:
    id: ".*page_save"
- back
- back
maestro test run-test.yml

Authentication

  1. Signup

    1. Navigates to signup

    2. Generates credentials using javascript

    3. Fills input fields with generated credentials

  2. Login

    1. Navigates to login

    2. Fetches a test user from a test api using javascript

    3. Fill input fields with fetched credentials

# run-test.yml
appId: org.wikipedia
---
- launchApp
- runFlow: "auth/signup.yml"
- runFlow: "auth/login.yml"
appId: org.wikipedia
---
- tapOn: "More"
- tapOn: "LOG IN.*"
- tapOn:
    id: ".*create_account_login_button"
- runScript: "fetchTestUser.js"
- tapOn: "Username"
- inputText: "${output.test_user.username}"
- tapOn: "Password"
- inputText: "test-password"
- tapOn: "LOG IN"
# we won't actually login

- back
- back

Javascript scripts

function username() {
  const date = new Date().getTime().toString();
  return `test_user_${date}`;
}

function email() {
  const date = new Date().getTime().toString();
  return `test-user-${date}@test.com`;
}

function password() {
  const date = new Date().getTime().toString();
  return `test-user-password-${date}`;
}

output.credentials = {
  email: email(),
  password: password(),
  username: username(),
};
maestro test run-test.yml

Last updated