mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-15 16:06:41 +03:00
ace3e37241
- In karma.conf.js, give ourselves the ability to merge Selenium configs together without clobbering argument lists, for better deduplication in shaka-lab.yaml. This is based on https://github.com/shaka-project/karma-local-wd-launcher/pull/50 - Refactor shaka-lab.yaml to take advantage of this new ability. This removes a bunch of duplicate command line arguments for various versions of Chrome. - Remove a TODO about a bug that Chrome decided they would never fix. - Sort the list of devices and platforms, with comments to mark out the sections. - Remove IE11, which we are well past supporting or testing. This should be cherry-picked to all active branches.
175 lines
4.5 KiB
Markdown
175 lines
4.5 KiB
Markdown
# Selenium Grid Config
|
|
|
|
Shaka Player's test runner (Karma) can be directed to run tests on a Selenium
|
|
grid. For this, you need a config file that defines what browsers are
|
|
available, and how to request them via WebDriver.
|
|
|
|
For a fully-worked, detailed example, see the config for the private grid in
|
|
our lab at [build/shaka-lab.yaml](https://github.com/shaka-project/shaka-player/blob/main/build/shaka-lab.yaml)
|
|
|
|
## Usage
|
|
|
|
```sh
|
|
python build/test.py \
|
|
--grid-config grid-config.yaml \
|
|
--grid-address selenium-hub-hostname:4444
|
|
```
|
|
|
|
## Syntax
|
|
|
|
The config file is written in YAML. We chose YAML because it has two big
|
|
advantages over JSON:
|
|
|
|
1. You can add comments
|
|
2. You can define variables (with YAML "anchors") to factor out common configs
|
|
|
|
### Variables
|
|
|
|
You can define any common variables in the `vars` section, then refer to them
|
|
elsewhere. For example:
|
|
|
|
```yaml
|
|
vars:
|
|
# Generates an "anchor" with the given name. Later, you can inject the
|
|
# contents of the variable with "*name".
|
|
firefox_config: &firefox_config
|
|
moz:firefoxOptions:
|
|
# Override Firefox default preferences in the temporary profile created
|
|
# for each test run.
|
|
prefs:
|
|
# Overrides Selenium's explicit default setting, to allow Firefox to
|
|
# install the Widevine CDM on demand.
|
|
media.gmp-manager.updateEnabled: true
|
|
# Overrides Firefox's Linux-specific default setting to disable DRM.
|
|
media.eme.enabled: true
|
|
|
|
# These three browser definitions share the same config from above.
|
|
FirefoxMac:
|
|
browser: firefox
|
|
os: Mac
|
|
extra_configs:
|
|
- *firefox_config
|
|
|
|
FirefoxWindows:
|
|
browser: firefox
|
|
os: Windows
|
|
extra_configs:
|
|
- *firefox_config
|
|
|
|
FirefoxLinux:
|
|
browser: firefox
|
|
os: Linux
|
|
extra_configs:
|
|
- *firefox_config
|
|
```
|
|
|
|
### Browsers
|
|
|
|
Each top-level key in the config file (except for `vars`) is the name of a
|
|
browser made available to Karma. Within each of those keys are the following:
|
|
|
|
- `browser`: The name of the browser. This is case-sensitive, and must match
|
|
the string and case used by Selenium.
|
|
- `os` (optional): The name of the OS. This is case-INsensitive, and must
|
|
match the name of the platform as used by Selenium. For Generic
|
|
WebDriver Server, this can be omitted or set to the name of the host
|
|
platform.
|
|
- `version` (optional): The version of the browser. This is case-sensitive,
|
|
and must match the string and case used in the Selenium node config.
|
|
- `disabled` (optional): If true, this browser is disabled and will not be
|
|
used unless explicitly requested.
|
|
- `extra_configs` (optional): An array of dictionaries of extra configs which
|
|
will be merged with the WebDriver launcher config in Karma.
|
|
|
|
Examples of basic desktop browsers definitions:
|
|
|
|
```yaml
|
|
ChromeMac:
|
|
browser: chrome
|
|
os: Mac
|
|
|
|
FirefoxMac:
|
|
browser: firefox
|
|
os: Mac
|
|
|
|
Safari:
|
|
browser: safari
|
|
os: Mac
|
|
|
|
SafariTP:
|
|
browser: safari
|
|
os: Mac
|
|
extra_configs:
|
|
- safari.options:
|
|
technologyPreview: true
|
|
|
|
ChromeWindows:
|
|
browser: chrome
|
|
os: Windows
|
|
|
|
FirefoxWindows:
|
|
browser: firefox
|
|
os: Windows
|
|
|
|
Edge:
|
|
browser: msedge
|
|
os: Windows
|
|
|
|
ChromeLinux:
|
|
browser: chrome
|
|
os: Linux
|
|
|
|
FirefoxLinux:
|
|
browser: firefox
|
|
os: Linux
|
|
```
|
|
|
|
### Composing configs
|
|
|
|
You can define variables for browser configs that can be composed together in
|
|
`extra_configs`. For example, below you will see some basic definitions for
|
|
Chrome arguments and parameters, and then an additional config with an argument
|
|
that is only needed for some platforms. `karma.conf.js` will merge those
|
|
argument lists intelligently when it loads the YAML config.
|
|
|
|
```yaml
|
|
vars:
|
|
basic_chrome_config: &basic_chrome_config
|
|
goog:chromeOptions:
|
|
args:
|
|
# Normally, Chrome disallows autoplaying videos in many cases. Enable
|
|
# it for testing.
|
|
- "--autoplay-policy=no-user-gesture-required"
|
|
|
|
# Instruct chromedriver not to disable component updater.
|
|
excludeSwitches:
|
|
- "disable-component-update"
|
|
|
|
headless_chrome_config: &headless_chrome_config
|
|
goog:chromeOptions:
|
|
args:
|
|
# Run in headless mode.
|
|
- "--headless"
|
|
|
|
ChromeLinux:
|
|
browser: chrome
|
|
os: Mac
|
|
extra_configs:
|
|
- *basic_chrome_config
|
|
|
|
ChromeWindows:
|
|
browser: chrome
|
|
os: Mac
|
|
extra_configs:
|
|
- *basic_chrome_config
|
|
|
|
ChromeMac:
|
|
browser: chrome
|
|
os: Mac
|
|
# Take the parameters and arguments for basic_chrome_config, then append the
|
|
# arguments for headless_chrome_config.
|
|
extra_configs:
|
|
- *basic_chrome_config
|
|
- *headless_chrome_config
|
|
```
|