Extends Webdriver
Appium helper extends Webriver helper. It supports all browser methods and also includes special methods for mobile apps testing. You can use this helper to test Web on desktop and mobile devices and mobile apps.
Appium Installation
Appium is an open source test automation framework for use with native, hybrid and mobile web apps that implements the WebDriver protocol. It allows you to run Selenium tests on mobile devices and also test native, hybrid and mobile web apps.
Download and install Appium
Launch the daemon: appium
Helper configuration
This helper should be configured in codecept.json or codecept.conf.js
app: Application path. Local path or remote URL to an .ipa or .apk file, or a .zip containing one of these. Alias to desiredCapabilities.appPackagehost: (default: 'localhost') Appium hostport: (default: '4723') Appium portplatform: (Android or IOS), which mobile OS to use; alias to desiredCapabilities.platformNamerestart: restart browser or app between tests (default: true), if set to false cookies will be cleaned but browser window will be kept and for apps nothing will be changed.desiredCapabilities: [], Appium capabilities, see belowplatformName- Which mobile OS platform to useappPackage- Java package of the Android app you want to runappActivity- Activity name for the Android activity you want to launch from your package.deviceName: The kind of mobile device or emulator to useplatformVersion: Mobile OS versionapp- The absolute local path or remote http URL to an .ipa or .apk file, or a .zip containing one of these. Appium will attempt to install this app binary on the appropriate device first.browserName: Name of mobile web browser to automate. Should be an empty string if automating an app instead.
Example Android App:
{ helpers: { Appium: { platform: "Android", desiredCapabilities: { appPackage: "com.example.android.myApp", appActivity: "MainActivity", deviceName: "OnePlus3", platformVersion: "6.0.1" } } } }
Example iOS Mobile Web with local Appium:
{ helpers: { Appium: { platform: "iOS", url: "https://the-internet.herokuapp.com/", desiredCapabilities: { deviceName: "iPhone X", platformVersion: "12.0", browserName: "safari" } } } }
Example iOS Mobile Web on BrowserStack:
{ helpers: { Appium: { host: "hub-cloud.browserstack.com", port: 4444, user: process.env.BROWSERSTACK_USER, key: process.env.BROWSERSTACK_KEY, platform: "iOS", url: "https://the-internet.herokuapp.com/", desiredCapabilities: { realMobile: "true", device: "iPhone 8", os_version: "12", browserName: "safari" } } } }
Additional configuration params can be used from https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
Access From Helpers
Receive a Appium client from a custom helper by accessing browser property:
let browser = this.helpers['Appium'].browser
Methods
Parameters
config
runOnIOS
Execute code only on iOS
I.runOnIOS(() => { I.click('//UIAApplication[1]/UIAWindow[1]/UIAButton[1]'); I.see('Hi, IOS', '~welcome'); });
Additional filter can be applied by checking for capabilities. For instance, this code will be executed only on iPhone 5s:
I.runOnIOS({deviceName: 'iPhone 5s'},() => { // ... });
Also capabilities can be checked by a function.
I.runOnAndroid((caps) => { // caps is current config of desiredCapabiliites return caps.platformVersion >= 6 },() => { // ... });
Parameters
capsanyfnany
runOnAndroid
Execute code only on Android
I.runOnAndroid(() => { I.click('io.selendroid.testapp:id/buttonTest'); });
Additional filter can be applied by checking for capabilities. For instance, this code will be executed only on Android 6.0:
I.runOnAndroid({platformVersion: '6.0'},() => { // ... });
Also capabilities can be checked by a function. In this case, code will be executed only on Android >= 6.
I.runOnAndroid((caps) => { // caps is current config of desiredCapabiliites return caps.platformVersion >= 6 },() => { // ... });
Parameters
capsanyfnany
runInWeb
Execute code only in Web mode.
I.runInWeb(() => { I.waitForElement('#data'); I.seeInCurrentUrl('/data'); });
Parameters
fnany
seeAppIsInstalled
Check if an app is installed.
I.seeAppIsInstalled("com.example.android.apis");
Parameters
bundleIdstring String ID of bundled appAppium: support only Android
seeAppIsNotInstalled
Check if an app is not installed.
I.seeAppIsNotInstalled("com.example.android.apis");
Parameters
bundleIdstring String ID of bundled appAppium: support only Android
installApp
Install an app on device.
I.installApp('/path/to/file.apk');
Parameters
pathstring path to apk fileAppium: support only Android
removeApp
Remove an app from the device.
I.removeApp('appName', 'com.example.android.apis');
Parameters
seeCurrentActivityIs
Check current activity on an Android device.
I.seeCurrentActivityIs(".HomeScreenActivity")
Parameters
currentActivitystring Appium: support only Android
seeDeviceIsLocked
Check whether the device is locked.
Appium: support only Android
seeDeviceIsUnlocked
Check whether the device is not locked.
Appium: support only Android
seeOrientationIs
Check the device orientation
I.seeOrientationIs('PORTRAIT'); I.seeOrientationIs('LANDSCAPE')
Parameters
orientation("LANDSCAPE"|"PORTRAIT") LANDSCAPE or PORTRAITAppium: support Android and iOS
setOrientation
Set a device orientation. Will fail, if app will not set orientation
I.setOrientation('PORTRAIT'); I.setOrientation('LANDSCAPE')
Parameters
orientation("LANDSCAPE"|"PORTRAIT") LANDSCAPE or PORTRAITAppium: support Android and iOS
grabAllContexts
Get list of all available contexts
let contexts = await I.grabAllContexts();
Appium: support Android and iOS
grabContext
Retrieve current context
let context = await I.grabContext();
Appium: support Android and iOS
grabCurrentActivity
Get current device activity.
let activity = await I.grabCurrentActivity();
Appium: support only Android
grabNetworkConnection
Get information about the current network connection (Data/WIFI/Airplane). The actual server value will be a number. However WebdriverIO additional properties to the response object to allow easier assertions.
let con = await I.grabNetworkConnection();
Appium: support only Android
grabOrientation
Get current orientation.
let orientation = await I.grabOrientation();
Appium: support Android and iOS
grabSettings
Get all the currently specified settings.
let settings = await I.grabSettings();
Appium: support Android and iOS
_switchToContext
Switch to the specified context.
Parameters
contextany the context to switch to
switchToWeb
Switches to web context. If no context is provided switches to the first detected web context
// switch to first web context I.switchToWeb(); // or set the context explicitly I.switchToWeb('WEBVIEW_io.selendroid.testapp');
Parameters
contextstring?
switchToNative
Switches to native context. By default switches to NATIVE_APP context unless other specified.
I.switchToNative(); // or set context explicitly I.switchToNative('SOME_OTHER_CONTEXT');
Parameters
contextany (optional, defaultnull)
startActivity
Start an arbitrary Android activity during a session.
I.startActivity('io.selendroid.testapp', '.RegisterUserActivity');
Appium: support only Android
Parameters
appPackageappActivity
setNetworkConnection
Set network connection mode.
- airplane mode
- wifi mode
- data data
I.setNetworkConnection(0) // airplane mode off, wifi off, data off I.setNetworkConnection(1) // airplane mode on, wifi off, data off I.setNetworkConnection(2) // airplane mode off, wifi on, data off I.setNetworkConnection(4) // airplane mode off, wifi off, data on I.setNetworkConnection(6) // airplane mode off, wifi on, data on
See corresponding webdriverio reference.
Appium: support only Android
Parameters
value
setSettings
Update the current setting on the device
I.setSettings({cyberdelia: 'open'});
Parameters
settingsobject objectAppium: support Android and iOS
hideDeviceKeyboard
Hide the keyboard.
// taps outside to hide keyboard per default I.hideDeviceKeyboard(); I.hideDeviceKeyboard('tapOutside'); // or by pressing key I.hideDeviceKeyboard('pressKey', 'Done');
Parameters
strategy("tapOutside"|"pressKey") desired strategy to close keyboard (‘tapOutside’ or ‘pressKey’)Appium: support Android and iOSkey
sendDeviceKeyEvent
Send a key event to the device. List of keys: https://developer.android.com/reference/android/view/KeyEvent.html
Parameters
keyValuenumber Device specific key valueAppium: support only Android
openNotifications
Open the notifications panel on the device.
Appium: support only Android
makeTouchAction
The Touch Action API provides the basis of all gestures that can be automated in Appium. At its core is the ability to chain together ad hoc individual actions, which will then be applied to an element in the application on the device. See complete documentation
I.makeTouchAction("~buttonStartWebviewCD", 'tap');
Appium: support Android and iOS
Parameters
locatoraction
tap
Taps on element.
I.tap("~buttonStartWebviewCD");
Shortcut for makeTouchAction
Parameters
locatorany
swipe
Perform a swipe on the screen or an element.
let locator = "#io.selendroid.testapp:id/LinearLayout1"; I.swipe(locator, 800, 1200, 1000);
Parameters
locator(string | object)xoffsetnumberyoffsetnumberspeednumber (optional), 1000 by defaultAppium: support Android and iOS (optional, default1000)
performSwipe
Perform a swipe on the screen.
Parameters
swipeDown
Perform a swipe down on an element.
let locator = "#io.selendroid.testapp:id/LinearLayout1"; I.swipeDown(locator); // simple swipe I.swipeDown(locator, 500); // set speed I.swipeDown(locator, 1200, 1000); // set offset and speed
Parameters
locator(string | object)yoffsetnumber? (optional) (optional, default1000)speednumber (optional), 1000 by defaultAppium: support Android and iOS (optional, default1000)
swipeLeft
Perform a swipe left on an element.
let locator = "#io.selendroid.testapp:id/LinearLayout1"; I.swipeLeft(locator); // simple swipe I.swipeLeft(locator, 500); // set speed I.swipeLeft(locator, 1200, 1000); // set offset and speed
Parameters
locator(string | object)xoffsetnumber? (optional) (optional, default1000)speednumber (optional), 1000 by defaultAppium: support Android and iOS (optional, default1000)
swipeRight
Perform a swipe right on an element.
let locator = "#io.selendroid.testapp:id/LinearLayout1"; I.swipeRight(locator); // simple swipe I.swipeRight(locator, 500); // set speed I.swipeRight(locator, 1200, 1000); // set offset and speed
Parameters
locator(string | object)xoffsetnumber? (optional) (optional, default1000)speednumber (optional), 1000 by defaultAppium: support Android and iOS (optional, default1000)
swipeUp
Perform a swipe up on an element.
let locator = "#io.selendroid.testapp:id/LinearLayout1"; I.swipeUp(locator); // simple swipe I.swipeUp(locator, 500); // set speed I.swipeUp(locator, 1200, 1000); // set offset and speed
Parameters
locator(string | object)yoffsetnumber? (optional) (optional, default1000)speednumber (optional), 1000 by defaultAppium: support Android and iOS (optional, default1000)
swipeTo
Perform a swipe in selected direction on an element to searchable element.
I.swipeTo( "android.widget.CheckBox", // searchable element "//android.widget.ScrollView/android.widget.LinearLayout", // scroll element "up", // direction 30, 100, 500);
Parameters
searchableLocatorstringscrollLocatorstringdirectionstringtimeoutnumberoffsetnumberspeednumber Appium: support Android and iOS
touchPerform
Performs a specific touch action. The action object need to contain the action name, x/y coordinates
I.touchPerform([{ action: 'press', options: { x: 100, y: 200 } }, {action: 'release'}]) I.touchPerform([{ action: 'tap', options: { element: '1', // json web element was queried before x: 10, // x offset y: 20, // y offset count: 1 // number of touches } }]);
Appium: support Android and iOS
Parameters
actions
pullFile
Pulls a file from the device.
I.pullFile('/storage/emulated/0/DCIM/logo.png', 'my/path'); // save file to output dir I.pullFile('/storage/emulated/0/DCIM/logo.png', output_dir);
Appium: support Android and iOS
Parameters
pathdest
shakeDevice
Perform a shake action on the device.
Appium: support only iOS
rotate
Perform a rotation gesture centered on the specified element.
See corresponding webdriverio reference.
Appium: support only iOS
Parameters
xydurationradiusrotationtouchCount
setImmediateValue
Set immediate value in app.
See corresponding webdriverio reference.
Appium: support only iOS
Parameters
idvalue
simulateTouchId
Simulate Touch ID with either valid (match == true) or invalid (match == false) fingerprint.
I.touchId(); // simulates valid fingerprint I.touchId(true); // simulates valid fingerprint I.touchId(false); // simulates invalid fingerprint
Appium: support only iOS TODO: not tested
Parameters
match
closeApp
Close the given application.
Appium: support only iOS
appendField
Appends text to a input field or textarea. Field is located by name, label, CSS or XPath
I.appendField('#myTextField', 'appended');
Parameters
field(string | object) located by label|name|CSS|XPath|strict locatorvaluestring text value to append.
checkOption
Selects a checkbox or radio button. Element is located by label or name or CSS or XPath.
The second parameter is a context (CSS or XPath locator) to narrow the search.
I.checkOption('#agree'); I.checkOption('I Agree to Terms and Conditions'); I.checkOption('agree', '//form');
Parameters
field(string | object) checkbox located by label | name | CSS | XPath | strict locator.context(string? | object) (optional,nullby default) element located by CSS | XPath | strict locator. (optional, defaultnull)
click
Perform a click on a link or a button, given by a locator. If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. For buttons, the "value" attribute, "name" attribute, and inner text are searched. For links, the link text is searched. For images, the "alt" attribute and inner text of any parent links are searched.
The second parameter is a context (CSS or XPath locator) to narrow the search.
// simple link I.click('Logout'); // button of form I.click('Submit'); // CSS button I.click('#form input[type=submit]'); // XPath I.click('//form/*[@type=submit]'); // link in context I.click('Logout', '#nav'); // using strict locator I.click({css: 'nav a.login'});
Parameters
locator(string | object) clickable link or button located by text, or any element located by CSS|XPath|strict locator.context(string? | object) (optional,nullby default) element to search in CSS|XPath|Strict locator. (optional, defaultnull)
dontSeeCheckboxIsChecked
Verifies that the specified checkbox is not checked.
I.dontSeeCheckboxIsChecked('#agree'); // located by ID I.dontSeeCheckboxIsChecked('I agree to terms'); // located by label I.dontSeeCheckboxIsChecked('agree'); // located by name
Parameters
dontSeeElement
Opposite to seeElement. Checks that element is not visible (or in DOM)
I.dontSeeElement('.modal'); // modal is not shown
Parameters
dontSeeInField
Checks that value of input field or textarea doesn't equal to given value
Opposite to seeInField.
I.dontSeeInField('email', 'user@user.com'); // field by name I.dontSeeInField({ css: 'form input.email' }, 'user@user.com'); // field by CSS
Parameters
field(string | object) located by label|name|CSS|XPath|strict locator.valuestring value to check.
dontSee
Opposite to see. Checks that a text is not present on a page.
Use context parameter to narrow down the search.
I.dontSee('Login'); // assume we are already logged in. I.dontSee('Login', '.nav'); // no login inside .nav element
Parameters
textstring which is not present.context(string | object)? (optional) element located by CSS|XPath|strict locator in which to perfrom search. (optional, defaultnull)
fillField
Fills a text field or textarea, after clearing its value, with the given string. Field is located by name, label, CSS, or XPath.
// by label I.fillField('Email', 'hello@world.com'); // by name I.fillField('password', secret('123456')); // by CSS I.fillField('form#login input[name=username]', 'John'); // or by strict locator I.fillField({css: 'form#login input[name=username]'}, 'John');
Parameters
field(string | object) located by label|name|CSS|XPath|strict locator.valuestring text value to fill.
grabTextFrom
Retrieves a text from an element located by CSS or XPath and returns it to test.
Resumes test execution, so should be used inside async with await operator.
let pin = await I.grabTextFrom('#pin');
If multiple elements found returns an array of texts.
Parameters
Returns Promise<(string | Array<string>)> attribute value
grabValueFrom
Retrieves a value from a form element located by CSS or XPath and returns it to test.
Resumes test execution, so should be used inside async function with await operator.
let email = await I.grabValueFrom('input[name=email]');
Parameters
Returns Promise<string> attribute value
scrollIntoView
Scroll element into viewport.
I.scrollIntoView('#submit'); I.scrollIntoView('#submit', true); I.scrollIntoView('#submit', { behavior: "smooth", block: "center", inline: "center" });
Parameters
locator(string | object) located by CSS|XPath|strict locator.scrollIntoViewOptionsalignToTop(boolean | object) (optional) or scrollIntoViewOptions (optional), see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView.Supported only for web testing
seeCheckboxIsChecked
Verifies that the specified checkbox is checked.
I.seeCheckboxIsChecked('Agree'); I.seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms I.seeCheckboxIsChecked({css: '#signup_form input[type=checkbox]'});
Parameters
seeElement
Checks that a given Element is visible Element is located by CSS or XPath.
Parameters
seeInField
Checks that the given input field or textarea equals to given value. For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath.
I.seeInField('Username', 'davert'); I.seeInField({css: 'form textarea'},'Type your comment here'); I.seeInField('form input[type=hidden]','hidden_value'); I.seeInField('#searchform input','Search');
Parameters
field(string | object) located by label|name|CSS|XPath|strict locator.valuestring value to check.
see
Checks that a page contains a visible text. Use context parameter to narrow down the search.
I.see('Welcome'); // text welcome on a page I.see('Welcome', '.content'); // text inside .content div I.see('Register', {css: 'form.register'}); // use strict locator
Parameters
textstring expected on page.context(string? | object) (optional,nullby default) element located by CSS|Xpath|strict locator in which to search for text. (optional, defaultnull)
selectOption
Selects an option in a drop-down select. Field is searched by label | name | CSS | XPath. Option is selected by visible text or by value.
I.selectOption('Choose Plan', 'Monthly'); // select by label I.selectOption('subscription', 'Monthly'); // match option by text I.selectOption('subscription', '0'); // or by value I.selectOption('//form/select[@name=account]','Premium'); I.selectOption('form select[name=account]', 'Premium'); I.selectOption({css: 'form select[name=account]'}, 'Premium');
Provide an array for the second argument to select multiple options.
I.selectOption('Which OS do you use?', ['Android', 'iOS']);
Parameters
select(string | object) field located by label|name|CSS|XPath|strict locator.option(string | Array<any>) visible text or value of option.Supported only for web testing
waitForElement
Waits for element to be present on page (by default waits for 1sec). Element can be located by CSS or XPath.
I.waitForElement('.btn.continue'); I.waitForElement('.btn.continue', 5); // wait for 5 secs
Parameters
locator(string | object) element located by CSS|XPath|strict locator.secnumber? (optional,1by default) time in seconds to wait (optional, defaultnull)
waitForVisible
Waits for an element to become visible on a page (by default waits for 1sec). Element can be located by CSS or XPath.
I.waitForVisible('#popup');
Parameters
locator(string | object) element located by CSS|XPath|strict locator.secnumber (optional,1by default) time in seconds to wait (optional, default1)
waitForInvisible
Waits for an element to be removed or become invisible on a page (by default waits for 1sec). Element can be located by CSS or XPath.
I.waitForInvisible('#popup');
Parameters
locator(string | object) element located by CSS|XPath|strict locator.secnumber (optional,1by default) time in seconds to wait (optional, default1)
waitForText
Waits for a text to appear (by default waits for 1sec). Element can be located by CSS or XPath. Narrow down search results by providing context.
I.waitForText('Thank you, form has been submitted'); I.waitForText('Thank you, form has been submitted', 5, '#modal');
Parameters
textstring to wait for.secnumber (optional,1by default) time in seconds to wait (optional, default1)context(string | object)? (optional) element located by CSS|XPath|strict locator. (optional, defaultnull)
_isShadowLocator
Check if locator is type of "Shadow"
Parameters
locatorobject
_locateShadow
Locate Element within the Shadow Dom
Parameters
locatorobject
_smartWait
Smart Wait to locate an element
Parameters
locatorobject
_locate
Get elements by different locator types, including strict locator. Should be used in custom helpers:
this.helpers['WebDriver']._locate({name: 'password'}).then //...
Parameters
locator(string | object) element located by CSS|XPath|strict locator.smartWait(optional, defaultfalse)
_locateCheckable
Find a checkbox by providing human readable text:
this.helpers['WebDriver']._locateCheckable('I agree with terms and conditions').then // ...
Parameters
_locateClickable
Find a clickable element by providing human readable text:
const els = await this.helpers.WebDriver._locateClickable('Next page'); const els = await this.helpers.WebDriver._locateClickable('Next page', '.pages');
Parameters
_locateFields
Find field elements by providing human readable text:
this.helpers['WebDriver']._locateFields('Your email').then // ...
Parameters
defineTimeout
Set WebDriver timeouts in realtime.
Timeouts are expected to be passed as object:
I.defineTimeout({ script: 5000 }); I.defineTimeout({ implicit: 10000, pageLoad: 10000, script: 5000 });
Parameters
timeoutsWebdriverIO.Timeouts WebDriver timeouts object.
amOnPage
Opens a web page in a browser. Requires relative or absolute url.
If url starts with /, opens a web page of a site defined in url config parameter.
I.amOnPage('/'); // opens main page of website I.amOnPage('https://github.com'); // opens github I.amOnPage('/login'); // opens a login page
Parameters
urlstring url path or global url.
forceClick
Perform an emulated click on a link or a button, given by a locator. Unlike normal click instead of sending native event, emulates a click with JavaScript. This works on hidden, animated or inactive elements as well.
If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. For buttons, the "value" attribute, "name" attribute, and inner text are searched. For links, the link text is searched. For images, the "alt" attribute and inner text of any parent links are searched.
The second parameter is a context (CSS or XPath locator) to narrow the search.
// simple link I.forceClick('Logout'); // button of form I.forceClick('Submit'); // CSS button I.forceClick('#form input[type=submit]'); // XPath I.forceClick('//form/*[@type=submit]'); // link in context I.forceClick('Logout', '#nav'); // using strict locator I.forceClick({css: 'nav a.login'});
Parameters
locator(string | object) clickable link or button located by text, or any element located by CSS|XPath|strict locator.context(string? | object) (optional,nullby default) element to search in CSS|XPath|Strict locator.{{ react }} (optional, defaultnull)
doubleClick
Performs a double-click on an element matched by link|button|label|CSS or XPath. Context can be specified as second parameter to narrow search.
I.doubleClick('Edit'); I.doubleClick('Edit', '.actions'); I.doubleClick({css: 'button.accept'}); I.doubleClick('.btn.edit');
Parameters
locator(string | object) clickable link or button located by text, or any element located by CSS|XPath|strict locator.context(string? | object) (optional,nullby default) element to search in CSS|XPath|Strict locator.{{ react }} (optional, defaultnull)
rightClick
Performs right click on a clickable element matched by semantic locator, CSS or XPath.
// right click element with id el I.rightClick('#el'); // right click link or button with text "Click me" I.rightClick('Click me'); // right click button with text "Click me" inside .context I.rightClick('Click me', '.context');
Parameters
locator(string | object) clickable element located by CSS|XPath|strict locator.context(string? | object) (optional,nullby default) element located by CSS|XPath|strict locator.{{ react }} (optional, defaultnull)
forceRightClick
Emulates right click on an element. Unlike normal click instead of sending native event, emulates a click with JavaScript. This works on hidden, animated or inactive elements as well.
If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. For buttons, the "value" attribute, "name" attribute, and inner text are searched. For links, the link text is searched. For images, the "alt" attribute and inner text of any parent links are searched.
The second parameter is a context (CSS or XPath locator) to narrow the search.
// simple link I.forceRightClick('Menu');
Parameters
locator(string | object) clickable link or button located by text, or any element located by CSS|XPath|strict locator.context(string? | object) (optional,nullby default) element to search in CSS|XPath|Strict locator.{{ react }} (optional, defaultnull)
clearField
Clears a <textarea> or text <input> element's value.
I.clearField('Email'); I.clearField('user[email]'); I.clearField('#email');
Parameters
attachFile
Attaches a file to element located by label, name, CSS or XPath Path to file is relative current codecept directory (where codecept.json or codecept.conf.js is located). File will be uploaded to remote system (if tests are running remotely).
I.attachFile('Avatar', 'data/avatar.jpg'); I.attachFile('form input[name=avatar]', 'data/avatar.jpg');
Parameters
locator(string | object) field located by label|name|CSS|XPath|strict locator.pathToFilestring local file path relative to codecept.json config file. Appium: not tested
uncheckOption
Unselects a checkbox or radio button. Element is located by label or name or CSS or XPath.
The second parameter is a context (CSS or XPath locator) to narrow the search.
I.uncheckOption('#agree'); I.uncheckOption('I Agree to Terms and Conditions'); I.uncheckOption('agree', '//form');
Parameters
field(string | object) checkbox located by label | name | CSS | XPath | strict locator.context(string? | object) (optional,nullby default) element located by CSS | XPath | strict locator. Appium: not tested (optional, defaultnull)
grabHTMLFrom
Retrieves the innerHTML from an element located by CSS or XPath and returns it to test.
Resumes test execution, so should be used inside async function with await operator.
If more than one element is found - an array of HTMLs returned.
let postHTML = await I.grabHTMLFrom('#post');
Parameters
Returns Promise<string> HTML code for an element
grabAttributeFrom
Retrieves an attribute from an element located by CSS or XPath and returns it to test.
An array as a result will be returned if there are more than one matched element.
Resumes test execution, so should be used inside async function with await operator.
let hint = await I.grabAttributeFrom('#tooltip', 'title');
Parameters
Returns Promise<string> attribute value Appium: can be used for apps only with several values ("contentDescription", "text", "className", "resourceId")
seeTextEquals
Checks that text is equal to provided one.
I.seeTextEquals('text', 'h1');
Parameters
textstring element value to check.context(string | object?) element located by CSS|XPath|strict locator. (optional, defaultnull)
seeElementInDOM
Checks that a given Element is present in the DOM Element is located by CSS or XPath.
I.seeElementInDOM('#modal');
Parameters
dontSeeElementInDOM
Opposite to seeElementInDOM. Checks that element is not on page.
I.dontSeeElementInDOM('.nav'); // checks that element is not on page visible or not
Parameters
seeInSource
Checks that the current page contains the given string in its raw source code.
I.seeInSource('<h1>Green eggs & ham</h1>');
Parameters
textstring value to check.
grabSource
Retrieves page source and returns it to test.
Resumes test execution, so should be used inside async function with await operator.
let pageSource = await I.grabSource();
Returns Promise<string> source code
grabBrowserLogs
Get JS log from browser. Log buffer is reset after each request.
let logs = await I.grabBrowserLogs(); console.log(JSON.stringify(logs))
Returns Promise<(string | undefined)>
dontSeeInSource
Checks that the current page does not contains the given string in its raw source code.
I.dontSeeInSource('<!--'); // no comments in source
Parameters
textvaluestring to check.
seeNumberOfElements
Asserts that an element appears a given number of times in the DOM. Element is located by label or name or CSS or XPath.
I.seeNumberOfElements('#submitBtn', 1);
Parameters
locator(string | object) element located by CSS|XPath|strict locator.numnumber number of elements.{{ react }}
seeNumberOfVisibleElements
Asserts that an element is visible a given number of times. Element is located by CSS or XPath.
I.seeNumberOfVisibleElements('.buttons', 3);
Parameters
locator(string | object) element located by CSS|XPath|strict locator.numnumber number of elements.{{ react }}
seeAttributesOnElements
Checks that all elements with given locator have given attributes.
I.seeAttributesOnElements('//form', { method: "post"});
Parameters
locator(string | object) located by CSS|XPath|strict locator.attributesobject attributes and their values to check.
grabNumberOfVisibleElements
Grab number of visible elements by locator.
Resumes test execution, so should be used inside async function with await operator.
let numOfElements = await I.grabNumberOfVisibleElements('p');
Parameters
Returns Promise<number> number of visible elements
scrollTo
Scrolls to element matched by locator. Extra shift can be set with offsetX and offsetY options.
I.scrollTo('footer'); I.scrollTo('#submit', 5, 5);
Parameters
locator(string | object) located by CSS|XPath|strict locator.offsetXnumber (optional,0by default) X-axis offset. (optional, default0)offsetYnumber (optional,0by default) Y-axis offset. (optional, default0)
moveCursorTo
Moves cursor to element matched by locator. Extra shift can be set with offsetX and offsetY options.
I.moveCursorTo('.tooltip'); I.moveCursorTo('#submit', 5,5);
Parameters
locator(string | object) located by CSS|XPath|strict locator.xOffsetyOffsetoffsetXnumber (optional,0by default) X-axis offset. (optional, default0)offsetYnumber (optional,0by default) Y-axis offset. (optional, default0)
saveElementScreenshot
Saves screenshot of the specified locator to ouput folder (set in codecept.json or codecept.conf.js). Filename is relative to output folder.
I.saveElementScreenshot(`#submit`,'debug.png');
Parameters
locator(string | object) element located by CSS|XPath|strict locator.fileNamestring file name to save.
saveScreenshot
Saves a screenshot to ouput folder (set in codecept.json or codecept.conf.js).
Filename is relative to output folder.
Optionally resize the window to the full available page scrollHeight and scrollWidth to capture the entire page by passing true in as the second argument.
I.saveScreenshot('debug.png'); I.saveScreenshot('debug.png', true) //resizes to available scrollHeight and scrollWidth before taking screenshot
Parameters
fileNamestring file name to save.fullPageboolean (optional,falseby default) flag to enable fullscreen screenshot mode. (optional, defaultfalse)
type
Types out the given text into an active field.
To slow down typing use a second parameter, to set interval between key presses.
Note: Should be used when fillField is not an option.
// passing in a string I.type('Type this out.'); // typing values with a 100ms interval I.type('4141555311111111', 100); // passing in an array I.type(['T', 'E', 'X', 'T']);
Parameters
keysdelaynumber? (optional) delay in ms between key presses (optional, defaultnull)key(string | Array<string>) or array of keys to type.
dragAndDrop
Drag an item to a destination element.
I.dragAndDrop('#dragHandle', '#container');
Parameters
srcElement(string | object) located by CSS|XPath|strict locator.destElement(string | object) located by CSS|XPath|strict locator. Appium: not tested
dragSlider
Drag the scrubber of a slider to a given position For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath.
I.dragSlider('#slider', 30); I.dragSlider('#slider', -70);
Parameters
locator(string | object) located by label|name|CSS|XPath|strict locator.offsetXnumber position to drag. (optional, default0)
grabAllWindowHandles
Get all Window Handles.
Useful for referencing a specific handle when calling I.switchToWindow(handle)
const windows = await I.grabAllWindowHandles();
grabCurrentWindowHandle
Get the current Window Handle.
Useful for referencing it when calling I.switchToWindow(handle)
const window = await I.grabCurrentWindowHandle();
switchToWindow
Switch to the window with a specified handle.
const windows = await I.grabAllWindowHandles(); // ... do something await I.switchToWindow( windows[0] ); const window = await I.grabCurrentWindowHandle(); // ... do something await I.switchToWindow( window );
Parameters
window
closeOtherTabs
Close all tabs except for the current one.
switchTo
Switches frame or in case of null locator reverts to parent.
I.switchTo('iframe'); // switch to first iframe I.switchTo(); // switch back to main page
Parameters
locator(string? | object) (optional,nullby default) element located by CSS|XPath|strict locator. (optional, defaultnull)
grabNumberOfOpenTabs
Grab number of open tabs.
Resumes test execution, so should be used inside async function with await operator.
let tabs = await I.grabNumberOfOpenTabs();
Returns Promise<number> number of open tabs
scrollPageToTop
Scroll page to the top.
scrollPageToBottom
Scroll page to the bottom.
grabPageScrollPosition
Retrieves a page scroll position and returns it to test.
Resumes test execution, so should be used inside an async function with await operator.
let { x, y } = await I.grabPageScrollPosition();
Returns Promise<Object<string, any>> scroll position
setGeoLocation
Set the current geo location
I.setGeoLocation(121.21, 11.56); I.setGeoLocation(121.21, 11.56, 10);
Parameters
latitudenumber to set.longitudenumber to setaltitudenumber (optional, null by default) to set (optional, defaultnull)
grabGeoLocation
Return the current geo location
Resumes test execution, so should be used inside async function with await operator.
let geoLocation = await I.grabGeoLocation();
Returns Promise<{latitude: number, longitude: number, altitude: number}>
grabElementBoundingRect
Grab the width, height, location of given locator.
Provide width or heightas second param to get your desired prop.
Resumes test execution, so should be used inside an async function with await operator.
Returns an object with x, y, width, height keys.
const value = await I.grabElementBoundingRect('h3'); // value is like { x: 226.5, y: 89, width: 527, height: 220 }
To get only one metric use second parameter:
const width = await I.grabElementBoundingRect('h3', 'width'); // width == 527
Parameters
locator(string | object) element located by CSS|XPath|strict locator.propelementSizestring x, y, width or height of the given element.
Returns object Element bounding rectangle