Skip to content

cosee-concourse/selenium-image

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

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