---
title: Options you can use during Automated Testing.
description: Options you can specify during automated web and mobile testing.
source_url:
  html: https://testingbot.com/support/web-automate/selenium/test-options
  md: https://testingbot.com/support/web-automate/selenium/test-options.md
---

# Selenium Test Options

This page offers an overview of all the various options you can specify when starting an automated Selenium test.

The **Selenium-Specific Settings** are required to run automated Selenium tests: `browserName`, `browserVersion` and `platformName`.

The other options are **TestingBot Options** , these allow you to customize your test in terms of specific driver versions, privacy options, platform options and more.

The [Selenium Capabilities generator](https://testingbot.com/support/web-automate/selenium/capabilities) allows you to easily generate the necessary capabilities for your tests.

## Required Selenium Settings

### Browser Name

The name of the browser to run your automated test on. Please see our [list of browsers](https://testingbot.com/support/web-automate/browsers) that we support.

The `browserName` is a required field that needs to be passed to us via Selenium's [Desired Capabilities](https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities).

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["browserName"] = "chrome"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("browserName", "chrome");
```

```php
$caps = array(
  "browserName" => "chrome"
);
```

```python
capabilities = {
  "browserName" : "chrome"
}
```

```javascript
const capabilities = {
  "browserName" : "chrome"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("browserName", "chrome");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  browserName: "chrome"
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample'
}

chromeOpts = {
    'browserName': "chrome",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = TestContext.CurrentContext.Test.Name
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

### Browser Version

The version of the browser to run your automated test on. Please see our [list of browsers + versions](https://testingbot.com/support/web-automate/browsers) that we support.

The `version` is a required field that needs to be passed to us via Selenium's [Desired Capabilities](https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities).

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["version"] = "81"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("version", "81");
```

```php
$caps = array(
  "version" => "81"
);
```

```python
capabilities = {
  "version" : "81"
}
```

```javascript
const capabilities = {
	 "version" : "81"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("version", "81");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  browserName: "chrome",
  browserVersion: "latest"
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("browserVersion", "latest");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setVersion(81);
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample'
}

chromeOpts = {
    'browserName': "chrome",
    'browserVersion': 'latest',
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "browserVersion": "latest",
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = TestContext.CurrentContext.Test.Name
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

Other Options:
- `"version": "*"` : If you use `*` as version, TestingBot will pick a random version. 
- `"version": "latest"` : TestingBot will automatically take the latest version. You can also use `latest-1`, `latest-2`, ... to test on the next most recent versions. For example, if the current latest Firefox version is 81 and you use `latest-2`, then the test will run on Firefox 79. 
- `"version": "<=16"` : TestingBot will pick a version smaller than or equal to the version you specify with `<=`.   
`"version": "16>="` : TestingBot will pick a version higher than or equal to the version you specify with `>=`. 

### Platform

Indicates on which operating system the test should run. Please see a [list of platforms](https://testingbot.com/support/web-automate/browsers) that we currently support.

The `platform` is a required field that needs to be passed to us via Selenium's [Desired Capabilities](https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities).

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["platform"] = "WIN11"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("platform", "WIN11");
```

```php
$caps = array(
  "platform" => "WIN11"
);
```

```python
capabilities = {
  "platform" : "WIN11"
}
```

```javascript
const capabilities = {
	 "platform" : "WIN11"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("platform", "WIN11");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platform_name: "WIN11"	
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample'
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = TestContext.CurrentContext.Test.Name
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

### Device Name

When running a mobile automated test, you'll need to specify on which [mobile device](https://testingbot.com/support/app-automate/devices) (or [simulator/emulator](https://testingbot.com/support/web-automate/browsers)) you want to test.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  deviceName: "Pixel 9"	
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "Android");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("appium:deviceName", "Pixel 9");
```

```python
tbOptions = {
	'name': 'W3C Sample'
}

chromeOpts = {
    'deviceName': "Pixel 9",
    'platformName': "Android",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "appium:deviceName": 'Pixel 9',
    "platformName": 'Android',
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    PlatformName = "Android",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = TestContext.CurrentContext.Test.Name,
    ["appium:deviceName"] = "Pixel 9"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

We offer regex/wildcard parameters which you can use to allocate a device:

| Regex Input | Result |
| --- | --- |
| `"iPhone.*"` | This will allocate any available iPhone device (phone) |
| `".*Galaxy.*"` | This will allocate any of the available Galaxy devices (phone or tablet) |
| `"*"` | This will allocate a random available device, either iOS or Android device |
| `"iPhone [8-11]"` | This will allocate either an iPhone 8 or 11 |
| `"iPhone 6.*"` | This will allocate either an iPhone 6 or 6S |

Some Examples:

```javascript
// find any iPhone, except 6 or 6s
capabilities.setCapability("appium:deviceName", "^(iPhone.*)(?!6|6S)$");

// find any device which name starts with Galaxy
capabilities.setCapability("appium:deviceName", "Galaxy.*");
```

### Device Version

You can specify the version of the device you want to target. In case of physical devices, you might want to use regex/wildcard patterns to target a broad range of devices. This way your chance of hitting an occupied device during your automated test decreases significantly.

Instead of only targeting a specific iOS or Android device, you can target a wider range of devices.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  version: "(16|17).*"	
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("appium:platformName", "Android");
caps.setCapability("appium:deviceName", "*");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("appium:version", "(13|14).*");
```

```python
tbOptions = {
	'name': 'W3C Sample'
}

chromeOpts = {
    'appium:deviceName': "*",
    'appium:version': '(13|14).*',
    'platformName': "Android",
    'goog:chromeOptions': {'w3c': True}
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "appium:deviceName": '*',
    "appium:version": '(13|14).*',
    "platformName": 'Android',
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    PlatformName = "Android"
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = TestContext.CurrentContext.Test.Name,
    ["deviceName"] = "*",
    ["version"] = "(13|14).*"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

Some Examples:

```javascript
// target multiple specific versions of an iPhone device
capabilities.setCapability("appium:deviceName", "iPhone.*");
capabilities.setCapability("appium:version", "15.0|14.2|14|13.4|13.3");

// find any Galaxy device with Android version 13 or 14
capabilities.setCapability("appium:deviceName", "Galaxy.*");
capabilities.setCapability("appium:version", "(13|14).*");
```

### Tablet Only

You can specify this capability when you only want to allocate a tablet device.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  deviceName: "*",
  tabletOnly: true
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("tabletOnly", true);
tbOptions.setCapability("deviceName", "*");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "Android");
caps.setCapability("tb:options", tbOptions);
```

```python
tbOptions = {
	'name': 'W3C Sample'
}

chromeOpts = {
    'deviceName': "*",
    'tabletOnly': true,
    'platformName': "Android",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "deviceName": '*',
    "platformName": 'Android',
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "tabletOnly": true
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    PlatformName = "Android",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = TestContext.CurrentContext.Test.Name,
    ["deviceName"] = "*",
    ["tabletOnly"] = true
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

### Phone Only

You can specify this capability when you only want to allocate a phone device.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  deviceName: "*",
  phoneOnly: true
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("phoneOnly", true);
tbOptions.setCapability("deviceName", "*");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "Android");
caps.setCapability("tb:options", tbOptions);
```

```python
tbOptions = {
	'name': 'W3C Sample'
}

chromeOpts = {
    'deviceName': "*",
    'phoneOnly': true,
    'platformName': "Android",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "deviceName": '*',
    "platformName": 'Android',
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "phoneOnly": true
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    PlatformName = "Android",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = TestContext.CurrentContext.Test.Name,
    ["deviceName"] = "*",
    ["phoneOnly"] = true
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

### Use a specific version of Selenium

By default we use Selenium version `2.53.1` to run your test.   
 If you wish to use another Selenium version for your test, please specify one of the following available versions:

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["selenium-version"] = '2.53.1'
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("selenium-version", "2.53.1");
```

```php
$caps = array(
  "selenium-version" => "2.53.1"
);
```

```python
capabilities = {
  "selenium-version" : '2.53.1'
}
```

```javascript
const capabilities = {
  "selenium-version" : '2.53.1'
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("selenium-version", "2.53.1");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "selenium-version" : '2.53.1'
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("selenium-version", "2.53.1");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'selenium-version' => '2.53.1'
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'selenium-version': '2.53.1'
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "selenium-version": '2.53.1'
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["selenium-version"] = "2.53.1"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | "2.53.1" | 4.41.0 4.40.0 4.39.0 4.38.0 4.37.0 4.36.0 4.35.0 4.34.0 4.33.0 4.32.0 4.31.0 4.30.0 4.29.0 4.28.1 4.28.0 4.27.0 4.26.0 4.25.0 4.24.0 4.23.1 4.23.0 4.22.0 4.21.0 4.20.0 4.19.0 4.18.1 4.18.0 4.17.0 4.16.1 4.16.0 4.15.0 4.14.1 4.14.0 4.13.0 4.12.1 4.12.0 4.11.0 4.10.0 4.9.0 4.8.3 4.8.2 4.8.1 4.8.0 4.7.0 4.6.0 4.5.3 4.5.2 4.5.1 4.5.0 4.4.0 4.3.0 4.2.2 4.2.1 4.2.0 4.1.3 4.1.2 4.1.1 4.1.0 4.0.0 4.0.0-beta-4 4.0.0-beta-3 4.0.0-beta-2 4.0.0-beta-1 4.0.0-alpha-7 4.0.0-alpha-6 3.141.59 3.141.5 3.141.0 3.14.0 3.13.0 3.12.0 3.11.0 3.10.0 3.9.0 3.8.1 3.8.0 3.7.1 3.7.0 3.6.0 3.5.3 3.5.2 3.5.1 3.5.0 3.4.0 3.3.1 3.3.0 3.2.0 3.1.0 3.0.1 2.53.1 2.53.0 2.52.0 2.51.0 2.50.0 2.49.0 2.48.2 2.48.1 2.48.0 |

### Chromedriver

We support using custom ChromeDriver versions during your tests. By default the most recent Chromedriver is used according to the version of Chrome you're testing on.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["chromedriverVersion"] = "76.0.3809.25"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("chromedriverVersion", "76.0.3809.25");
```

```php
$caps = array(
  "chromedriverVersion" => "76.0.3809.25"
);
```

```python
capabilities = {
  "chromedriverVersion" : "76.0.3809.25"
}
```

```javascript
const capabilities = {
  "chromedriverVersion" : "76.0.3809.25"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("chromedriverVersion", "76.0.3809.25");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "chromedriverVersion" : "76.0.3809.25"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("chromedriverVersion", "76.0.3809.25");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'chromedriverVersion' => "76.0.3809.25"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'chromedriverVersion': "76.0.3809.25"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "chromedriverVersion": "76.0.3809.25"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11"
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["chromedriverVersion"] = "76.0.3809.25"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | "2.46" | dev 149.0.7795.2 148.0.7778.40 147.0.7727.3 146.0.7680.0 145.0.7632.76 145.0.7561.2 144.0.7559.3 143.0.7499.40 142.0.7444.59 141.0.7390.54 140.0.7339.80 139.0.7207.2 138.0.7153.0 137.0.7117.2 136.0.7064.0 135.0.6999.2 134.0.6958.2 133.0.6943.16 132.0.6811.2 131.0.6778.3 130.0.6669.2 129.0.6614.3 128.0.6613.18 127.0.6533.88 127.0.6485.0 126.0.6423.2 125.0.6422.4 124.0.6367.60 124.0.6356.2 123.0.6262.5 122.0.6253.3 121.0.6154.0 121.0.6129.0 120.0.6099.5 119.0.6045.9 118.0.5979.0 117.0.5938.0 116.0.5845.82 115.0.5790.170 115.0.5790.90 114.0.5735.90 114.0.5735.16 113.0.5672.63 113.0.5672.24 112.0.5615.49 112.0.5615.28 111.0.5563.64 111.0.5563.41 111.0.5563.19 110.0.5481.77 110.0.5481.30 109.0.5414.74 109.0.5414.25 108.0.5359.71 108.0.5359.22 107.0.5304.62 107.0.5304.18 106.0.5249.61 106.0.5249.21 105.0.5195.52 105.0.5195.19 104.0.5112.79 104.0.5112.29 104.0.5112.20 103.0.5060.134 103.0.5060.24 102.0.5005.61 102.0.5005.27 101.0.4951.41 101.0.4951.15 100.0.4896.60 100.0.4896.20 99.0.4844.51 99.0.4844.35 99.0.4844.17 98.0.4758.80 98.0.4758.48 97.0.4692.71 97.0.4692.36 97.0.4692.20 96.0.4664.45 95.0.4638.10 94.0.4606.41 93.0.4577.15 92.0.4515.43 91.0.4472.101 91.0.4472.19 90.0.4430.24 89.0.4389.23 88.0.4324.96 88.0.4324.27 87.0.4280.88 87.0.4280.20 86.0.4240.22 85.0.4183.87 85.0.4183.83 85.0.4183.38 84.0.4147.30 83.0.4103.39 83.0.4103.14 81.0.4044.69 81.0.4044.20 80.0.3987.16 79.0.3945.36 79.0.3945.16 78.0.3904.70 78.0.3904.11 77.0.3865.40 77.0.3865.10 76.0.3809.68 76.0.3809.25 76.0.3809.12 75.0.3770.140 75.0.3770.90 75.0.3770.8 74.0.3729.6 73.0.3683.68 73.0.3683.20 72.0.3626.7 72.0.3626.69 71.0.3578.80 71.0.3578.33 71.0.3578.30 71.0.3578.137 70.0.3538.97 70.0.3538.67 70.0.3538.16 2.46 2.45 2.44 2.43 2.42 2.41 2.40 2.39 2.38 2.37 2.36 2.35 2.34 2.33 2.32 2.31 2.30 2.29 2.28 2.27 2.26 2.25 2.24 2.23 2.22 2.21 2.20 2.19 2.16 2.15 2.14 2.13 2.12 2.10 |

### Internet Explorer Driver (IEDriver)

We provide both 32-bit and 64-bit versions of the Internet Explorer driver. By default we use the 2.53.1 (32-bit) IEDriver for your tests.   
 We use 32-bit because of a [slow text entry bug](https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5116) with the 64-bit version.

For our screenshots, we use the 64-bit version, because of a [screenshot problem](https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5876) with the 32-bit version.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["iedriverVersion"] = "2.53.1"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("iedriverVersion", "2.53.1");
```

```php
$caps = array(
  "iedriverVersion" => "2.53.1"
);
```

```python
capabilities = {
  "iedriverVersion" : "2.53.1"
}
```

```javascript
const capabilities = {
  "iedriverVersion" : "2.53.1"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("iedriverVersion", "2.53.1");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "internet explorer",
  browserVersion: "latest",
  "se:ieOptions": {},
  "tb:options": {
    "iedriverVersion" : "4.8.0",
    "selenium-version": "4.8.0"
  }
}
```

```java
InternetExplorerOptions ieOpts = new InternetExplorerOptions();

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("iedriverVersion", "4.8.0");
tbOptions.setCapability("selenium-version", "4.8.0");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("se:ieOptions", ieOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "internet explorer");
```

```php
$capabilities = DesiredCapabilities::internetExplorer();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'iedriverVersion' => "4.8.0",
	'selenium-version' => "4.8.0"
));
$capabilities->setCapability('se:ieOptions', []);
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'iedriverVersion': '4.8.0',
	'selenium-version': '4.8.0'
}

ieOpts = {
    'browserName': "internet explorer",
    'platformName': "WIN11",
    'se:ieOptions': {},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=ieOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'internet explorer',
    "platformName": 'WIN11',
    "se:ieOptions" : {},
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "iedriverVersion": "4.8.0",
        "selenium-version": "4.8.0"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var ieOptions = new InternetExplorerOptions()
{
    BrowserVersion = "11",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["iedriverVersion"] = "4.8.0",
    ["selenium-version"] = "4.8.0"
};

ieOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    ieOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | 2.53.1 | x64\_4.14.0 4.14.0 x64\_4.11.0 4.11.0 x64\_4.10.0 4.10.0 x64\_4.8.1 4.8.1 x64\_4.8.0 4.8.0 x64\_4.7.0 4.7.0 x64\_4.6.0 4.6.0 x64\_4.3.0 4.3.0 x64\_4.2.0 4.2.0 x64\_4.0.0 4.0.0 x64\_3.141.59 3.141.59 x64\_3.141.5 3.141.5 x64\_3.141.0 3.141.0 x64\_3.14.0 3.14.0 x64\_3.13.0 3.13.0 x64\_3.12.0 3.12.0 x64\_3.11.1 3.11.1 x64\_3.11.0 3.11.0 x64\_3.10.0 3.10.0 x64\_3.9.0 3.9.0 x64\_3.8.0 3.8.0 x64\_3.7.0 3.7.0 x64\_3.6.0 3.6.0 x64\_3.5.0 3.5.0 x64\_3.4.0 3.4.0 x64\_3.3.0 3.3.0 x64\_3.2.0 3.2.0 x64\_3.1.0 3.1.0 x64\_2.53.1 2.53.1 x64\_2.53.0 2.53.0 x64\_2.52.2 2.52.2 x64\_2.51.0 2.51.0 x64\_2.50.0 2.50.0 x64\_2.49.0 2.49.0 x64\_2.48.0 2.48.0 x64\_2.47.0 2.47.0 x64\_2.46.0 2.46.0 x64\_2.45.0 2.45.0 x64\_2.42.0 2.42.0 |

### Edge Driver (MicrosoftWebDriver)

EdgeDriver is built by Microsoft to automate the Microsoft Edge Browser.   
 By default, we make sure that the most recent fully-compatible EdgeDriver is used for every test running on the Microsoft Edge Browser.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
	"browserName" : "MicrosoftEdge",
	"platform": "WINDOWS"
}
caps["edgedriverVersion"] = "110"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("edgedriverVersion", "110");
```

```php
$caps = array(
  "edgedriverVersion" => "110"
);
```

```python
capabilities = {
  "edgedriverVersion" : "110"
}
```

```javascript
const capabilities = {
  "edgedriverVersion" : "110",
  "ms:edgeOptions": {}
}
```

```csharp
var edgeOptions = new EdgeOptions()
{
    BrowserVersion = "11",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["edgeDriverVersion"] = "110",
    ["selenium-version"] = "4.8.0"
};

edgeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    edgeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "microsoftedge",
  browserVersion: "latest",
  "tb:options" => {
    "edgedriverVersion" : "110"
  },
  "ms:edgeOptions": {}
}
```

```java
EdgeOptions edgeOpts = new EdgeOptions();
edgeOpts.setPlatformName("WIN11");
edgeOpts.setBrowserVersion("latest");

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("edgedriverVersion", "110");
edgeOpts.setCapability("tb:options", tbOptions);
```

```php
$capabilities = DesiredCapabilities::microsoftEdge();
$capabilities->setCapability('platformName', 'WIN11');
$capabilities->setCapability('tb:options', array(
	'edgedriverVersion' => "110"
));
$capabilities->setCapability('ms:edgeOptions', new \stdClass());
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'edgedriverVersion': '110'
}

edgeOpts = {
    'browserName': "MicrosoftEdge",
    'platformName': "WIN11",
    'tb:options': tbOptions,
    'ms:edgeOptions': {}
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=edgeOpts)
```

```javascript
let driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'microsoftedge',
    "platformName": 'WIN11',
    "ms:edgeOptions" : {},
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "edgedriverVersion": "110"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var edgeOptions = new EdgeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["edgedriverVersion"] = "110"
};

edgeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    edgeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | 15063 | 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 81 dev insiders 16299 15063 14393 |

### Firefox Driver (Geckodriver)

For Firefox 47 and up, webdriver tests on Firefox need to use [Mozilla's GeckoDriver](https://github.com/mozilla/geckodriver).   
 Specify this option to choose which Geckodriver we should use. By default, we use the version that is most compatible with the Firefox version you request.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["geckodriverVersion"] = "0.28.0"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("geckodriverVersion", "0.28.0");
```

```php
$caps = array(
  "geckodriverVersion" => "0.28.0"
);
```

```python
capabilities = {
  "geckodriverVersion" : "0.28.0"
}
```

```javascript
const capabilities = {
  "geckodriverVersion" : "0.28.0"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("geckodriverVersion", "0.28.0");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "firefox",
  browserVersion: "latest",
  "tb:options": {
    "geckodriverVersion" : "0.28.0"
  },
  "moz:firefoxOptions": {}
}
```

```java
FirefoxOptions ffOptions = new FirefoxOptions();
ffOptions.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("geckodriverVersion", "0.28.0");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(FirefoxOptions.CAPABILITY, ffOptions);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "firefox");
```

```php
$options = new FirefoxOptions();
$capabilities = DesiredCapabilities::firefox();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'geckodriverVersion' => "0.28.0"
));
$capabilities->setCapability('moz:firefoxOptions', array());
$capabilities->setCapability(FirefoxOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'geckodriverVersion': "0.28.0"
}

chromeOpts = {
    'browserName': "firefox",
    'platformName': "WIN11",
    'tb:options': tbOptions,
    'moz:firefoxOptions': {}
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'firefox',
    "platformName": 'WIN11',
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "geckodriverVersion": "0.28.0"
    },
    'moz:firefoxOptions': {}
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var ffOptions = new FirefoxOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["geckodriverVersion"] = "0.28.0"
};

ffOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    ffOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | 0.28.0 | 0.36.0 0.35.0 0.34.0 0.33.0 0.32.2 0.32.1 0.32.0 0.31.0 0.30.0 0.29.1 0.29.0 0.28.0 0.27.0 0.26.0 0.25.0 0.24.0 0.23.0 0.22.0 0.21.0 0.20.1 0.19.1 0.19.0 0.18.0 0.17.0 0.16.1 0.16.0 0.15.0 0.14.0 0.13.0 0.12.0 0.11.0 0.10.0 0.9.0 0.8.0 0.7.1 0.6.2 |

### Opera Driver

Opera uses the [Chromium OperaDriver](https://github.com/operasoftware/operachromiumdriver/releases) to automate Opera Desktop Browsers.   
 Specify this option to choose which OperaDriver we should use. By default, we use the version that is most compatible with the Opera version you request.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["operaDriverVersion"] = "90.0.4430.85"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("operaDriverVersion", "90.0.4430.85");
```

```php
$caps = array(
  "operaDriverVersion" => "90.0.4430.85"
);
```

```python
capabilities = {
  "operaDriverVersion" : "90.0.4430.85"
}
```

```javascript
const capabilities = {
  "operaDriverVersion" : "90.0.4430.85"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("operaDriverVersion", "90.0.4430.85");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "opera",
  browserVersion: "latest",
  "tb:options" => {
    "operaDriverVersion" : "90.0.4430.85"
  }
}
```

```java
MutableCapabilities caps = new MutableCapabilities();
caps.setCapability("browserName", "opera");
caps.setCapability("platformName", "WIN11");
caps.setCapability("browserVersion", "latest");

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("operaDriverVersion", "90.0.4430.85");
caps.setCapability("tb:options", tbOptions);
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setBrowserName('opera');
$capabilities->setCapability('tb:options', array(
	'operaDriverVersion' => "90.0.4430.85"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'operaDriverVersion': "90.0.4430.85"
}

chromeOpts = {
    'browserName': "opera",
    'platformName': "WIN11",
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'opera',
    "platformName": 'WIN11',
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "operaDriverVersion": "90.0.4430.85"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var operaOptions = new OperaOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["operaDriverVersion"] = "90.0.4430.85"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    operaOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | 145.0.7632.117 | 146.0.7680.178 145.0.7632.117 144.0.7559.173 143.0.7499.194 142.0.7444.243 141.0.7390.125 140.0.7339.249 139.0.7258.156 138.0.7204.251 137.0.7151.122 135.0.7049.115 134.0.6998.205 133.0.6943.143 132.0.6834.209 131.0.6778.86 130.0.6723.137 128.0.6613.162 127.0.6533.120 126.0.6478.127 125.0.6422.143 124.0.6367.62 123.0.6312.59 122.0.6261.95 121.0.6167.140 120.0.6099.200 119.0.6045.124 118.0.5993.89 117.0.5938.132 116.0.5845.97 115.0.5790.171 114.0.5735.110 113.0.5672.127 112.0.5615.87 111.0.5563.65 110.0.5481.100 109.0.5414.120 108.0.5359.99 107.0.5304.88 106.0.5249.119 105.0.5195.102 104.0.5112.81 103.0.5060.66 102.0.5005.61 101.0.4951.64 100.0.4896.127 99.0.4844.51 98.0.4758.82 97.0.4692.71 96.0.4664.45 95.0.4638.54 94.0.4606.61 93.0.4577.63 92.0.4515.107 91.0.4472.77 90.0.4430.85 89.0.4389.82 88.0.4324.104 87.0.4280.67 86.0.4240.80 85.0.4183.102 84.0.4147.89 83.0.4103.97 81.0.4044.113 80.0.3987.100 79.0.3945.79 78.0.3904.87 77.0.3865.120 76.0.3809.132 75.0.3770.100 2.45 2.42 2.41 2.40 2.38 2.37 2.36 2.35 2.33 2.32 2.30 2.229 2.27 2.26 2.25 2.24 2.23 2.22 |

### Taking screenshots during your tests

By default we do not capture screenshots at every step of your test. If you wish to take a screenshot for every step, please add this capability (set to `true`) to your request.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["screenshot"] = true
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("screenshot", true);
```

```php
$caps = array(
  "screenshot" => true
);
```

```python
capabilities = {
  "screenshot" : True
}
```

```javascript
const capabilities = {
  "screenshot" : true
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("screenshot", true);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    screenshot: true
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("screenshot", true);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'screenshot' => true
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'screenshot': True
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "screenshot": true
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["screenshot"] = true
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value |
| --- | --- |
| boolean | false |

### Make a video of your tests

By default we record a video of your test, which is accessible in the member area. If you do not wish to have this, you can disable it with this option.   
 Recording adds processing overhead for the duration of the session, so disabling it speeds up tests that do not need a video. See [test speed optimization](https://testingbot.com/support/other/test-speed-optimization#screenrecorder).

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["screenrecorder"] = true
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("screenrecorder", true);
```

```php
$caps = array(
  "screenrecorder" => true
);
```

```python
capabilities = {
  "screenrecorder" : True
}
```

```javascript
const capabilities = {
  "screenrecorder" : true
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("screenrecorder", true);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    screenrecorder: true
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("screenrecorder", true);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'screenrecorder' => true
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': 'W3C Sample',
	'screenrecorder': True
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "screenrecorder": true
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["screenrecorder"] = true
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value |
| --- | --- |
| boolean | true |

### Test Privacy

Make the test results for this test public so that everyone can access the results.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["public"] = false
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("public", false);
```

```php
$caps = array(
  "public" => false
);
```

```python
capabilities = {
  "public" : False
}
```

```javascript
const capabilities = {
  "public" : false
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("public", false);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "public" : false
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("public", false);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'public' => 130
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'public': False
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "public": false
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["public"] = false
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value |
| --- | --- |
| boolean | false |

### Blacklist hostnames

The hostnames you specify will be pointed to localhost instead of their real destination. This means you can speed up tests by blocking third party content which you don't need and slows down your test.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["blacklist"] = "site1.com,site2.com"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("blacklist", "site1.com,site2.com");
```

```php
$caps = array(
  "blacklist" => "site1.com,site2.com"
);
```

```python
capabilities = {
  "blacklist" : "site1.com,site2.com"
}
```

```javascript
const capabilities = {
  "blacklist" : "site1.com,site2.com"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("blacklist", "site1.com,site2.com");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "blacklist" : "site1.com,site2.com"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("blacklist", "site1.com,site2.com");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'blacklist' => "site1.com,site2.com"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'blacklist': "site1.com,site2.com"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "blacklist": "site1.com,site2.com"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["blacklist"] = "site1.com,site2.com"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| string (comma-separated) |

### Customize Logging

By default, TestingBot records logs of all Selenium actions and its drivers.

Set this option to `false` if you don't want TestingBot to record anything (for example, if you have sensitive data).  
You will not see any test logs in our member dashboard.

Set to `strip-parameters` to prevent the POST/GET parameters from being logged on the TestingBot test detail page (does not affect other logs like Selenium logs, Chromedriver logs, ...).

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["recordLogs"] = true
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("recordLogs", true);
```

```php
$caps = array(
  "recordLogs" => true
);
```

```python
capabilities = {
  "recordLogs" : True
}
```

```javascript
const capabilities = {
  "recordLogs" : true
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("recordLogs", true);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "recordLogs" : true
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("recordLogs", true);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'recordLogs' => true
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'recordLogs': True
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "recordLogs": true
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["recordLogs"] = true
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | "true" | `true`, `false`, or `strip-parameters` |

### Custom Time Zones

Change the Time Zone of the Virtual Machine to the Time Zone you specify. You can find a [list of timezones on Wikipedia](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Only location names are supported (not their paths). See some examples below:

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["timeZone"] = "Etc/UTC"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("timeZone", "Etc/UTC");
```

```php
$caps = array(
  "timeZone" => "Etc/UTC"
);
```

```python
capabilities = {
  "timeZone" : "Etc/UTC"
}
```

```javascript
const capabilities = {
  "timeZone" : "Etc/UTC"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("timeZone", "Etc/UTC");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "timeZone" : "Etc/UTC"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("timeZone", "Etc/UTC");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'timeZone' => "Etc/UTC"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'timeZone': "Etc/UTC"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "timeZone": "Etc/UTC"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["timeZone"] = "Etc/UTC"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | Possible Values: |
| --- | --- | --- |
| string | "Etc/UTC" | [List of timezones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) |

### Change Screen Resolution

Will adjust the screen resolution during your test.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["screen-resolution"] = "1280x1024"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("screen-resolution", "1280x1024");
```

```php
$caps = array(
  "screen-resolution" => "1280x1024"
);
```

```python
capabilities = {
  "screen-resolution" : "1280x1024"
}
```

```javascript
const capabilities = {
  "screen-resolution" : "1280x1024"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("screen-resolution", "1280x1024");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "screen-resolution" : "1280x1024"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("screen-resolution", "1280x1024");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'screen-resolution' => "1280x1024"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'screen-resolution': "My Test Name"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "screen-resolution": "1280x1024"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["screen-resolution"] = "1280x1024"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value | |
| --- | --- | --- |
| string | "1280x1024" | \| Platform \| Resolutions \| \| --- \| --- \| \| Windows/Linux \| 800x600 1024x768 1152x864 1280x768 1280x800 1280x960 1280x1024 1400x1050 1600x1200 1680x1050 1920x1080 1920x1200 2560x1440 \| \| macOS \| 800x600 1024x768 1280x768 1280x800 1280x960 1280x1024 1366x768 1440x900 1600x900 1600x1200 1680x1050 1920x1080 1920x1200 2048x1536 \| |

### Customize OS

When you specify a prerun file, we will first download the file and execute it (with optional prerun-arguments).  
 This is useful when you want to customize/add software before your test starts.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["prerun"] = "https://..."
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("prerun", "https://...");
```

```php
$caps = array(
  "prerun" => "https://..."
);
```

```python
capabilities = {
  "prerun" : "https://..."
}
```

```javascript
const capabilities = {
  "prerun" : "https://..."
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("prerun", "https://...");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "prerun" : "https://..."
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("prerun", "https://...");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'prerun' => "https://..."
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'prerun': "https://..."
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "prerun": "https://..."
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["prerun"] = "https://..."
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| string (URL) |

```javascript
"prerun-args" : "-a -b -c ..."
```

| Value Type |
| --- |
| string |

With [TestingBot Storage](https://testingbot.com/support/api/storage#upload), you can upload your executable on our servers.   
 The advantage of this is that our test VMs can immediately download your executable from our own network, which is much faster than downloading from the public internet.   
 Once the file is uploaded via TestingBot Storage, you can use `"prerun" : "tb://..."`

#### Supported file types

We detect what you send and run it the right way. Supported types:

- `.exe` — executed directly
- `.msi` — installed silently via `msiexec /i <file> /quiet /norestart`
- `.bat` / `.cmd` — run via `cmd`
- `.ps1` — run via `powershell -ExecutionPolicy Bypass -File`
- `.jar` — run via `java -jar`
- Shell scripts (`.sh`, `.command`) on macOS / Linux
- **Archives** (`.zip`, `.tar`, `.tar.gz`) — automatically extracted, then an entrypoint inside is run (see below)

#### Pre-run options

All options below can be passed as individual capabilities inside `tb:options`, or set on the advanced object form of `prerun` described further down.

| Capability | Object key | Type | Description |
| --- | --- | --- | --- |
| `prerun` | `executable` | string (URL), object or array | The pre-run file to download and run. A `https://` or `tb://` URL, or an object / array for the advanced forms below. |
| `prerun-args` | `args` | string or array | Command-line arguments. As a string, quoted arguments with spaces are preserved, e.g. `--dir "C:\Program Files\App"`. An array is passed through as-is. |
| `prerun-wait` | `background` (inverse) | boolean | Wait for the pre-run process to finish before the test starts. Default `false` (fire-and-forget). In the object form use `background: true` to _not_ wait. |
| `prerun-timeout` | `timeout` | integer (ms) | Maximum time to wait for the **download** to complete. |
| `prerun-wait-timeout` | `waitTimeout` | integer (ms) | When waiting (`prerun-wait`), the maximum time to wait for the pre-run process to **finish**. If it is still running after this, it is terminated. Unset by default (waits indefinitely). |
| `prerun-fail-on-error` | `failOnError` | boolean | Fail the session (instead of continuing) when the pre-run cannot run, or — when waiting — exits with a non-zero code or exceeds `prerun-wait-timeout`. Default `false`. |
| `prerun-entrypoint` | `entrypoint` | string | For archives: the file inside the archive to run. When omitted we auto-detect `setup.exe`, `install.bat`, `prerun.*`, `run.*`, or the single runnable file at the root. |
| `prerun-sha256` | `sha256` | string | Expected SHA-256 checksum of the downloaded file. Verified before execution; a mismatch fails the pre-run. |
| `prerun-env` | `env` | JSON object | Extra environment variables for the pre-run process. |
| `prerun-cwd` | `cwd` | string | Working directory the pre-run process is started in. |
| `prerun-platform` | `platform` | string | Only run on the given platform(s): `windows`, `mac`, `linux` (comma-separated). Useful with the array form. |

#### Advanced object form

Instead of a plain URL, `prerun` accepts an object so you can set every option in one place:

```javascript
"tb:options": {
  "prerun": {
    "executable": "https://.../installer.msi",
    "args": ["/quiet"],
    "wait": true,
    "timeout": 120000,
    "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "failOnError": true
  }
}
```

#### Archives & entrypoint

When the download is a `.zip`, `.tar` or `.tar.gz`, we extract it and run an entrypoint inside. Name it explicitly with `entrypoint`, or let us auto-detect it:

```javascript
"tb:options": {
  "prerun": {
    "executable": "https://.../bundle.zip",
    "entrypoint": "setup.exe",
    "args": ["/S"],
    "wait": true
  }
}
```

#### Inline scripts

For small tweaks you don't need to host a file — provide the script inline and pick a shell (`sh`, `bash`, `cmd`, `bat`, `powershell` or `python`). Set `scriptEncoding: "base64"` if you base64-encode the body.

```javascript
"tb:options": {
  "prerun": {
    "script": "Set-ItemProperty -Path 'HKCU:\\Console' -Name 'QuickEdit' -Value 0",
    "shell": "powershell",
    "wait": true
  }
}
```

#### Multiple pre-runs

Pass an array to run several pre-runs in order. Each entry can be a URL, an object, or an inline script, and carries its own options:

```javascript
"tb:options": {
  "prerun": [
    { "executable": "https://.../install-cert.exe", "args": ["/S"], "wait": true },
    { "script": "echo done > C:\\prerun.log", "shell": "cmd", "wait": true }
  ]
}
```

#### Per-platform pre-runs

Reuse the same capabilities across a mixed pool by keying the pre-run per operating system. We pick the entry matching the VM's platform, falling back to `default` when present. Keys without a match are skipped (not an error).

```javascript
"tb:options": {
  "prerun": {
    "windows": { "executable": "https://.../setup.exe", "args": ["/S"] },
    "mac": { "script": "defaults write ...", "shell": "sh" },
    "default": "https://.../fallback.sh"
  }
}
```

Pre-run failures are non-fatal by default: if the download or script fails, your test still starts. Set `failOnError` (or `prerun-fail-on-error`) to make a failed pre-run stop the session instead.

### Edit hostnames

You can specify an array of objects containing the keys `ip` and `domain`. We will write these values to the hosts file of the VM.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["hosts"] = [{ ip: '127.0.0.1', domain: 'mydomain' }]
```

```java
List<Map<String, String>> hosts = new ArrayList<>();
Map<String, String> entry = new HashMap<>();
entry.put("ip", "127.0.0.1");
entry.put("domain", "mydomain");
hosts.add(entry);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("hosts", hosts);
```

```php
$caps = array(
  "hosts" => array(array("ip" => "127.0.0.1", "domain" => "mydomain"))
);
```

```python
capabilities = {
  "hosts": [{"ip": "127.0.0.1", "domain": "mydomain"}]
}
```

```javascript
const capabilities = {
  "hosts": [{ ip: "127.0.0.1", domain: "mydomain" }]
}
```

```csharp
var hosts = new List<Dictionary<string, string>>
{
    new Dictionary<string, string> { ["ip"] = "127.0.0.1", ["domain"] = "mydomain" }
};

DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("hosts", hosts);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "hosts" : [{ ip: '127.0.0.1', domain: 'mydomain' }]
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
List<Map<String, String>> hosts = new ArrayList<>();
Map<String, String> entry = new HashMap<>();
entry.put("ip", "127.0.0.1");
entry.put("domain", "mydomain");
hosts.add(entry);
tbOptions.setCapability("hosts", hosts);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'hosts' => [{ ip: '127.0.0.1', domain: 'mydomain' }]
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'hosts': [{ ip: '127.0.0.1', domain: 'mydomain' }]
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "hosts": [{ ip: '127.0.0.1', domain: 'mydomain' }]
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["hosts"] = [{ ip: '127.0.0.1', domain: 'mydomain' }]
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| array of objects `({ ip: "", domain: "" })` |

### Upload file

When you specify an URL (`upload`) and fileName (`uploadFilepath`), we will automatically download the file from the URL and save it in the uploadFilepath.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["upload"] = "https://..."
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("upload", "https://...");
```

```php
$caps = array(
  "upload" => "https://..."
);
```

```python
capabilities = {
  "upload" : "https://..."
}
```

```javascript
const capabilities = {
  "upload" : "https://..."
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("upload", "https://...");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "upload" : "https://..."
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("upload", "https://...");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'upload' => "https://..."
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'upload': "https://..."
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "upload": "https://..."
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["upload"] = "https://..."
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| string (URL) |

We recommend using these directories to save your files: For Windows (`C:\test\`), for Linux/macOS: (`/tmp/`).

You can also use the home directory tilde to specify the user's directory: `~/Desktop/sample.pdf`

Example:

```javascript
"uploadFilepath" : "C:\\test\\myfile.ext"
```

Example (Selenium 4):

```javascript
"tb:options" : {
	"uploadFilepath" : "C:\\test\\myfile.ext"
}
```

| Value Type |
| --- |
| string (URL) |

### Upload Multiple Files

Specify an array of objects, containing keys `url` and `filePath`. We will automatically download these files and put them in the filePaths you specify.

We recommend using these directories to save your files: For Windows (`C:\test\`), for Linux/macOS: (`/tmp/`).

You can also use the home directory tilde to specify the user's directory: `~/Desktop/sample.pdf`

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["uploadMultiple"] = [{ url: "", filePath: "" }]
```

```java
List<Map<String, String>> uploads = new ArrayList<>();
Map<String, String> file = new HashMap<>();
file.put("url", "https://example.com/file.pdf");
file.put("filePath", "/tmp/file.pdf");
uploads.add(file);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("uploadMultiple", uploads);
```

```php
$caps = array(
  "uploadMultiple" => array(array("url" => "https://example.com/file.pdf", "filePath" => "/tmp/file.pdf"))
);
```

```python
capabilities = {
  "uploadMultiple": [{"url": "https://example.com/file.pdf", "filePath": "/tmp/file.pdf"}]
}
```

```javascript
const capabilities = {
  "uploadMultiple": [{ url: "https://example.com/file.pdf", filePath: "/tmp/file.pdf" }]
}
```

```csharp
var uploads = new List<Dictionary<string, string>>
{
    new Dictionary<string, string> { ["url"] = "https://example.com/file.pdf", ["filePath"] = "/tmp/file.pdf" }
};

DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("uploadMultiple", uploads);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "uploadMultiple" : [{ url: "", filePath: "" }]
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
List<Map<String, String>> uploads = new ArrayList<>();
Map<String, String> file = new HashMap<>();
file.put("url", "https://example.com/file.pdf");
file.put("filePath", "/tmp/file.pdf");
uploads.add(file);
tbOptions.setCapability("uploadMultiple", uploads);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'uploadMultiple' => array(array("url" => "https://example.com/file.pdf", "filePath" => "/tmp/file.pdf"))
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'uploadMultiple': [{'url': "https://example.com/file.pdf", 'filePath': "/tmp/file.pdf"}]
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "uploadMultiple": [{ url: "https://example.com/file.pdf", filePath: "/tmp/file.pdf" }]
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["uploadMultiple"] = new List<Dictionary<string, string>>
    {
        new Dictionary<string, string> { ["url"] = "https://example.com/file.pdf", ["filePath"] = "/tmp/file.pdf" }
    }
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| array of objects, `{ url: "", filePath: "" }` |

### Geolocation Testing

We provide an option where you can specify from which country you'd like to run the test from.

Once you specify this option, the virtual machine we provision for your test will be configured to use a proxy in the country you specified.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["testingbot.geoCountryCode"] = "DE"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("testingbot.geoCountryCode", "DE");
```

```php
$caps = array(
  "testingbot.geoCountryCode" => "DE"
);
```

```python
capabilities = {
  "testingbot.geoCountryCode" : "DE"
}
```

```javascript
const capabilities = {
  "testingbot.geoCountryCode" : "DE"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("testingbot.geoCountryCode", "DE");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "testingbot.geoCountryCode" : "DE"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("testingbot.geoCountryCode", "DE");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'testingbot.geoCountryCode' => "DE"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'testingbot.geoCountryCode': "DE"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "testingbot.geoCountryCode": "DE"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["testingbot.geoCountryCode"] = "DE"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

Specify `testingbot.geoCountryCode` with one of the following country codes:

- **'\*'** : this will take a random country from the list below
- **'AU'** : Australia
- **'BE'** : Belgium
- **'BR'** : Brazil
- **'CA'** : Canada
- **'CL'** : Chile
- **'FR'** : France
- **'DE'** : Germany
- **'IN'** : India
- **'IT'** : Italy
- **'JP'** : Japan
- **'NO'** : Norway
- **'SG'** : Singapore
- **'ZA'** : South Africa
- **'SE'** : Sweden
- **'CH'** : Switzerland
- **'AE'** : United Arab Emirates
- **'GB'** : United Kingdom
- **'US'** : United States

**Important:** this does not work on Android 4.4

### Localhost Testing

By default, the TestingBot remote VMs are not able to access your localhost, as they are running in a separate network. However, you can use the `localhost` address to access your local web server when using the [TestingBot Tunnel](https://testingbot.com/support/tunnel).

Once you have the TestingBot Tunnel running, these localhost ports will be forwarded to your machine:

- 80
- 443
- 8080
- 3030
- 3000
- 3001
- 3400

You can also specify additional ports to forward by using the `localHttpPorts` capability.

If the localhost port is expecting SSL traffic, you can specify the port in the `localHttpsPorts` capability.

[Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#) [Python](https://testingbot.com#) [Ruby](https://testingbot.com#) [PHP](https://testingbot.com#)

```ruby
caps = {
  "tb:options" => {
    "localHttpPorts" : [3002, 8081]
  }
}
```

```java
MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("localHttpPorts", [3002, 8081]);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("tb:options", tbOptions);
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability('tb:options', array(
	 "localHttpPorts" => [3002, 8081]
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'localHttpPorts': [3002, 8081]
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "tb:options": {
        "localHttpPorts": [3002, 8081]
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["testingbot.localHttpPorts"] = [3002, 8081]
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

### Change Test Name

Add a name to this test, which will show up in our member area and API.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["name"] = "My Test Name"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("name", "My Test Name");
```

```php
$caps = array(
  "name" => "My Test Name"
);
```

```python
capabilities = {
  "name" : "My Test Name"
}
```

```javascript
const capabilities = {
  "name" : "My Test Name"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("name", "My Test Name");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "name" : "My Test Name"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("name", "My Test Name");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'name' => "My Test Name"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'name': "My Test Name"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "name": "My Test Name"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["name"] = "My Test Name"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value |
| --- | --- |
| string | unnamed test |

### Group Tests

A key you can use to group certain tests in the same build (for example in Jenkins).   
 The builds will appear in our member area.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["build"] = "My First Build"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("build", "My First Build");
```

```php
$caps = array(
  "build" => "My First Build"
);
```

```python
capabilities = {
  "build" : "My First Build"
}
```

```javascript
const capabilities = {
  "build" : "My First Build"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("build", "My First Build");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "build" : "My First Build"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("build", "My First Build");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'build' => "My First Build"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'build': "My First Build"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "build": "My First Build"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["build"] = "My First Build"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| string |

### Idle Timeout

The maximum amount of time a browser will wait before proceeding to the next step in your test.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["idletimeout"] = 130
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("idletimeout", 130);
```

```php
$caps = array(
  "idletimeout" => 130
);
```

```python
capabilities = {
  "idletimeout" : 130
}
```

```javascript
const capabilities = {
  "idletimeout" : 130
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("idletimeout", 130);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "idletimeout" : 130
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("idletimeout", 130);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'idletimeout' => 130
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'idletimeout': 130
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "idletimeout": 130
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["idletimeout"] = 130
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value |
| --- | --- |
| int (specify number of seconds) | 130 seconds |

### Maximum Test Duration

The maximum duration for a single test. This is a safeguard to prevent bad tests from using up your credits.

We generally recommend to keep tests short (less than 10 minutes). It's better to split up large tests in smaller individual tests.   
 This keeps your tests fast and allows for more parallelization of your tests.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["maxduration"] = 1800
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("maxduration", 1800);
```

```php
$caps = array(
  "maxduration" => 1800
);
```

```python
capabilities = {
  "maxduration" : 1800
}
```

```javascript
const capabilities = {
  "maxduration" : 1800
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("maxduration", 1800);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "maxduration" : 1800
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("maxduration", 1800);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'maxduration' => 1800
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'maxduration': 1800
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "maxduration": 1800
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["maxduration"] = 1800
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Default Value |
| --- | --- |
| int (specify number of seconds) | 1800 seconds (30 minutes) |

### Custom Metadata

Send along custom data, for example your release, server, commit hash, ...   
 This will show up on the test detail page in the TestingBot member area.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["extra"] = "Extra Information"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("extra", "Extra Information");
```

```php
$caps = array(
  "extra" => "Extra Information"
);
```

```python
capabilities = {
  "extra" : "Extra Information"
}
```

```javascript
const capabilities = {
  "extra" : "Extra Information"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("extra", "Extra Information");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "extra" : "Extra Information"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("extra", "Extra Information");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'extra' => "Extra Information"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'extra': "Extra Information"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "extra": "Extra Information"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["extra"] = "Extra Information"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| string |

### Load custom browser extensions

If you specify this desired capability with the URL to your Chrome extension's `.crx` file, Safari App/Web extension file, or Firefox addon's `.xpi` file, we will download the extension, which will be added to the browser before your test starts.

More information is available in the [automated browser extension testing documentation](https://testingbot.com/support/web-automate/selenium/browser-extension).

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["load-extension"] = "https://..."
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("load-extension", "https://...");
```

```php
$caps = array(
  "load-extension" => "https://..."
);
```

```python
capabilities = {
  "load-extension" : "https://..."
}
```

```javascript
const capabilities = {
  "load-extension" : "https://..."
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("load-extension", "https://...");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "load-extension" : "https://..."
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("load-extension", "https://...");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'load-extension' => "https://..."
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'load-extension': "https://..."
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "load-extension": "https://..."
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["load-extension"] = "https://..."
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Browser | Supported Format | Example |
| --- | --- | --- |
| Chrome | `.zip` file, containing the extension source code (`manifest.json`, `src/ directory`, ...) | `https://.../extension.zip` |
| Firefox | `.zip` file, containing the extension source code (`manifest.json`, `src/ directory`, `lib/ directory`, ...) | `https://.../extension.zip` |
| Edge | `.zip` file, containing the extension source code (`manifest.json`, `src/ directory`, ...) | `https://.../extension.zip` |
| Safari (and Safari Technology Preview) | `Safari Web Extension, Safari App Extension or .safariextz` file | `https://.../extension.zip or https://.../extension.safariextz` |

With [TestingBot Storage](https://testingbot.com/support/api/storage#upload), you can upload your executable on our servers.   
 The advantage of this is that our test VMs can immediately download your executable from our own network, which is much faster than downloading from the public internet.   
 Once the file is uploaded via TestingBot Storage, you can use `"prerun" : "tb://..."`

### Grouping

Specify in which groups you want to see the test results. You can group results to have an easy overview of tests across projects.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["groups"] = "group1,group2"
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("groups", "group1,group2");
```

```php
$caps = array(
  "groups" => "group1,group2"
);
```

```python
capabilities = {
  "groups" : "group1,group2"
}
```

```javascript
const capabilities = {
  "groups" : "group1,group2"
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("groups", "group1,group2");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "groups" : "group1,group2"
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("groups", "group1,group2");

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'groups' => "group1,group2"
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'groups': "group1,group2"
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "groups": "group1,group2"
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["groups"] = "group1,group2"
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| string (comma-separated) |

### AutoClicker

Specify one or more of the possible options below to have TestingBot automatically click certain dialogs which are unable to be automated via Selenium WebDriver.

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["autoclick"] = []
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("autoclick", []);
```

```php
$caps = array(
  "autoclick" => []
);
```

```python
capabilities = {
  "autoclick" : []
}
```

```javascript
const capabilities = {
  "autoclick" : []
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("autoclick", []);
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "autoclick" : []
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("autoclick", []);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'autoclick' => []
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'autoclick': []
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "autoclick": []
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["autoclick"] = []
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type | Possible Values: |
| --- | --- |
| array of options | `chrome_extension_add`, `chrome_extension_permissions_allow` |

### Sikuli

Specify an URL to a zip-file containing one or more `.sikulu` projects. These will automatically start before your test runs, so that you can do certain automated tasks which Selenium cannot do (clicking native dialogs, ...)

Find more information regarding [Sikuli Cloud Testing](https://testingbot.com/support/other/sikuli).

[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["sikuli"] = "https://..."
```

```java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("sikuli", "https://...");
```

```php
$caps = array(
  "sikuli" => "https://..."
);
```

```python
capabilities = {
  "sikuli" : "https://..."
}
```

```javascript
const capabilities = {
  "sikuli" : "https://..."
}
```

```csharp
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability("sikuli", "https://...");
```

**Selenium W3C Example:**
[Ruby](https://testingbot.com#) [Python](https://testingbot.com#) [PHP](https://testingbot.com#) [Java](https://testingbot.com#) [NodeJS](https://testingbot.com#) [C#](https://testingbot.com#)

```ruby
caps = {
  platformName: "WIN11",
  browserName: "chrome",
  browserVersion: "latest",
  "tb:options" => {
    "sikuli" : []
  }
}
```

```java
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.setExperimentalOption("w3c", true);

MutableCapabilities tbOptions = new MutableCapabilities();
tbOptions.setCapability("key", "api_key");
tbOptions.setCapability("secret", "api_secret");
tbOptions.setCapability("sikuli", []);

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(ChromeOptions.CAPABILITY, chromeOpts);
caps.setCapability("platformName", "WIN11");
caps.setCapability("tb:options", tbOptions);
caps.setCapability("browserName", "chrome");
```

```php
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$capabilities->setPlatform('WIN11');
$capabilities->setCapability('tb:options', array(
	'sikuli' => []
));
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
```

```python
tbOptions = {
	'sikuli': []
}

chromeOpts = {
    'browserName': "chrome",
    'platformName': "WIN11",
    'goog:chromeOptions': {'w3c': True},
    'tb:options': tbOptions
}

self.driver = webdriver.Remote(remote_url, desired_capabilities=chromeOpts)
```

```javascript
driver = await new webdriver.Builder().withCapabilities({
    "browserName": 'chrome',
    "platformName": 'WIN11',
    /** Google requires "w3c" to be set in "goog:chromeOptions" as true if you're using ChromeDriver version 74 or lower.
     * Based on this commit: https://chromium.googlesource.com/chromium/src/+/2b49880e2481658e0702fd6fe494859bca52b39c
     * ChromeDriver now uses w3c by default from version 75+ so setting this option will no longer be a requirement **/
    "goog:chromeOptions" : { "w3c" : true },
    "tb:options": {
        "key": "api_key",
        "secret": "api_secret",
        "sikuli": []
    }
}).usingServer("https://hub.testingbot.com/wd/hub").build();
```

```csharp
var chromeOptions = new ChromeOptions()
{
    BrowserVersion = "latest",
    PlatformName = "WIN11",
    UseSpecCompliantProtocol = true
};
var tbOptions = new Dictionary<string, object>
{
    ["key"] = "api_key",
    ["secret"] = "api_secret",
    ["sikuli"] = []
};

chromeOptions.AddAdditionalCapability("tb:options", tbOptions, true);

driver = new RemoteWebDriver(new Uri("https://hub.testingbot.com/wd/hub"),
    chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
```

| Value Type |
| --- |
| string (URL to zipped Sikuli project) |

### Looking for more help?

Have questions or need more information? Reach out via email or Slack.

[Email us](https://testingbot.com/contact/new) [Join our Slack](https://join.slack.com/t/testingb0t/shared_invite/zt-3bcw9xch-jk19~6XPs_xBrsAgAedkCw)
