Automating GitHub Actions for Selenium Grid Execution - Nytrotype/Selenium-with-Java-automation-work GitHub Wiki

Introduction

Automating Selenium Grid execution with GitHub Actions ensures continuous testing, parallel execution, and cloud-based scalability. This setup integrates Selenium with CI/CD pipelines, enabling automated test execution for every Git push or pull request.


1. Why Use GitHub Actions for Selenium Grid?

Fully Automated Test Execution – Runs Selenium Grid tests on every code change.
Parallel Testing Support – Executes tests across multiple browser environments.
Integrates with CI/CD Pipelines – Ensures stable builds before deployment.
Cloud & Local Execution – Supports AWS, Azure, LambdaTest, Sauce Labs.
Reduces Manual Effort – Automates QA validation for faster release cycles.


2. Setting Up GitHub Actions for Selenium Grid

Step 1: Create .github/workflows/selenium-grid.yml

Inside your repository, create the following workflow file:

name: Selenium Grid Test Execution

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  selenium-grid-tests:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2

      - name: Set Up Java Environment
        uses: actions/setup-java@v2
        with:
          distribution: 'temurin'
          java-version: '17'

      - name: Install Maven Dependencies
        run: mvn clean install

      - name: Start Selenium Grid Hub & Nodes
        run: |
          docker-compose -f selenium-grid.yml up -d

      - name: Run Selenium Tests
        run: mvn test

      - name: Store Test Reports
        uses: actions/upload-artifact@v2
        with:
          name: Selenium-Test-Reports
          path: target/test-output/

3. Configuring Selenium Grid for CI/CD

Step 1: Create a Docker Compose File (selenium-grid.yml)

Use Docker Compose to deploy Selenium Hub & Nodes:

version: '3'

services:
  selenium-hub:
    image: selenium/hub
    ports:
      - "4444:4444"

  chrome-node:
    image: selenium/node-chrome
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub

Step 2: Execute Selenium Tests on Grid

Ensure your Java project uses Remote WebDriver:

String gridUrl = "http://localhost:4444/wd/hub";
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("browserName", "chrome");

WebDriver driver = new RemoteWebDriver(new URL(gridUrl), caps);
driver.get("https://www.google.com");
System.out.println("Page Title: " + driver.getTitle());
driver.quit();

4. Storing Test Artifacts in GitHub

Enable GitHub Actions to upload test reports:

- name: Store Test Reports
  uses: actions/upload-artifact@v2
  with:
    name: Selenium-Test-Reports
    path: target/test-output/

View reports in GitHub Actions Workflow Runs.
Integrate Allure Reports for enhanced test analytics.


5. Best Practices for GitHub Actions & Selenium Grid

Use Parallel Execution – Speed up test cycles via TestNG parallel execution.
Implement Retry Logic – Reduce flaky test failures with JUnit/TestNG retries.
Cache Maven Dependencies – Improve pipeline speed with:

- name: Cache Maven Dependencies
  uses: actions/cache@v2
  with:
    path: ~/.m2/repository
    key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}

Run Headless Tests – Save execution time with:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
WebDriver driver = new ChromeDriver(options);

Conclusion

By automating Selenium Grid execution with GitHub Actions, teams ensure continuous testing, scalable parallel execution, and faster feedback loops. This approach improves quality assurance while seamlessly integrating into CI/CD workflows.