This is the multi-page printable view of this section. Click here to print.
Return to the regular view of this page.
Configuration of ComponentsHere you can see how each Grid component can be configured individually based on common configuration values and component-specific configuration values.
1 - Configuration helpGet information about all the available options to configure Grid.
The help commands display information based on the current code implementation. Hence, it will provide accurate information in case the documentation is not updated. It is the easiest way to learn about Grid 4 configuration for any new version.
Info CommandThe info command provides detailed docs on the following topics:
Quick config help and overview is provided by running:
java -jar selenium-server-<version>.jar info config
Security
To get details on setting up the Grid servers for secure communication and node registration:
java -jar selenium-server-<version>.jar info security
Session Map setup
By default, Grid uses a local session map to store session information. Grid supports additional storage options like Redis and JDBC - SQL supported databases. To set up different session storage, use the following command to get setup steps:
java -jar selenium-server-<version>.jar info sessionmap
Setting up tracing with OpenTelemetry and Jaeger
By default, tracing is enabled. To export traces and visualize them via Jaeger, use the following command for instructions:
java -jar selenium-server-<version>.jar info tracing
List the Selenium Grid commands
java -jar selenium-server-<version>.jar --config-help
It will show all the available commands and description for each one.
Component help commandsPass –help config option after the Selenium role to get component-specific config information.
Standalonejava -jar selenium-server-<version>.jar standalone --help
Hub
java -jar selenium-server-<version>.jar hub --help
Sessions
java -jar selenium-server-<version>.jar sessions --help
New Session Queue
java -jar selenium-server-<version>.jar sessionqueue --help
Distributor
java -jar selenium-server-<version>.jar distributor --help
Router
java -jar selenium-server-<version>.jar router --help
Node
java -jar selenium-server-<version>.jar node --help
2 - CLI options in the Selenium Grid
All Grid components configuration CLI options in detail.
Different sections are available to configure a Grid. Each section has options can be configured through command line arguments.
A complete description of the component to section mapping can be seen below.
Note that this documentation could be outdated if an option was modified or added but has not been documented yet. In case you bump into this situation, please check the “Config help” section and feel free to send us a pull request updating this page.
Sections Distributor Option Type Value/Example Description--healthcheck-interval
int 120
How often, in seconds, will the health check run for all Nodes. This ensures the server can ping all the Nodes successfully. --distributor
uri http://localhost:5553
Url of the distributor. --distributor-host
string localhost
Host on which the distributor is listening. --distributor-implementation
string org.openqa.selenium.grid.distributor.local.LocalDistributor
Full class name of non-default distributor implementation --distributor-port
int 5553
Port on which the distributor is listening. --reject-unsupported-caps
boolean false
Allow the Distributor to reject a request immediately if the Grid does not support the requested capability. Rejecting requests immediately is suitable for a Grid setup that does not spin up Nodes on demand. --slot-matcher
string org.openqa.selenium.grid.data.DefaultSlotMatcher
Full class name of non-default slot matcher to use. This is used to determine whether a Node can support a particular session. --slot-selector
string org.openqa.selenium.grid.distributor.selector.DefaultSlotSelector
Full class name of non-default slot selector. This is used to select a slot in a Node once the Node has been matched. --newsession-threadpool-size
int 24
The Distributor uses a fixed-sized thread pool to create new sessions as it consumes new session requests from the queue. This allows configuring the size of the thread pool. The default value is no. of available processors * 3. Note: If the no. of threads is way greater than the available processors it will not always increase the performance. A high number of threads causes more context switching which is an expensive operation. --purge-nodes-interval
int 30
How often, in seconds, will the Distributor purge Nodes that have been down for a while. This is calculated based on the heartbeat received from a particular node. Docker Option Type Value/Example Description --docker-assets-path
string /opt/selenium/assets
Absolute path where assets will be stored --docker-
string[] selenium/standalone-firefox:latest '{"browserName": "firefox"}'
Docker configs which map image name to stereotype capabilities (example `-D selenium/standalone-firefox:latest ‘{“browserName”: “firefox”}’) --docker-devices
string[] /dev/kvm:/dev/kvm
Exposes devices to a container. Each device mapping declaration must have at least the path of the device in both host and container separated by a colon like in this example: /device/path/in/host:/device/path/in/container --docker-host
string localhost
Host name where the Docker daemon is running --docker-port
int 2375
Port where the Docker daemon is running --docker-url
string http://localhost:2375
URL for connecting to the Docker daemon --docker-video-image
string selenium/video:latest
Docker image to be used when video recording is enabled --docker-host-config-keys
string[] Dns DnsOptions DnsSearch ExtraHosts Binds
Specify which docker host configuration keys should be passed to browser containers. Keys name can be found in the Docker API documentation, or by running docker inspect
the node-docker container. Events Option Type Value/Example Description --bind-bus
boolean false
Whether the connection string should be bound or connected.
--events-implementation
string org.openqa.selenium.events.zeromq.ZeroMqEventBus
Full class name of non-default event bus implementation --publish-events
string tcp://*:4442
Connection string for publishing events to the event bus --subscribe-events
string tcp://*:4443
Connection string for subscribing to events from the event bus Logging Option Type Value/Example Description --http-logs
boolean false
Enable http logging. Tracing should be enabled to log http logs. --log-encoding
string UTF-8
Log encoding --log
string Windows path example :
'\path\to\file\gridlog.log'
'C:\path\path\to\file\gridlog.log'
Linux/Unix/MacOS path example :
'/path/to/file/gridlog.log'
File to write out logs. Ensure the file path is compatible with the operating system’s file path. --log-level
string “INFO”
Log level. Default logging level is INFO. Log levels are described here https://docs.oracle.com/en/java/javase/11/docs/api/java.logging/java/util/logging/Level.html --plain-logs
boolean true
Use plain log lines --structured-logs
boolean false
Use structured logs --tracing
boolean true
Enable trace collection --log-timestamp-format
string HH:mm:ss.SSS
Allows the configure log timestamp format Network Option Type Value/Example Description --relax-checks
boolean false
Relax checks on origin header and content type of incoming requests, in contravention of strict W3C spec compliance. Node Option Type Value/Example Description --detect-drivers
boolean true
Autodetect which drivers are available on the current system, and add them to the Node. --driver-configuration
string[] display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype="{\"browserName\": \"firefox\", \"browserVersion\": \"86\", \"moz:firefoxOptions\": {\"binary\":\"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin\"}}"
List of configured drivers a Node supports. It is recommended to provide this type of configuration through a toml config file to improve readability --driver-factory
string[] org.openqa.selenium.example.LynxDriverFactory '{"browserName": "lynx"}'
Mapping of fully qualified class name to a browser configuration that this matches against. --driver-implementation
string[] "firefox"
Drivers that should be checked. If specified, will skip autoconfiguration. --node-implementation
string "org.openqa.selenium.grid.node.local.LocalNodeFactory"
Full classname of non-default Node implementation. This is used to manage a session’s lifecycle. --grid-url
string https://grid.example.com
Public URL of the Grid as a whole (typically the address of the Hub or the Router) --heartbeat-period
int 60
How often, in seconds, will the Node send heartbeat events to the Distributor to inform it that the Node is up. --max-sessions
int 8
Maximum number of concurrent sessions. Default value is the number of available processors. --override-max-sessions
boolean false
The # of available processors is the recommended max sessions value (1 browser session per processor). Setting this flag to true allows the recommended max value to be overwritten. Session stability and reliability might suffer as the host could run out of resources. --register-cycle
int 10
How often, in seconds, the Node will try to register itself for the first time to the Distributor. --register-period
int 120
How long, in seconds, will the Node try to register to the Distributor for the first time. After this period is completed, the Node will not attempt to register again. --session-timeout
int 300
Let X be the session-timeout in seconds. The Node will automatically kill a session that has not had any activity in the last X seconds. This will release the slot for other tests. --vnc-env-var
string[] SE_START_XVFB SE_START_VNC SE_START_NO_VNC
Environment variable to check in order to determine if a vnc stream is available or not. --no-vnc-port
int 7900
If VNC is available, sets the port where the local noVNC stream can be obtained --drain-after-session-count
int 1
Drain and shutdown the Node after X sessions have been executed. Useful for environments like Kubernetes. A value higher than zero enables this feature. --hub
string http://localhost:4444
The address of the Hub in a Hub-and-Node configuration. Can be a hostname or IP address (hostname
), in which case the Hub will be assumed to be http://hostname:4444
, the --grid-url
will be the same --publish-events
will be tcp://hostname:4442
and --subscribe-events
will be tcp://hostname:4443
. If hostname
contains a port number, that will be used for --grid-url
but the URIs for the event bus will remain the same. Any of these default values may be overridden but setting the correct flags. If the hostname has a protocol (such as https
) that will be used too. --enable-cdp
boolean true
Enable CDP proxying in Grid. A Grid admin can disable CDP if the network doesnot allow websockets. True by default. --enable-managed-downloads
boolean false
This causes the Node to auto manage files downloaded for a given session on the Node. --selenium-manager
boolean false
When drivers are not available on the current system, use Selenium Manager. False by default. --connection-limit-per-session
int 10
Let X be the maximum number of websocket connections per session.This will ensure one session is not able to exhaust the connection limit of the host. Relay Option Type Value/Example Description --service-url
string http://localhost:4723
URL for connecting to the service that supports WebDriver commands like an Appium server or a cloud service. --service-host
string localhost
Host name where the service that supports WebDriver commands is running --service-port
int 4723
Port where the service that supports WebDriver commands is running --service-status-endpoint
string /status
Optional, endpoint to query the WebDriver service status, an HTTP 200 response is expected --service-protocol-version
string HTTP/1.1
Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status --service-configuration
string[] max-sessions=2 stereotype='{"browserName": "safari", "platformName": "iOS", "appium:platformVersion": "14.5"}}'
Configuration for the service where calls will be relayed to. It is recommended to provide this type of configuration through a toml config file to improve readability. Router Option Type Value/Example Description --password
string myStrongPassword
Password clients must use to connect to the server. Both this and the username need to be set in order to be used. --username
string admin
User name clients must use to connect to the server. Both this and the password need to be set in order to be used. --sub-path
string my_company/selenium_grid
A sub-path that should be considered for all user facing routes on the Hub/Router/Standalone. --disable-ui
boolean true
Disable the Grid UI. Server Option Type Value/Example Description --external-url
string http://10.0.1.1:33333
External URL where component is generally available. Useful on complex network topologies when components are on different networks and proxy servers are involved. --allow-cors
boolean true
Whether the Selenium server should allow web browser connections from any host --host
string localhost
Server IP or hostname: usually determined automatically. --bind-host
boolean true
Whether the server should bind to the host address/name, or only use it to" report its reachable url. Helpful in complex network topologies where the server cannot report itself with the current IP/hostname but rather an external IP or hostname (e.g. inside a Docker container) --https-certificate
path /path/to/cert.pem
Server certificate for https. Get more detailed information by running “java -jar selenium-server.jar info security” --https-private-key
path /path/to/key.pkcs8
Private key for https. Get more detailed information by running “java -jar selenium-server.jar info security” --max-threads
int 24
Maximum number of listener threads. Default value is: (available processors) * 3. --port
int 4444
Port to listen on. There is no default as this parameter is used by different components, for example, Router/Hub/Standalone will use 4444 and Node will use 5555. SessionQueue Option Type Value/Example Description --sessionqueue
uri http://localhost:1237
Address of the session queue server. -sessionqueue-host
string localhost
Host on which the session queue server is listening. --sessionqueue-port
int 1234
Port on which the session queue server is listening. --session-request-timeout
int 300
Timeout in seconds. A new incoming session request is added to the queue. Requests sitting in the queue for longer than the configured time will timeout. --session-retry-interval
int 5
Retry interval in seconds. If all slots are busy, new session request will be retried after the given interval. --maximum-response-delay
int 8
How often, in seconds, will the the SessionQueue response in case there is no data, to reduce the http requests while polling for new session requests. Sessions Option Type Value/Example Description --sessions
uri http://localhost:1234
Address of the session map server. --sessions-host
string localhost
Host on which the session map server is listening. --sessions-port
int 1234
Port on which the session map server is listening. Configuration examples
All the options mentioned above can be used when starting the Grid components. They are a good way of exploring the Grid options, and trying out values to find a suitable configuration.
We recommend the use of Toml files to configure a Grid. Configuration files improve readability, and you can also check them in source control.
When needed, you can combine a Toml file configuration with CLI arguments.
Command-line flagsTo pass config options as command-line flags, identify the valid options for the component and follow the template below.
java -jar selenium-server-<version>.jar <component> --<option> value
Standalone, setting max sessions and main port
java -jar selenium-server-<version>.jar standalone --max-sessions 4 --port 4444
Hub, setting a new session request timeout, a main port, and disabling tracing
java -jar selenium-server-<version>.jar hub --session-request-timeout 500 --port 3333 --tracing false
Node, with 4 max sessions, with debug(fine) log, 7777 as port, and only with Firefox and Edge
java -jar selenium-server-<version>.jar node --max-sessions 4 --log-level "fine" --port 7777 --driver-implementation "firefox" --driver-implementation "edge"
Distributor, setting Session Map server url, Session Queue server url, and disabling bus
java -jar selenium-server-<version>.jar distributor --sessions http://localhost:5556 --sessionqueue http://localhost:5559 --bind-bus false
Setting custom capabilities for matching specific Nodes
Important: Custom capabilities need to be set in the configuration in all Nodes. They also need to be included always in every session request.
Start the Hubjava -jar selenium-server-<version>.jar hub
Start the Node A with custom cap set to true
java -jar selenium-server-<version>.jar node --detect-drivers false --driver-configuration display-name="Chrome (custom capability true)" max-sessions=1 stereotype='{"browserName":"chrome","gsg:customcap":true}' --port 6161
Start the Node B with custom cap set to false
java -jar selenium-server-<version>.jar node --detect-drivers false --driver-configuration display-name="Chrome (custom capability true)" max-sessions=1 stereotype='{"browserName":"chrome","gsg:customcap":false}' --port 6262
Matching Node A
ChromeOptions options = new ChromeOptions();
options.setCapability("gsg:customcap", true);
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444"), options);
driver.get("https://selenium.dev");
driver.quit();
Set the custom capability to false
in order to match the Node B.
At times a test may need to access files that were downloaded by it on the Node. To retrieve such files, following can be done.
Start the Hubjava -jar selenium-server-<version>.jar hub
Start the Node with manage downloads enabled
java -jar selenium-server-<version>.jar node --enable-managed-downloads true
Set the capability at the test level
Tests that want to use this feature should set the capability "se:downloadsEnabled"
to true
options.setCapability("se:downloadsEnabled", true);
How does this work
"se:downloadsEnabled"
against ONLY those nodes which were started with --enable-managed-downloads true
Note: Currently this capability is ONLY supported on:
Edge
Firefox
andChrome
browserGET
from is /session/<sessionId>/se/files
.{
"value": {
"names": [
"Red-blue-green-channel.jpg"
]
}
}
In the response the list of file names appear under the key names
.
POST
from is /session/<sessionId>/se/files
with a payload of the form {"name": "fileNameGoesHere}
{
"value": {
"filename": "Red-blue-green-channel.jpg",
"contents": "Base64EncodedStringContentsOfDownloadedFileAsZipGoesHere"
}
}
filename
- The file name that was downloaded.contents
- Base64 encoded zipped contents of the file.The below mentioned curl
example can be used to list all the files that were downloaded by the current session in the Node, and which can be retrieved locally.
curl -X GET "http://localhost:4444/session/90c0149a-2e75-424d-857a-e78734943d4c/se/files"
A sample response would look like below:
{
"value": {
"names": [
"Red-blue-green-channel.jpg"
]
}
}
Retrieve a downloaded file
Assuming the downloaded file is named Red-blue-green-channel.jpg
, and using curl
, the file could be downloaded with the following command:
curl -H "Accept: application/json" \
-H "Content-Type: application/json; charset=utf-8" \
-X POST -d '{"name":"Red-blue-green-channel.jpg"}' \
"http://localhost:4444/session/18033434-fa4f-4d11-a7df-9e6d75920e19/se/files"
A sample response would look like below:
{
"value": {
"filename": "Red-blue-green-channel.jpg",
"contents": "UEsDBBQACAgIAJpagVYAAAAAAAAAAAAAAAAaAAAAUmVkLWJsAAAAAAAAAAAAUmVkLWJsdWUtZ3JlZW4tY2hhbm5lbC5qcGdQSwUGAAAAAAEAAQBIAAAAcNkAAAAA"
}
}
Complete sample code in Java
Below is an example in Java that does the following:
import com.google.common.collect.ImmutableMap;
import org.openqa.selenium.By;
import org.openqa.selenium.io.Zip;
import org.openqa.selenium.json.Json;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.HttpClient;
import org.openqa.selenium.remote.http.HttpRequest;
import org.openqa.selenium.remote.http.HttpResponse;
import java.io.File;
import java.net.URL;
import java.nio.file.Files;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import static org.openqa.selenium.remote.http.Contents.asJson;
import static org.openqa.selenium.remote.http.Contents.string;
import static org.openqa.selenium.remote.http.HttpMethod.GET;
import static org.openqa.selenium.remote.http.HttpMethod.POST;
public class DownloadsSample {
public static void main(String[] args) throws Exception {
// Assuming the Grid is running locally.
URL gridUrl = new URL("http://localhost:4444");
ChromeOptions options = new ChromeOptions();
options.setCapability("se:downloadsEnabled", true);
RemoteWebDriver driver = new RemoteWebDriver(gridUrl, options);
try {
demoFileDownloads(driver, gridUrl);
} finally {
driver.quit();
}
}
private static void demoFileDownloads(RemoteWebDriver driver, URL gridUrl) throws Exception {
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
// Download the two available files on the page
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
// The download happens in a remote Node, which makes it difficult to know when the file
// has been completely downloaded. For demonstration purposes, this example uses a
// 10-second sleep which should be enough time for a file to be downloaded.
// We strongly recommend to avoid hardcoded sleeps, and ideally, to modify your
// application under test, so it offers a way to know when the file has been completely
// downloaded.
TimeUnit.SECONDS.sleep(10);
//This is the endpoint which will provide us with list of files to download and also to
//let us download a specific file.
String downloadsEndpoint = String.format("/session/%s/se/files", driver.getSessionId());
String fileToDownload;
try (HttpClient client = HttpClient.Factory.createDefault().createClient(gridUrl)) {
// To list all files that are were downloaded on the remote node for the current session
// we trigger GET request.
HttpRequest request = new HttpRequest(GET, downloadsEndpoint);
HttpResponse response = client.execute(request);
Map<String, Object> jsonResponse = new Json().toType(string(response), Json.MAP_TYPE);
@SuppressWarnings("unchecked")
Map<String, Object> value = (Map<String, Object>) jsonResponse.get("value");
@SuppressWarnings("unchecked")
List<String> names = (List<String>) value.get("names");
// Let's say there were "n" files downloaded for the current session, we would like
// to retrieve ONLY the first file.
fileToDownload = names.get(0);
}
// Now, let's download the file
try (HttpClient client = HttpClient.Factory.createDefault().createClient(gridUrl)) {
// To retrieve a specific file from one or more files that were downloaded by the current session
// on a remote node, we use a POST request.
HttpRequest request = new HttpRequest(POST, downloadsEndpoint);
request.setContent(asJson(ImmutableMap.of("name", fileToDownload)));
HttpResponse response = client.execute(request);
Map<String, Object> jsonResponse = new Json().toType(string(response), Json.MAP_TYPE);
@SuppressWarnings("unchecked")
Map<String, Object> value = (Map<String, Object>) jsonResponse.get("value");
// The returned map would contain 2 keys,
// filename - This represents the name of the file (same as what was provided by the test)
// contents - Base64 encoded String which contains the zipped file.
String zippedContents = value.get("contents").toString();
// The file contents would always be a zip file and has to be unzipped.
File downloadDir = Zip.unzipToTempDir(zippedContents, "download", "");
// Read the file contents
File downloadedFile = Optional.ofNullable(downloadDir.listFiles()).orElse(new File[]{})[0];
String fileContent = String.join("", Files.readAllLines(downloadedFile.toPath()));
System.out.println("The file which was "
+ "downloaded in the node is now available in the directory: "
+ downloadDir.getAbsolutePath() + " and has the contents: " + fileContent);
}
}
}
3 - TOML configuration options
Grid configuration examples using Toml files.
All the options shown in CLI options can be configured through a TOML file. This page shows configuration examples for the different Grid components.
Note that this documentation could be outdated if an option was modified or added but has not been documented yet. In case you bump into this situation, please check the “Config help” section and feel free to send us a pull request updating this page.
OverviewSelenium Grid uses TOML format for config files. The config file consists of sections and each section has options and its respective value(s).
Refer to the TOML documentation for detailed usage guidance. In case of parsing errors, validate the config using TOML linter.
The general configuration structure has the following pattern:
[section1]
option1="value"
[section2]
option2=["value1","value2"]
option3=true
Below are some examples of Grid components configured with a Toml file, the component can be started in the following way:
java -jar selenium-server-<version>.jar <component> --config /path/to/file/<file-name>.toml
Standalone
A Standalone server, running on port 4449, and a new session request timeout of 500 seconds.
[server]
port = 4449
[sessionqueue]
session-request-timeout = 500
Specific browsers and a limit of max sessions
A Standalone server or a Node which only has Firefox and Chrome enabled by default.
[node]
drivers = ["chrome", "firefox"]
max-sessions = 3
Configuring and customising drivers
Standalone or Node server with customised drivers, which allows things like having Firefox Beta or Nightly, and having different browser versions.
[node]
detect-drivers = false
[[node.driver-configuration]]
max-sessions = 100
display-name = "Firefox Nightly"
stereotype = "{\"browserName\": \"firefox\", \"browserVersion\": \"93\", \"platformName\": \"MAC\", \"moz:firefoxOptions\": {\"binary\": \"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin\"}}"
[[node.driver-configuration]]
display-name = "Chrome Beta"
stereotype = "{\"browserName\": \"chrome\", \"browserVersion\": \"94\", \"platformName\": \"MAC\", \"goog:chromeOptions\": {\"binary\": \"/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta\"}}"
[[node.driver-configuration]]
display-name = "Chrome Dev"
stereotype = "{\"browserName\": \"chrome\", \"browserVersion\": \"95\", \"platformName\": \"MAC\", \"goog:chromeOptions\": {\"binary\": \"/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev\"}}"
webdriver-executable = '/path/to/chromedriver/95/chromedriver'
Standalone or Node with Docker
A Standalone or Node server that is able to run each new session in a Docker container. Disabling drivers detection, having maximum 2 concurrent sessions. Stereotypes configured need to be mapped to a Docker image, and the Docker daemon needs to be exposed via http/tcp. In addition, it is possible to define which device files, accessible on the host, will be available in containers through the devices
property. Refer to the docker documentation for more information about how docker device mapping works.
[node]
detect-drivers = false
max-sessions = 2
[docker]
configs = [
"selenium/standalone-chrome:93.0", "{\"browserName\": \"chrome\", \"browserVersion\": \"91\"}",
"selenium/standalone-firefox:92.0", "{\"browserName\": \"firefox\", \"browserVersion\": \"92\"}"
]
#Optionally define all device files that should be mapped to docker containers
#devices = [
# "/dev/kvm:/dev/kvm"
#]
url = "http://localhost:2375"
video-image = "selenium/video:latest"
Relaying commands to a service endpoint that supports WebDriver
It is useful to connect an external service that supports WebDriver to Selenium Grid. An example of such service could be a cloud provider or an Appium server. In this way, Grid can enable more coverage to platforms and versions not present locally.
The following is an en example of connecting an Appium server to Grid.
[node]
detect-drivers = false
[relay]
# Default Appium/Cloud server endpoint
url = "http://localhost:4723/wd/hub"
status-endpoint = "/status"
# Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status (e.g. HTTP/1.1, HTTP/2)
protocol-version = "HTTP/1.1"
# Stereotypes supported by the service. The initial number is "max-sessions", and will allocate
# that many test slots to that particular configuration
configs = [
"5", "{\"browserName\": \"chrome\", \"platformName\": \"android\", \"appium:platformVersion\": \"11\"}"
]
Basic auth enabled
It is possible to protect a Grid with basic auth by configuring the Router/Hub/Standalone with a username and password. This user/password combination will be needed when loading the Grid UI or starting a new session.
[router]
username = "admin"
password = "myStrongPassword"
Here is a Java example showing how to start a session using the configured user and password.
ClientConfig clientConfig = ClientConfig.defaultConfig()
.baseUrl(new URL("http://localhost:4444"))
.authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"));
HttpCommandExecutor executor = new HttpCommandExecutor(clientConfig);
RemoteWebDriver driver = new RemoteWebDriver(executor, new ChromeOptions());
In other languages, you can use the URL http://admin:myStrongPassword@localhost:4444
Setting custom capabilities for matching specific NodesImportant: Custom capabilities need to be set in the configuration in all Nodes. They also need to be included always in every session request.
[node]
detect-drivers = false
[[node.driver-configuration]]
display-name = "firefox"
stereotype = '{"browserName": "firefox", "platformName": "macOS", "browserVersion":"96", "networkname:applicationName":"node_1", "nodename:applicationName":"app_1" }'
max-sessions = 5
Here is a Java example showing how to match that Node
FirefoxOptions options = new FirefoxOptions();
options.setCapability("networkname:applicationName", "node_1");
options.setCapability("nodename:applicationName", "app_1");
options.setBrowserVersion("96");
options.setPlatformName("macOS");
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444"), options);
driver.get("https://selenium.dev");
driver.quit();
Enabling Managed downloads by the Node.
The Node can be instructed to manage downloads automatically. This will cause the Node to save all files that were downloaded for a particular session into a temp directory, which can later be retrieved from the node. To turn this capability on, use the below configuration:
[node]
enable-managed-downloads = true
Refer to the CLI section for a complete example.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4