Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running selenium tests using Behat Drupal Extension inside DDEV containers

Problem: Get Behat Drupal Extension based testing working inside of ddev containers. This includes adding a separate selenium container to the existing configuration, being able to run Behat tests, and having the be able to reference the web host container.

like image 367
Aron Avatar asked Jul 25 '18 21:07

Aron


1 Answers

Prerequisites: have a working ddev instance hosting Drupal. There are examples already to set that up, so I won't repeat that here.

The above task required the following additions:

  • selenium container: The container running selenium. I used the chrome standalone version. Add the following to your .ddev folder:

File: docker-compose.selenium.yml

version: '3.6'

services:
  selenium:
    container_name: ddev-${DDEV_SITENAME}-selenium
    image: selenium/standalone-chrome-debug:3.13.0-argon
    networks:
      default:
        aliases:
          - web

The last bit is critical; the selenium container needs to know about the web container running the drupal instance to connect to it, but as it is a dependency of the web container, you can't use 'links'. You have to use the aliases approach, using the default network.

  • compose override: A file overriding the defaults for the web container to link the selenium container to it.

File: docker-compose.override.yml

version: '3.6'

services:
  web:
    depends_on:
      - db
      - selenium
    links:
      - db:db
      - selenium:selenium
  • Behat configuration: The following Behat configuration for MinkExtension worked for me:

(modify file behat.yml)

default:
  extensions:
    "Behat\\MinkExtension":
      goutte: null
      base_url: 'http://web'
      javascript_session: selenium2
      selenium2:
        browser: "chrome"
        wd_host: http://selenium:4444/wd/hub
        capabilities:
          extra_capabilities:
            idle-timeout: 50

base_url and wd_host entries were critical in getting this to work.

For more information on the last, see step 5 in the Behat Drupal Extension docs:

Configure your testing environment by creating a file called behat.yml with the following. Be sure that you point the base_url at the web site YOU intend to test. Do not include a trailing slash:

default:
  suites:
    default:
      contexts:
        - FeatureContext
        - Drupal\DrupalExtension\Context\DrupalContext
        - Drupal\DrupalExtension\Context\MinkContext
        - Drupal\DrupalExtension\Context\MessageContext
        - Drupal\DrupalExtension\Context\DrushContext
  extensions:
    Drupal\MinkExtension:
      goutte: ~
      selenium2: ~
      base_url: http://seven.l
    Drupal\DrupalExtension:
      blackbox: ~
like image 52
Aron Avatar answered Nov 02 '22 02:11

Aron