walterwhites/appium-module

Appium module for codeception

1.1.1 2018-09-28 21:54 UTC

This package is auto-updated.

Last update: 2024-04-29 03:38:43 UTC


README

Easy Appium integration, iOS and Android Automation.

Appium-codeception-module

Table of Contents

Install

Just add walterwhites/appium-module to your project's composer.json file:

{
    "require": {
       "walterwhites/appium-module": "dev-master"
    }
}

then run composer install

Tests

config for iOS

class_name: IosTester
modules:
  enabled:
    # Enable appium module
    -  \Appium\Appium:
    -  Asserts:
  config:
    # Configuration for appium module
    \Appium\Appium:
      host: 0.0.0.0
      local: true
      port: 4723
      browserName: ''
      desiredCapabilities:
        platformName: iOS
        platformVersion: '13.2'
        deviceName: iPhone 11 Pro
        xcodeOrgId: ''
        xcodeSigningId: iPhone Developer
        noReset: true
        fullReset: false
        clearSystemFiles: true
        automationName: XCUITest
        bundleId: %IOS_BUNDLE_ID%
        #app: %IOS_APP_PATH%
        #bundleId: bundleId-of-your-app
        showIOSLog: false

Generating tester classes

To generate actor class for the AndroidTester/IosTester defined inside android.suite.yml and ios.suite.yml run the following command:

codecept build

usage

Below an example of a classic register method

/**
 * @group register
 * Tests the sign up
 * @param User $params
 */
public function registerByEmail(User $params)
{
    $this->test->clickOnButton('SIGN UP', 400);
    $this->test->clickOnButton('SIGN UP WITH EMAIL', 400);
    $this->test->setText('First name', $params->firstName);
    $this->test->setText('Last name', $params->lastName);
    $this->test->setText('Email address', $params->email);
    $this->test->hideKeyboard();
    sleep(2);
    $this->test->touchPositionedButon(2);
    sleep(2);
    $this->test->touchPositionedButon(3);
    $this->test->clickOnButton('SIGN UP', 300);
}
  • clickOnButton clicks on the button with label 'SIGN UP' then 'SIGN UP WITH EMAIL'
  • setText updates the text field with value 'First name' to $params->firstName
  • hideKeyboard closes the Keyboard (not working on all iOS devices)
  • touchPositionedButon taps on a button or checkbox according his position

AppTestCase

protected $locatorStrategy = ILocatorStrategy::class_chain;
protected $classChainSearch = IClassChainSearch::label;
use Button;
use TextField;

public function setLocatorStrategy($locatorStrategy)
{
    switch ($locatorStrategy) {
        case ILocatorStrategy::class_chain:
            $this->locatorStrategy = ILocatorStrategy::class_chain;
            break;
        case ILocatorStrategy::predicate_string:
            $this->locatorStrategy = ILocatorStrategy::predicate_string;
            break;
        case ILocatorStrategy::accessibility_id:
            $this->locatorStrategy = ILocatorStrategy::accessibility_id;
            break;
    }
}

public function setClassChainSearch($classChainSearch)
{
    switch ($classChainSearch) {
        case IClassChainSearch::label:
            $this->locatorStrategy = IClassChainSearch::label;
            break;
        case IClassChainSearch::name:
            $this->locatorStrategy = IClassChainSearch::name;
            break;
        case IClassChainSearch::value:
            $this->locatorStrategy = IClassChainSearch::value;
            break;
    }
}

ILocatorStrategy interface

default locatorStrategy is class chain, you can override it with the following statement

$this->test->setLocatorStrategy(ILocatorStrategy::accessibility_id);

IClassChainSearch interface

IClassChainSearch is an interface which defines the way to search element in the class chain pattern, for example to search a button

public static $button = "**/XCUIElementTypeButton[%s == '%s']";

default value defined in AppTestCase is label, so each time clickOnButton is called, the previous statement becomes

public static $button = "**/XCUIElementTypeButton['label' == '%s']";

you can override it with the following statement

$this->test->setClassChainSearch(IClassChainSearch::name);

OR

$this->test->setClassChainSearch(IClassChainSearch::value);

full example here

$this->test->clickOnButton('SIGN UP', 400);
$this->test->setLocatorStrategy("name");
$this->test->clickOnButton('button_name', 400);
$this->test->setLocatorStrategy("value");
$this->test->clickOnButton('button_value', 400);
  • the first clickOnButton clicks on button with label 'SIGN UP'
  • the second clickOnButton clicks on button with name 'button_name'
  • the third clickOnButton clicks on button with value 'button_value'

The second parameter of clickOnButton defines the time in ms before to perform the action