Skip to content

walterwhites/Appium-codeception-module

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Appium module for Codeception

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages