Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Selenium WebDriver Docker Image Docker Repository on Quay

This Docker image provides support for Selenium WebDriver Tests.

This image includes following technologies:

  • Maven
  • Firefox (headless)
  • Chromium (headless)

If you want to use Selenium Standalone, feel free to use cosee-concourse/dind-image instead.

This image is hosted at quay.io: quay.io/cosee-concourse/selenium

Example: Usage with ConcourseCI

Selenium WebDriver

Task definition:

platform: linux

image_resource:
        type: docker-image
        source: {
        repository: quay.io/cosee-concourse/selenium,
        tag: "latest" }

run:
        path: sh
        args:
        - -exc
        - |
          Xvfb :98 &
          export DISPLAY=:98
          cd source/path_to_selenium-tests
          #example maven selenium test
          mvn -Dweb.baseUrl=https://$APPURL/ install
          kill -9 $(pgrep Xvfb)

inputs:
    - name: source

There are different tags of this image. (For more details, take a look on quay.io).

Selenium WebDriver using Docker-Compose

If you want to use Selenium WebDriver with Docker-Compose, you have to use the DinD image (Further information on cosee-concourse/dind-image.

Pipeline definition:

...

jobs:
- name: Test
  plan:
  - get: source
    trigger: true
  - task: runTest
    privileged: true        # required
    file: source/path_to_task_definition/taskDefinition.yml
    params:
        APPNAME: testingappname
        CREDENTIAL1: cred1
        CREDENTIAL2: cred2
    
... 

Task definition:

platform: linux

image_resource:
        type: docker-image
        source: {
        repository: quay.io/cosee-concourse/dind,
        tag: "latest" }

run:
        path: sh
        args:
        - -exc
        - |
          source /docker-lib.sh         #required
          start_docker                  #required
          export BASEFOLDER=$(pwd)      #recommended

          #set up test environment
          docker-compose -f source/path_to_dockercompose/dc-testenvironment.yml up -d
          #Selenium Test
          docker-compose -f source/path_to_dockercompose/dc-testscenario.yml run selenium
          rc=$?
          #Test 2
          docker-compose -f source/path_to_dockercompose/dc-testscenario.yml run test2
          rc2=$?
          #destroy test environment
          docker-compose -f source/path_to_dockercompose/dc-testenvironment.yml down
          docker-compose -f source/path_to_dockercompose/dc-testscenario.yml down
          exit $rc || $rc2

inputs:
    - name: source
    - name: artifacts

dc-testenvironment.yml:

version: '3'
services:
    mysqlserver:
        image: mysql:5.6
        container_name: "mysqlserver"
        ports:
            - "3306:3306"
        volumes:
            - ./tmp/mysql:/var/lib/mysql
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=ThisPassword
        networks:
            - selenium-network
    frontend:
        image: "maven:3-jdk-8"
        container_name: "frontend"
        links: 
            - "mysqlserver"
        networks:
            - selenium-network
        ports:
            - "81:81"
        volumes:
            - ${BASEFOLDER}/artifacts:/artifacts
        environment: 
            - NAME=${APPNAME}
            - CRED1=${CREDENTIAL1}
            - CRED2=${CREDENTIAL2}
        command: >
            /bin/sh -c "
                while ! curl mysqlserver:3306 2> /dev/null;
                do
                    echo \"Waiting for MySQL server\";
                    sleep 1;
                done;
                echo \"Server is available!\";

                cd /artifacts
                java \
                    -Dserver.port=81 \
                    -jar testapp-0.0.1-SNAPSHOT.jar -Xmx300m -Xms50m \
                    --spring.datasource.url=jdbc:mysql://mysqlserver/testdatabase"

networks:
    selenium-network:
        driver: bridge

dc-testscenario.yml:

version: '3'
services:
    selenium:
        image: "quay.io/cosee-concourse/selenium"
        container_name: "selenium"
        network_mode: "host"
        volumes:
            - ${BASEFOLDER}/source:/source
            - /dev/shm:/dev/shm             #required for Chromium Driver
        environment:
            - NAME=${APPNAME}
            - CRED1=${CREDENTIAL1}
        command: >
            /bin/sh -c "
                Xvfb :98 &
                export DISPLAY=:98
                while ! timeout 1 bash -c 'cat < /dev/null > /dev/tcp/localhost/81';
                do
                    echo \"Waiting for website\";
                    sleep 1;
                done;
                echo \"Server is available!\";
                cd source/path_to_selenium-tests
                #example maven selenium test
                mvn -Dweb.baseUrl=https://$APPURL/ install
                kill -9 $(pgrep Xvfb)"
                
    test2:
        image: "maven"
        container_name: "test2"
        network_mode: "host"
        ...
    
    ...
 
 

Selenium Standalone

If you want to use Selenium Standalone, you have to use the DinD image (Further information on cosee-concourse/dind-image.

docker-compose.yml:

hub:
  image: selenium/hub
  ports:
    - "4444:4444"
firefox:
  image: selenium/node-firefox
  links:
    - hub
chrome:
  image: selenium/node-chrome
  links:
    - hub

Pipeline definition:

...

jobs:
- name: Selenium-Test
  plan:
  - get: source
    trigger: true
  - task: runSeleniumTest
    privileged: true        # required
    file: source/path_to_task_definition/taskDefinition.yml
    
... 

Task definition:

platform: linux

image_resource:
        type: docker-image
        source: {
        repository: quay.io/cosee-concourse/dind,
        tag: "latest" }

run:
        path: sh
        args:
        - -exc
        - |
          source /docker-lib.sh               # required
          start_docker                        # required
          cd source/path_to_dockercompose_yml
          docker-compose up
          # if you want to use more instances of firefox and chrome:
          # docker-compose scale chrome=15 firefox=15
          docker run -it --rm myTestDocker /runTest.sh -p 4444
          rc=$?                               # exit code of myTestDocker
          docker-compose down                 # required
          exit $rc

inputs:
    - name: source

About

Selenium WebDriver Docker Image

Resources

Stars

2 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors