This documentation is deprecated. Please refer to the README in the Appium repository or Appium 2.0 documentation.
Edit this Doc Execute Driver Script
Run a WebdriverIO script against the current session, allowing execution of many commands in one Appium request.
Example Usage
String script = "const el = await driver.$('~foo');\n"
+ "await el.click();"
driver.executeDriverScript(script, new ScriptOptions().withTimeout(200));
import textwrap
script = """
const el = await driver.$('~foo');
await el.click();
"""
response = driver.execute_driver(script=textwrap.dedent(script))
// webdriver.io example
const script = `
const el = await driver.$('~foo');
await el.click();
`;
await driver.executeDriver(script);
// wd example
const script = `
const el = await driver.$('~foo');
await el.click();
`;
await driver.executeDriver(script, {timeout: 200});
# ruby_lib example
script = <<-SCRIPT
const status = await driver.status();
return status;
SCRIPT
driver.execute_driver script: script
# ruby_lib_core example
script = <<-SCRIPT
const status = await driver.status();
return status;
SCRIPT
@driver.execute_driver script: script
// TODO C# sample
Description
One downside of Appium's client-server architecture is that each command must travel across a network with potentially high latency. This is especially the case in situations where the Appium session takes place on a service provider's host machine rather than locally.
This command enables the batching of many commands together, to be executed in one go on the Appium server. The way this is accomplished is on the model of executeScript
: the client will send in a string representing code to be executed. The Appium server will execute that code in the context of the current session, and return any values specified by the script.
There are three parameters accepted by this command (which may be collected by each client in its own way):
* script
: the string consisting of the script itself
* timeout
: a number representing the number of milliseconds to wait before killing the process running the driver script. Default is equivalent to 1 hour.
* type
: a string representing the script language/API. Currently only one type, webdriverio
, is supported (and it is the default).
Not just any code can run in this context. The code must be written in Javascript, and it will have access to a context with three objects
* driver
: a WebdriverIO driver object. It may be assumed this driver has already connected with the Appium server and is ready to run commands. The version of WebdriverIO used is the one installed according to the specification in appium-base-driver
's package.json
file.
* console
: a custom console
object, with methods log
, warn
, and error
, so that logging may take place.
* Promise
: a Promise library (Bluebird), to make asynchronous work easier.
The code will be placed inside an async
function, as below, so you are free to use await
:
(async function (driver, console, Promise) {
// --> your script here <--
})()
Any errors will result in an error response to the call to this command. Any return values will be wrapped up and sent back to your client in the following form:
{result: <return value>, logs: {log: [], warn: [], error: []}}
Using this response object you can gather the return value as well as the output of any log statements you made.
The advantage of this approach of using WebdriverIO code is that you have access to a full programming language and Appium API, and can use any language or API features you need, including loops, conditionals, and explicit waits. The WebdriverIO API cannot be enumerated here, so visit the WebdriverIO documentation for more info.
Support
Appium Server
Platform | Driver | Platform Versions | Appium Version | Driver Version |
---|---|---|---|---|
iOS | XCUITest | 9.3+ | 1.6.0+ | All |
UIAutomation | 8.0 to 9.3 | All | All | |
Android | UiAutomator2 | ?+ | 1.6.0+ | All |
Espresso | ?+ | 1.9.0+ | All | |
UiAutomator | 4.3+ | All | All | |
Mac | Mac | ?+ | 1.6.4+ | All |
Windows | Windows | 10+ | 1.6.0+ | All |
Appium Clients
Language | Support | Documentation |
---|---|---|
Java | All | javadoc.io |
Python | None | appium.github.io |
Javascript (WebdriverIO) | None | |
Javascript (WD) | None | |
Ruby | None | www.rubydoc.info |
C# | None |
HTTP API Specifications
Endpoint
POST /session/:session_id/appium/execute_driver
URL Parameters
name | description |
---|---|
session_id | ID of the session to route the command to |
JSON Parameters
name | type | description |
---|---|---|
script | string |
The webdriverio script to execute |
type | string |
The name of the script type. Currently only 'webdriverio' is supported |
timeout | number |
The number of ms Appium should wait for the script to finish before killing it due to timeout |
Response
The script result. It will have two fields: result
and logs
. Result will be the return value of the script. Logs will contain the content of anything logged from the console
object by the script. (any
)