# Appium
Extends Webdriver
Appium helper extends Webdriver (opens new window) 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 (opens new window)
npm install -g appium
Launch the daemon: appium
# Helper configuration
This helper should be configured in codecept.conf.ts or codecept.conf.js
appiumV2
: set this to true if you want to run tests with AppiumV2. See more how to setup here (opens new window)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"
}
}
}
}
Example Android App using AppiumV2 on BrowserStack:
{
helpers: {
Appium: {
appiumV2: true,
host: "hub-cloud.browserstack.com",
port: 4444,
user: process.env.BROWSERSTACK_USER,
key: process.env.BROWSERSTACK_KEY,
app: `bs://c700ce60cf1gjhgjh3ae8ed9770ghjg5a55b8e022f13c5827cg`,
browser: '',
desiredCapabilities: {
'appPackage': data.packageName,
'deviceName': process.env.DEVICE || 'Google Pixel 3',
'platformName': process.env.PLATFORM || 'android',
'platformVersion': process.env.OS_VERSION || '10.0',
'automationName': process.env.ENGINE || 'UIAutomator2',
'newCommandTimeout': 300000,
'androidDeviceReadyTimeout': 300000,
'androidInstallTimeout': 90000,
'appWaitDuration': 300000,
'autoGrantPermissions': true,
'gpsEnabled': true,
'isHeadless': false,
'noReset': false,
'noSign': true,
'bstack:options' : {
"appiumVersion" : "2.0.1",
},
}
}
}
}
Additional configuration params can be used from https://github.com/appium/appium/blob/master/packages/appium/docs/en/guides/caps.md (opens new window)
# Access From Helpers
Receive 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
caps
anyfn
any
# 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
caps
anyfn
any
# runInWeb
Execute code only in Web mode.
I.runInWeb(() => {
I.waitForElement('#data');
I.seeInCurrentUrl('/data');
});
# checkIfAppIsInstalled
Returns app installation status.
I.checkIfAppIsInstalled("com.example.android.apis");
# Parameters
bundleId
string (opens new window) String ID of bundled app
Returns Promise (opens new window)<boolean (opens new window)> Appium: support only Android
# seeAppIsInstalled
Check if an app is installed.
I.seeAppIsInstalled("com.example.android.apis");
# Parameters
bundleId
string (opens new window) String ID of bundled app
Returns Promise (opens new window)<void> Appium: support only Android
# seeAppIsNotInstalled
Check if an app is not installed.
I.seeAppIsNotInstalled("com.example.android.apis");
# Parameters
bundleId
string (opens new window) String ID of bundled app
Returns Promise (opens new window)<void> Appium: support only Android
# installApp
Install an app on device.
I.installApp('/path/to/file.apk');
# Parameters
path
string (opens new window) path to apk file
Returns Promise (opens new window)<void> Appium: support only Android
# removeApp
Remove an app from the device.
I.removeApp('appName', 'com.example.android.apis');
Appium: support only Android
# Parameters
appId
string (opens new window)bundleId
string (opens new window)? ID of bundle
# resetApp
Reset the currently running app for current session.
I.resetApp();
# seeCurrentActivityIs
Check current activity on an Android device.
I.seeCurrentActivityIs(".HomeScreenActivity")
# Parameters
currentActivity
string (opens new window)
Returns Promise (opens new window)<void> Appium: support only Android
# seeDeviceIsLocked
Check whether the device is locked.
I.seeDeviceIsLocked();
Returns Promise (opens new window)<void> Appium: support only Android
# seeDeviceIsUnlocked
Check whether the device is not locked.
I.seeDeviceIsUnlocked();
Returns Promise (opens new window)<void> 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
Returns Promise (opens new window)<void>
# 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();
Returns Promise (opens new window)<Array (opens new window)<string (opens new window)>> Appium: support Android and iOS
# grabContext
Retrieve current context
let context = await I.grabContext();
Returns Promise (opens new window)<(string (opens new window) | null)> Appium: support Android and iOS
# grabCurrentActivity
Get current device activity.
let activity = await I.grabCurrentActivity();
Returns Promise (opens new window)<string (opens new window)> 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();
Returns Promise (opens new window)<{}> Appium: support only Android
# grabOrientation
Get current orientation.
let orientation = await I.grabOrientation();
Returns Promise (opens new window)<string (opens new window)> Appium: support Android and iOS
# grabSettings
Get all the currently specified settings.
let settings = await I.grabSettings();
Returns Promise (opens new window)<string (opens new window)> Appium: support Android and iOS
# switchToContext
Switch to the specified context.
# Parameters
context
any 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
context
string (opens new window)?
Returns Promise (opens new window)<void>
# 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
context
any? (optional, defaultnull
)
Returns Promise (opens new window)<void>
# startActivity
Start an arbitrary Android activity during a session.
I.startActivity('io.selendroid.testapp', '.RegisterUserActivity');
Appium: support only Android
# Parameters
appPackage
string (opens new window)appActivity
string (opens new window)
Returns Promise (opens new window)<void>
# 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 (opens new window).
Appium: support only Android
# Parameters
value
number (opens new window) The network connection mode bitmask
Returns Promise (opens new window)<number (opens new window)>
# setSettings
Update the current setting on the device
I.setSettings({cyberdelia: 'open'});
# Parameters
settings
object (opens new window) 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');
Appium: support Android and iOS
# Parameters
strategy
("tapOutside"
|"pressKey"
)? Desired strategy to close keyboard (βtapOutsideβ or βpressKeyβ)key
string (opens new window)? Optional key
# sendDeviceKeyEvent
Send a key event to the device. List of keys: https://developer.android.com/reference/android/view/KeyEvent.html (opens new window)
I.sendDeviceKeyEvent(3);
# Parameters
keyValue
number (opens new window) Device specific key value
Returns Promise (opens new window)<void> Appium: support only Android
# openNotifications
Open the notifications panel on the device.
I.openNotifications();
Returns Promise (opens new window)<void> 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 (opens new window)
I.makeTouchAction("~buttonStartWebviewCD", 'tap');
# Parameters
locator
action
Returns Promise (opens new window)<void> Appium: support Android and iOS
# tap
Taps on element.
I.tap("~buttonStartWebviewCD");
Shortcut for makeTouchAction
# Parameters
locator
any
Returns Promise (opens new window)<void>
# swipe
Perform a swipe on the screen or an element.
let locator = "#io.selendroid.testapp:id/LinearLayout1";
I.swipe(locator, 800, 1200, 1000);
See complete reference (opens new window)
# Parameters
locator
(string (opens new window) | object (opens new window))xoffset
number (opens new window)yoffset
number (opens new window)speed
number (opens new window) (optional), 1000 by default (optional, default1000
)
Returns Promise (opens new window)<void> Appium: support Android and iOS
# performSwipe
Perform a swipe on the screen.
I.performSwipe({ x: 300, y: 100 }, { x: 200, y: 100 });
# Parameters
from
object (opens new window)to
object (opens new window) Appium: support Android and iOS
# 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 (opens new window) | object (opens new window))yoffset
number (opens new window)? (optional) (optional, default1000
)speed
number (opens new window) (optional), 1000 by default (optional, default1000
)
Returns Promise (opens new window)<void> Appium: support Android and iOS
# 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 (opens new window) | object (opens new window))xoffset
number (opens new window)? (optional) (optional, default1000
)speed
number (opens new window) (optional), 1000 by default (optional, default1000
)
Returns Promise (opens new window)<void> Appium: support Android and iOS
# 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 (opens new window) | object (opens new window))xoffset
number (opens new window)? (optional) (optional, default1000
)speed
number (opens new window) (optional), 1000 by default (optional, default1000
)
Returns Promise (opens new window)<void> Appium: support Android and iOS
# 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 (opens new window) | object (opens new window))yoffset
number (opens new window)? (optional) (optional, default1000
)speed
number (opens new window) (optional), 1000 by default (optional, default1000
)
Returns Promise (opens new window)<void> Appium: support Android and iOS
# 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
searchableLocator
string (opens new window)scrollLocator
string (opens new window)direction
string (opens new window)timeout
number (opens new window)offset
number (opens new window)speed
number (opens new window)
Returns Promise (opens new window)<void> 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
Array (opens new window) Array of touch 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);
# Parameters
Returns Promise (opens new window)<string (opens new window)> Appium: support Android and iOS
# shakeDevice
Perform a shake action on the device.
I.shakeDevice();
Returns Promise (opens new window)<void> Appium: support only iOS
# rotate
Perform a rotation gesture centered on the specified element.
I.rotate(120, 120)
See corresponding webdriverio reference (opens new window).
# Parameters
x
y
duration
radius
rotation
touchCount
Returns Promise (opens new window)<void> Appium: support only iOS
# setImmediateValue
Set immediate value in app.
See corresponding webdriverio reference (opens new window).
# Parameters
id
value
Returns Promise (opens new window)<void> Appium: support only iOS
# 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
# Parameters
match
Returns Promise (opens new window)<void> Appium: support only iOS TODO: not tested
# closeApp
Close the given application.
I.closeApp();
Returns Promise (opens new window)<void> Appium: support both Android and iOS
# appendField
Appends text to a input field or textarea. Field is located by name, label, CSS or XPath
I.appendField('#myTextField', 'appended');
// typing secret
I.appendField('password', secret('123456'));
# Parameters
field
(string (opens new window) | object (opens new window)) located by label|name|CSS|XPath|strict locatorvalue
string (opens new window) text value to append.
Returns void automatically synchronized promise through #recorder
# 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 (opens new window) | object (opens new window)) checkbox located by label | name | CSS | XPath | strict locator.context
(string (opens new window)? | object (opens new window)) (optional,null
by default) element located by CSS | XPath | strict locator. (optional, defaultnull
)
Returns void automatically synchronized promise through #recorder
# 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 (opens new window) | object (opens new window)) clickable link or button located by text, or any element located by CSS|XPath|strict locator.context
(string (opens new window)? | object (opens new window) | null) (optional,null
by default) element to search in CSS|XPath|Strict locator. (optional, defaultnull
)
Returns void automatically synchronized promise through #recorder
# 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
field
(string (opens new window) | object (opens new window)) located by label|name|CSS|XPath|strict locator.
Returns void automatically synchronized promise through #recorder
# dontSeeElement
Opposite to seeElement
. Checks that element is not visible (or in DOM)
I.dontSeeElement('.modal'); // modal is not shown
# Parameters
locator
(string (opens new window) | object (opens new window)) located by CSS|XPath|Strict locator.
Returns void automatically synchronized promise through #recorder
# dontSeeInField
Checks that value of input field or textarea doesn't equal to given value
Opposite to seeInField
.
I.dontSeeInField('email', '[email protected]'); // field by name
I.dontSeeInField({ css: 'form input.email' }, '[email protected]'); // field by CSS
# Parameters
field
(string (opens new window) | object (opens new window)) located by label|name|CSS|XPath|strict locator.value
(string (opens new window) | object (opens new window)) value to check.
Returns void automatically synchronized promise through #recorder
# 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
text
string (opens new window) which is not present.context
(string (opens new window) | object (opens new window))? (optional) element located by CSS|XPath|strict locator in which to perfrom search. (optional, defaultnull
)
Returns void automatically synchronized promise through #recorder
# 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', '[email protected]');
// 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 (opens new window) | object (opens new window)) located by label|name|CSS|XPath|strict locator.value
(string (opens new window) | object (opens new window)) text value to fill.
Returns void automatically synchronized promise through #recorder
# grabTextFromAll
Retrieves all texts 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 pins = await I.grabTextFromAll('#pin li');
# Parameters
locator
(string (opens new window) | object (opens new window)) element located by CSS|XPath|strict locator.
Returns Promise (opens new window)<Array (opens new window)<string (opens new window)>> attribute value
# 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 first element.
# Parameters
locator
(string (opens new window) | object (opens new window)) element located by CSS|XPath|strict locator.
Returns Promise (opens new window)<string (opens new window)> attribute value
# 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
locator
(string (opens new window) | object (opens new window)) located by CSS|XPath|strict locator.
Returns Promise (opens new window)<number (opens new window)> number of visible elements
# grabAttributeFrom
Can be used for apps only with several values ("contentDescription", "text", "className", "resourceId")
Retrieves an attribute 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.
If more than one element is found - attribute of first element is returned.
let hint = await I.grabAttributeFrom('#tooltip', 'title');
# Parameters
locator
(string (opens new window) | object (opens new window)) element located by CSS|XPath|strict locator.attr
string (opens new window) attribute name.
Returns Promise (opens new window)<string (opens new window)> attribute value
# grabAttributeFromAll
Can be used for apps only with several values ("contentDescription", "text", "className", "resourceId")
Retrieves an array of attributes from elements located by CSS or XPath and returns it to test.
Resumes test execution, so should be used inside async with await
operator.
let hints = await I.grabAttributeFromAll('.tooltip', 'title');
# Parameters
locator
(string (opens new window) | object (opens new window)) element located by CSS|XPath|strict locator.attr
string (opens new window) attribute name.
Returns Promise (opens new window)<Array (opens new window)<string (opens new window)>> attribute value
# grabValueFromAll
Retrieves an array of value from a form located by CSS or XPath and returns it to test.
Resumes test execution, so should be used inside async function with await
operator.
let inputs = await I.grabValueFromAll('//form/input');
# Parameters
locator
(string (opens new window) | object (opens new window)) field located by label|name|CSS|XPath|strict locator.
Returns Promise (opens new window)<Array (opens new window)<string (opens new window)>> 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.
If more than one element is found - value of first element is returned.
let email = await I.grabValueFrom('input[name=email]');
# Parameters
locator
(string (opens new window) | object (opens new window)) field located by label|name|CSS|XPath|strict locator.
Returns Promise (opens new window)<string (opens new window)> attribute value
# saveScreenshot
Saves a screenshot to ouput folder (set in codecept.conf.ts or codecept.conf.js). Filename is relative to output folder.
I.saveScreenshot('debug.png');
# Parameters
fileName
string (opens new window) file name to save.
Returns Promise (opens new window)<void>
# scrollIntoView
Scroll element into viewport.
I.scrollIntoView('#submit');
I.scrollIntoView('#submit', true);
I.scrollIntoView('#submit', { behavior: "smooth", block: "center", inline: "center" });
# Parameters
locator
(string (opens new window) | object (opens new window)) located by CSS|XPath|strict locator.scrollIntoViewOptions
(ScrollIntoViewOptions | boolean (opens new window)) either alignToTop=true|false or scrollIntoViewOptions. See https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView (opens new window).
Returns void automatically synchronized promise through #recorderSupported 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
field
(string (opens new window) | object (opens new window)) located by label|name|CSS|XPath|strict locator.
Returns void automatically synchronized promise through #recorder
# seeElement
Checks that a given Element is visible Element is located by CSS or XPath.
I.seeElement('#modal');
# Parameters
locator
(string (opens new window) | object (opens new window)) located by CSS|XPath|strict locator.
Returns void automatically synchronized promise through #recorder
# 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 (opens new window) | object (opens new window)) located by label|name|CSS|XPath|strict locator.value
(string (opens new window) | object (opens new window)) value to check.
Returns void automatically synchronized promise through #recorder
# 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
text
string (opens new window) expected on page.context
(string (opens new window)? | object (opens new window)) (optional,null
by default) element located by CSS|Xpath|strict locator in which to search for text. (optional, defaultnull
)
Returns void automatically synchronized promise through #recorder
# 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 (opens new window) | object (opens new window)) field located by label|name|CSS|XPath|strict locator.option
(string (opens new window) | Array (opens new window)<any>) visible text or value of option.
Returns void automatically synchronized promise through #recorderSupported 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 (opens new window) | object (opens new window)) element located by CSS|XPath|strict locator.sec
number (opens new window)? (optional,1
by default) time in seconds to wait (optional, defaultnull
)
Returns void automatically synchronized promise through #recorder
# 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 (opens new window) | object (opens new window)) element located by CSS|XPath|strict locator.sec
number (opens new window) (optional,1
by default) time in seconds to wait (optional, default1
)
Returns void automatically synchronized promise through #recorder
# 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 (opens new window) | object (opens new window)) element located by CSS|XPath|strict locator.sec
number (opens new window) (optional,1
by default) time in seconds to wait (optional, default1
)
Returns void automatically synchronized promise through #recorder
# 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
text
string (opens new window) to wait for.sec
number (opens new window) (optional,1
by default) time in seconds to wait (optional, default1
)context
(string (opens new window) | object (opens new window))? (optional) element located by CSS|XPath|strict locator. (optional, defaultnull
)
Returns void automatically synchronized promise through #recorder