appium-chromium-driver
Version:
Appium 2.x driver for Chromium-based browsers that work with Chromedriver
136 lines (100 loc) • 6.23 kB
Markdown
# appium-chromium-driver
[](https://npmjs.org/package/appium-chromium-driver)
[](https://npmjs.org/package/appium-chromium-driver)
This is an [Appium](https://github.com/appium/appium) driver for Chromium-based browsers (like
Chrome).
### Why does this project exist?
It is already possible to automate Chromium browsers with
[Chromedriver](https://chromedriver.chromium.org/). In fact, this Appium driver uses Chromedriver
under the hood! It is not any kind of fundamentally new or different technology. The advantages of
using this project are:
- Automate Chromium browsers using the Appium server you already have, simply by including this
Appium driver.
- No need to download specific versions of Chromedriver manually. This driver takes care of
downloading a version of Chromedriver appropriate for the version of the browser under test.
- Take advantage of the ecosystem of Appium plugins and features (e.g., [image
analysis](https://github.com/appium/appium/tree/master/packages/images-plugin)) not available via
Chromedriver on its own.
## Installation
It's assumed that you have an Appium server (version 2.x+) installed, and that you have a browser
compatible with Chromedriver ready to automate on your system. The recommended installation method
is to use the [Appium extension
CLI](https://appium.github.io/appium/docs/en/latest/cli/extensions/) to install the driver:
```bash
appium driver install chromium
```
> **Note**
> MSEdge browser support started since v1.1.0
## Usage
To start an automation session targeting this driver, construct a set of options/capabilities in
any WebDriver client that (minimally) includes the following:
|Capability|Value|
|---|---|
|`platformName`|One of `macOS`, `mac`, `Linux`, or `Windows` (depending on your system)|
|`browserName`|`browserName` to the running WebDriver process. For example, `chrome` or `chromium` is for chromedriver, `MicrosoftEdge` or `msedge` is for msedge driver.|
|`appium:automationName`|`Chromium`|
Use these capabilities to start a new session. (Refer to the documentation for your WebDriver
client for the particular syntax used to start a session in that client).
At this point, all WebDriver commands are proxied directly to WebDriver. This driver does not
implement any additional commands. Refer to the Chromedriver documentation or the [WebDriver
specification](https://w3c.github.io/webdriver/) for a list of the available automation commands.
> **Note**
> Supported _WebDriver_ kinds are `chromedriver` for Chrome and Chromium browsers and `msedgedriver` for MSEdge.
## Capabilities
In addition to all of the [Chromedriver
capabilities](https://chromedriver.chromium.org/capabilities) (nested underneath
`goog:chromeOptions` for Chrome and Chromium or `ms:edgeOptions` for MSEdge),
this driver supports the following:
|Capability|Description|Default Value|
|---|---|---|
|`appium:chromedriverPort`|The port to start WebDriver process on|`9515`|
|`appium:executable`|The absolute path to a WebDriver binary executable. If set, the driver will use that path instead of its own WebDriver||
|`appium:executableDir`|A directory within which is found any number of WebDriver binaries. If set, the driver will search this directory for WebDrivers of the appropriate version to use for your browser||
|`appium:verbose`|Set to `true` to add the `--verbose` flag when starting WebDriver|`false`|
|`appium:logPath`|The path to use with the `--log-path` parameter directing WebDriver to write its log to that path, if set||
|`appium:disableBuildCheck`|Set to `true` to add the `--disable-build-check` flag when starting WebDriver|`false`|
|`appium:autodownloadEnabled`|Set to `false` to disable automatic downloading of Chromedrivers. |`true`|
|`appium:useSystemExecutable`|Set to `true` to use the version of WebDriver bundled with this driver, rather than attempting to download a new one based on the version of the browser under test|`false`|
> **Note**
> `msedgedriver` support is limited. `appium:autodownloadEnabled` does not work for the driver, thus `appium:executable` is necessary to automate MSEdge browser properly.
## Scripts
### install-chromedriver
This script is used to install the given or latest stable version of chromedriver (113+) from
[Chrome for testing](https://github.com/GoogleChromeLabs/chrome-for-testing)
with `appium driver run chromium install-chromedriver`.
Please read [Version selection](https://developer.chrome.com/docs/chromedriver/downloads/version-selection) document
to find a proper chromedriver manually that is good for your current browser.
Below environment arguments are available:
- `CHROMEDRIVER_EXECUTABLE_DIR`
- Let the command to download chromedrivers in the given directory. Defaults to `node_modules/appium-chromedriver/chromedriver` in `appium-chromium-driver` package.
- i.e.
- macOS/Linux: `CHROMEDRIVER_EXECUTABLE_DIR=/path/to/dir appium driver run chromium install-chromedriver`
- Windows: `$env:CHROMEDRIVER_EXECUTABLE_DIR='C:\path\to\folder'; appium driver run chromium install-chromedriver; Remove-Item Env:\CHROMEDRIVER_EXECUTABLE_DIR`
- `CHROMEDRIVER_VERSION`
- Let the command download a specific version.
- i.e.
- macOS/Linux: `CHROMEDRIVER_VERSION=131.0.6778.3 appium driver run chromium install-chromedriver`
- Windows: `$env:CHROMEDRIVER_VERSION='131.0.6778.3'; appium driver run chromium install-chromedriver; Remove-Item Env:\CHROMEDRIVER_VERSION`
- `CHROMELABS_URL`
- Let the command get the list of available chromedrivers from the given mirror instead of the default one.
## Contributing
Contributions to this project are welcome! Feel free to submit a PR on GitHub.
To get set up with a working developer environment, clone the project then run:
```bash
npm install
```
To build the code once:
```bash
npm run build
```
To rebuild the code anytime a file is saved:
```bash
npm run dev
```
Before committing any code, please make sure to run:
```bash
npm run lint
npm run test:ci
```
And make sure everything passes!
More developer scripts can be found in `package.json`.