seleniumExecuteTests¶
Description¶
Enables UI test execution with Selenium in a sidecar container.
This step is Jenkins-only.
The step executes a closure (see example below) connecting to a sidecar container with a Selenium Server.
When executing in a
- local Docker environment, please make sure to set Selenium host to
selenium
in your tests. - Kubernetes environment, plese make sure to set Seleniums host to
localhost
in your tests.
Proxy Environments
If work in an environment containing a proxy, please make sure that localhost
/selenium
is added to your proxy exclusion list, e.g. via environment variable NO_PROXY
& no_proxy
. You can pass those via parameters dockerEnvVars
and sidecarEnvVars
directly to the containers if required.
Prerequisites¶
none
Example¶
seleniumExecuteTests (script: this) {
git url: 'https://github.com/xxxxx/WebDriverIOTest.git'
sh '''npm install
node index.js'''
}
Example test using WebdriverIO¶
Example based on http://webdriver.io/guide/getstarted/modes.html and http://webdriver.io/guide.html
Configuration for Local Docker Environment¶
var webdriverio = require('webdriverio');
var options = {
host: 'selenium',
port: 4444,
desiredCapabilities: {
browserName: 'chrome'
}
};
Configuration for Kubernetes Environment¶
var webdriverio = require('webdriverio');
var options = {
host: 'localhost',
port: 4444,
desiredCapabilities: {
browserName: 'chrome'
}
};
Test Code (index.js)¶
// ToDo: add configuration from above
webdriverio
.remote(options)
.init()
.url('http://www.google.com')
.getTitle().then(function(title) {
console.log('Title was: ' + title);
})
.end()
.catch(function(err) {
console.log(err);
});
Parameters¶
name | mandatory | default | possible values |
---|---|---|---|
buildTool |
no | npm |
maven , npm , bundler |
containerPortMappings |
no | [selenium/standalone-chrome:[[containerPort:4444, hostPort:4444]]] |
|
dockerEnvVars |
no | ||
dockerImage |
no | buildTool=maven :maven:3.5-jdk-8 buildTool= npm :node:lts-buster buildTool= bundler :ruby:2.5.3-stretch |
|
dockerName |
no | buildTool=maven :maven buildTool= npm :npm buildTool= bundler :bundler |
|
dockerOptions |
no | ||
dockerWorkspace |
no | buildTool=maven :<empty> buildTool= npm :/home/node buildTool= bundler :<empty> |
|
failOnError |
no | true |
true , false |
gitBranch |
no | ||
gitSshKeyCredentialsId |
no | `` | Jenkins credentials id |
script |
yes | ||
seleniumHubCredentialsId |
no | ||
sidecarEnvVars |
no | ||
sidecarImage |
no | selenium/standalone-chrome |
|
sidecarName |
no | selenium |
|
sidecarVolumeBind |
no | [/dev/shm:/dev/shm] |
|
stashContent |
no | [tests] |
|
testRepository |
no |
buildTool
- Defines the tool which is used for executing the testscontainerPortMappings
- Map which defines per docker image the port mappings, e.g.containerPortMappings: ['selenium/standalone-chrome': [[name: 'selPort', containerPort: 4444, hostPort: 4444]]]
.dockerEnvVars
- Environment variables to set in the container, e.g. [http_proxy: 'proxy:8080'].dockerImage
- Name of the docker image that should be used. Configure with empty value to execute the command directly on the Jenkins system (not using a container). Omit to use the default image (cf. default_pipeline_environment.yml) Overwrite to use custom Docker image.dockerName
- Kubernetes only: Name of the container launchingdockerImage
. SideCar only: Name of the container in local network.dockerOptions
- Docker only: Docker options to be set when starting the container (List or String).dockerWorkspace
- Kubernetes only: Specifies a dedicated user home directory for the container which will be passed as value for environment variableHOME
.failOnError
- WithfailOnError
the behavior in case tests fail can be defined.gitBranch
- Only iftestRepository
is provided: Branch of testRepository, defaults to master.gitSshKeyCredentialsId
- Only iftestRepository
is provided: Credentials for a protected testRepositoryscript
- The common script environment of the Jenkinsfile running. Typically the reference to the script calling the pipeline step is provided with thethis
parameter, as inscript: this
. This allows the function to access thecommonPipelineEnvironment
for retrieving, e.g. configuration parameters.seleniumHubCredentialsId
- Defines the id of the user/password credentials to be used to connect to a Selenium Hub. The credentials are provided in the environment variablesPIPER_SELENIUM_HUB_USER
andPIPER_SELENIUM_HUB_PASSWORD
.sidecarEnvVars
- asdockerEnvVars
for the sidecar containersidecarImage
- asdockerImage
for the sidecar containersidecarName
- asdockerName
for the sidecar containersidecarVolumeBind
- asdockerVolumeBind
for the sidecar containerstashContent
- Specific stashes that should be considered for the step execution.testRepository
- Define an additional repository where the test implementation is located. For protected repositories thetestRepository
needs to contain the ssh git url.
Step configuration¶
We recommend to define values of step parameters via config.yml file.
In following sections of the config.yml the configuration is possible:
parameter | general | step/stage |
---|---|---|
buildTool |
X | X |
containerPortMappings |
X | X |
dockerEnvVars |
X | X |
dockerImage |
X | X |
dockerName |
X | X |
dockerOptions |
X | X |
dockerWorkspace |
X | X |
failOnError |
X | X |
gitBranch |
X | X |
gitSshKeyCredentialsId |
X | X |
script |
||
seleniumHubCredentialsId |
X | X |
sidecarEnvVars |
X | X |
sidecarImage |
X | X |
sidecarName |
X | X |
sidecarVolumeBind |
X | X |
stashContent |
X | X |
testRepository |
X | X |
Dependencies¶
The step depends on the following Jenkins plugins
- credentials-binding
- docker
- git
- kubernetes
- pipeline-utility-steps
- workflow-basic-steps
- workflow-cps-global-lib
- workflow-durable-task-step
The kubernetes plugin is only used if running in a kubernetes environment. Transitive dependencies are omitted.
The list might be incomplete.
Consider using the ppiper/jenkins-master docker image. This images comes with preinstalled plugins.
Side effects¶
none
Exceptions¶
none