Using Desired Capabilities
You can specify browser capabilities when running SeleniumBase tests on a remote Selenium Grid server (such as BrowserStack or Sauce Labs).
Sample run commands may look like this when run from the SeleniumBase/examples/ folder: (The browser is now specified in the capabilities file.)
pytest test_demo_site.py --browser=remote --server=USERNAME:KEY@hub.browserstack.com --port=80 --cap_file=capabilities/sample_cap_file_BS.py
pytest test_demo_site.py --browser=remote --server=USERNAME:KEY@ondemand.us-east-1.saucelabs.com --port=443 --protocol=https --cap_file=capabilities/sample_cap_file_SL.py
(Parameters: --browser=remote
, --server=SERVER
, --port=PORT
, and --cap_file=CAP_FILE.py
)
Here’s an example desired capabilities file for BrowserStack using the newer SDK format in a .yml
/ .yaml
file:
platforms:
- browserName: safari
osVersion: 17
deviceName: iPhone 15 Pro Max
buildIdentifier: ${BUILD_NUMBER}
parallelsPerPlatform: 1
projectName: My Project
browserstackLocal: true
debug: true
networkLogs: true
Here’s an example desired capabilities file for BrowserStack using the legacy JSONWP format in a .py
file:
desired_cap = {
"browser": "Chrome",
"os": "Windows",
"os_version": "11",
"browser_version": "latest",
"browserstack.console": "info",
"browserstack.debug": "true",
"browserstack.networkLogs": "true",
"browserstack.local": "true",
}
Here’s an example desired capabilities file for Sauce Labs:
capabilities = {
"browserName": "chrome",
"browserVersion": "latest",
"platformName": "macOS 10.14",
"sauce:options": {},
}
(Note that the browser is now being specified in the capabilities file, rather than with --BROWSER
when using a remote Selenium Grid. If using a local Selenium Grid, specify the browser, eg: --firefox
.)
SeleniumBase has a desired capabilities parser that can capture all lines from the specified file in the following formats:
'KEY': 'VALUE'
'KEY': True
'KEY': False
caps['KEY'] = "VALUE"
caps['KEY'] = True
caps['KEY'] = False
(Each pair must be on a separate line. You can interchange single and double quotes.)
You can also swap --browser=remote
with an actual browser, eg --browser=chrome
, which will combine the default SeleniumBase desired capabilities with those that were specified in the capabilities file when using --cap_file=FILE.py
. Capabilities will override other parameters, so if you set the browser to one thing and the capabilities browser to another, SeleniumBase will use the capabilities browser.
You’ll need default SeleniumBase capabilities for:
- Using a proxy server (not the same as a Selenium Grid server)
- Downloading files to a desired folder
- Disabling some warnings on Chrome
- Overriding a website’s Content Security Policy on Chrome
- Other possible reasons
You can also set browser desired capabilities from a command-line string. Eg:
pytest test_swag_labs.py --cap-string='{"browserName":"chrome","name":"test1"}' --server="127.0.0.1" --browser=remote
(Enclose cap-string in single quotes. Enclose parameter keys in double quotes.)
If you pass "*"
into the "name"
field of --cap-string
, the name will become the test identifier. Eg:
pytest my_first_test.py --cap-string='{"browserName":"chrome","name":"*"}' --server="127.0.0.1" --browser=chrome
Example name: "my_first_test.MyTestClass.test_basics"
Using a local Selenium Grid
If using a local Selenium Grid with SeleniumBase, start up the Grid Hub and nodes first:
sbase grid-hub start
sbase grid-node start
(The Selenium Server JAR file will be automatically downloaded for first-time Grid users. You’ll also need Java installed to start up the Grid.)