# Mobile Testing Overview

What You'll Learn

This section provides an overview of Gondola's mobile testing capabilities

# Introduction

Gondola supports testing mobile applications and mobile browsers on both Android and iOS.

# Mobile Testing Capabilities

Gondola supports the following platforms and configurations:

  • OSs: Android 8+, iOS 12+(beta)
  • Devices: phones and tablets; physical and virtual devices
  • Application types: native, hybrid and web applications

TIP

Gondola does not require app signing & instrumenting

  • Browsers: Chrome, Safari
  • Mobile cloud: any vendors that support Appium, such as Sauce Labs or NTT Remote Testkit.

# Appium

Under the hood, Gondola uses Appium for mobile automation. Appium is a well-established open source package for mobile testing.

# Key Features

# Platform-Agnostic Scripting

Gondola Framework provides platform-agnostic abstraction to enable you to write one set of tests that can be executed on any device. This includes both Android and iOS devices.

Here is how Gondola clicks on a Submit button whose accessibility id is btnSubmit in both Android and iOS:

gondola.tap('~btnSubmit');

What about when the accessibility id on Android and iOS are not identical?

gondola.tap({
  android: '~android id',
  ios: '~iOS id'
});

In the above example, any of Gondola's built-in actions that allow an ILocator as input, such as tap or checkControlExist, would work.

# Readable Scripts with Behavior-Driven Development

Gondola allows you to design your own testing scenarios using Behavior-Driven Development (BDD). This helps you to break down the communication barrier between business teams and technical teams.

BDD scenario:

Feature: Login Validation

    Background: App is started to Login page
        Given I start "loginPage"

    Scenario: Valid login
        When I login by username "john" and password ""
        Then I should see "pageTitle" of "homePage"

    Scenario: Invalid login
        When I login by username "Invalid" and password "Invalid"
        Then I should see "InvalidMsg" of "loginPage"

An automation engineer will write a script that corresponds with the scenario above. These corresponding step definitions allow you to map your tests to the BDD scenarios.

Step Definitions:

Given("I start {string}", (pageName: string) => {
    const pageClass = getPageClass(pageName);
    if (pageClass){
        const packageId = pageClass.packageId;
        if (packageId){
            gondola.runOnAndroid(async () => {
                await gondola.checkAppIsInstalled(typeof(packageId) === "string" ? 
                    packageId : packageId.android!);
            });
        }
        //gondola.wait(5);
    } else {
        throw new Error("Invalid page was given. Page is not found or corrupted.");
    }
});

When("I login by username {string} and password {string}", async (user: string, pass: string) => {
    await loginPage.login(user, pass);
});

Then("I should see {string} of {string}", (ele: string, parent: string) => {
    let parentPage;
    if (parent){
        parentPage = getPageClass(parent);
    }

    let toCheck = ele;
    if (parentPage && parentPage.hasOwnProperty(ele)){
        toCheck = parentPage[ele];
    }
    gondola.checkControlExist(toCheck);
});
Last Updated: 6/20/2019, 7:21:01 AM