Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

You can run Selenium WebDriver tests in GitHub Actions by checking out the repository, installing the language runtime and dependencies, ensuring the runner has a browser Selenium can launch, and running the same test command you use locally. The key decision is the execution environment: GitHub-hosted Linux, Windows, and macOS runners suit many projects, while self-hosted or remote WebDriver setups can help when you need specific operating systems, browser coverage, or network access.

Although teams sometimes call browser checks “unit tests,” Selenium drives a real browser and exercises application behavior across the browser boundary. Keep these slower checks distinct from fast unit tests when that separation helps your suite. GitHub describes Actions as a platform for automating build, test, and deployment pipelines in its Quickstart for GitHub Actions.

Start with the test command you already run locally

A reliable workflow is usually a CI version of a command developers already trust. Identify the command that runs the browser tests on a developer machine, then make GitHub Actions provide the same runtime, dependencies, browser, and relevant environment settings. Avoid inventing a CI-only test invocation unless the project genuinely needs one.

A workflow responds to repository events and is made up of jobs and steps. A job selects an execution environment with runs-on; its steps can check out source, set up a language runtime, install dependencies, and run tests. GitHub’s quickstart and workflow templates are useful starting points, but neither supplies a universally correct Selenium workflow for every language and browser.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Philips 24 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 241V8LB
  • CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
  • WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
  • A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents

Choose where the browser will run

The runner choice is the most consequential environment decision. GitHub provides hosted virtual machines for Linux, Windows, and macOS and also supports self-hosted runners. Pick based on the operating system and browser combinations your tests actually require, how reproducibly you can provision them, and who owns maintenance.

Runner option Useful when Trade-offs to evaluate
GitHub-hosted runner You want a managed VM for a supported OS and a straightforward CI setup. Confirm the current runner image and how to provision the required browser. You control less of the underlying image than with a machine you manage.
Self-hosted runner You need control over installed software, network access, or a specialized environment. Your team owns provisioning, updates, security, and maintenance; setup should be made repeatable rather than relying on undocumented machine state.
Remote WebDriver / Selenium Server You need remote execution or a broader browser/platform matrix than one runner provides. It adds configuration and possibly a provider relationship. Check the chosen provider’s browser coverage, pricing, privacy terms, and operational model before relying on it.

Runner images change. Do not assume a particular browser or driver version is preinstalled indefinitely; check the live documentation for the image and action versions you select. The GitHub documentation on hosted runners and self-hosted runners describes the available runner classes.

What Selenium needs on the runner

A Selenium session needs language bindings, a browser, and the browser’s matching WebDriver implementation. Recent Selenium versions include Selenium Manager, which can resolve and download a driver when needed. That can remove the need for a handwritten driver-download step, but it is conditional: the Selenium version, installed browser, and runner environment must support the resolution and download. Selenium’s WebDriver overview explains the browser/driver relationship, and its Selenium Manager documentation describes driver management.

The example below is deliberately pinned to a concrete stack: Java 17, Maven, JUnit 5, Selenium Java 4.11 or later, Chrome installed on the selected runner, and GitHub-hosted Ubuntu. It uses the repository’s standard mvn verify command. Before adopting it, verify the current runner image and action versions and align the JDK, Selenium dependency, and browser setup with your project. The workflow does not claim that any specific browser version is always present on a GitHub image.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Philips 22 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 221V8LB
  • CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
  • SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors

Example: Java, Maven, JUnit 5, and Chrome

Save this as .github/workflows/selenium.yml. It runs on pushes and pull requests. The test job grants only read access to repository contents, which is generally enough to check out code; change permissions only when the workflow’s actions require more.

name: Selenium tests

on:
  push:
  pull_request:

permissions:
  contents: read

jobs:
  browser-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v4

      - name: Set up Java 17
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: '17'
          cache: maven

      - name: Run tests
        run: mvn --batch-mode verify

      - name: Upload test reports
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: maven-test-reports
          path: target/surefire-reports/
          if-no-files-found: ignore

The workflow follows GitHub’s Java/Maven setup pattern: use setup-java to select a JDK, optionally cache Maven dependencies, run the normal Maven goal, and upload useful output. See GitHub’s Java with Maven guide. This sample assumes Chrome can be launched on the chosen runner and Selenium Manager can locate or obtain a compatible driver. If that is not true for your project’s selected image, provision the browser and driver explicitly using a maintained, documented setup appropriate to that environment.

Make the local test configuration explicit

Your Maven project needs Selenium Java and a test framework dependency. For example, in a project that uses JUnit 5, declare Selenium in the project’s normal dependency management and make the browser test a test class executed by Maven. Keep versions managed and updated in the project rather than relying on an unspecified transitive dependency. The workflow does not need a special test command if mvn verify already runs the relevant tests locally and in CI.

If your local command filters tests, sets a browser property, or relies on environment variables, carry those same choices into the workflow. Store sensitive credentials in GitHub Actions secrets only when required, and do not pass write-enabled secrets or tokens to untrusted pull-request code without a separately justified secure design.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Dell 24 Monitor - SE2426H - 23.8-inch FHD (1920x1080) 144Hz 1ms Display, in-Plane Switching (IPS) Technology, AMD FreeSync™, TÜV 3-Star 2X HDMI, Tilt
  • Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
  • Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
  • Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
  • In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
  • Ultra-thin bezels: Maximize your viewing experience with thin bezels.

Wait for the page condition your test needs

Page navigation reaching its document-ready state does not mean client-side JavaScript has finished creating or revealing the element a test will use. Selenium identifies synchronization races between an application and test commands as a common source of flaky browser checks. As the Selenium Project’s waiting-strategies documentation puts it, “Perhaps the most common challenge for browser automation is ensuring that the web application is in a state to execute a particular Selenium command as desired.”

Use an explicit wait for the actual condition at the point of use. In Java, the following pattern waits until a button is clickable before interacting with it:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement submit = wait.until(
    ExpectedConditions.elementToBeClickable(By.cssSelector("button[type='submit']"))
);
submit.click();

Choose a timeout appropriate to the application and CI environment; a timeout is a bound, not proof that the page is ready. A condition-specific wait can target visibility, presence, clickability, or another state relevant to the next action.

  • Do not rely on a fixed sleep as the default. A short sleep may be insufficient on a slow run, while a long one wastes time on fast runs.
  • Do not mix implicit and explicit waits. Selenium warns that the combined timing can become unpredictable. Prefer explicit waits for conditions your tests need.
  • Wait for the application state, not merely for navigation to finish. Client-rendered content may continue changing after the document load event.

Use caches and artifacts for different jobs

A cache reuses files that are expensive to regenerate, such as Maven dependencies. The cache: maven option in the example can save dependency-download time, but the build must still work on a cache miss. An artifact preserves outputs from a completed run so they can be downloaded or passed between jobs; useful items include test reports, screenshots, logs, and browser diagnostics.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Samsung 27" Essential S3 (S36GD) Series FHD 1800R Curved Computer Monitor
  • CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
  • SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
  • MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
  • KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
  • INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient

GitHub’s dependency caching guidance cautions against putting secrets in caches and notes that caches can be read by workflows with lower trust. Treat restored cache files as untrusted, and do not casually enable cache writes in contexts where an attacker-controlled workflow could poison data later consumed by a more trusted job. The artifact documentation covers retaining run outputs separately from cache behavior.

Limit the workflow token’s permissions

Grant only the access needed by the job. GitHub supports token permissions at workflow and job scope; when you enumerate permissions, scopes you omit become none. The example grants contents: read for checkout and does not grant write access. If another action needs a permission, add only that specific scope after checking what it does.

Pull requests from forks and other untrusted code need particular care: do not expose secrets or write-capable tokens to code you do not trust. Consult GitHub’s workflow permissions reference and design any exception around the actual threat model rather than broadening all workflow permissions.

Common failures and practical fixes

  • “Unable to locate a driver” or driver startup failure: Confirm the browser is installed and available to the runner, and that the Selenium version supports Selenium Manager. If automatic resolution cannot work in your environment, provision a compatible driver explicitly and keep that setup documented.
  • Browser binary not found: The selected runner image may not contain the browser your test expects. Verify the current image documentation or install the browser in a repeatable setup step; do not assume runner images never change.
  • Element not found immediately after navigation: Wait explicitly for the needed element state, such as visibility or clickability. Document readiness alone may not reflect JavaScript-rendered application state.
  • Intermittent timeouts: Identify which condition is unmet and whether the application is slow, the selector is unstable, or the test is waiting for the wrong state. Avoid hiding synchronization problems by adding arbitrary fixed sleeps.
  • Tests pass locally but fail in CI: Compare OS, browser provisioning, environment variables, network access, and test command. Make implicit local assumptions explicit in the workflow or move to a runner you control if the required environment cannot be reproduced on a hosted runner.
  • No useful failure details after the job ends: Upload test reports and, where your test harness produces them, screenshots or browser logs as artifacts. Use if: always() so diagnostic upload can run after a failing test step.
  • Cache-related surprises: Ensure the build can regenerate dependencies without a cache, avoid storing secrets, and treat restored contents as untrusted rather than as authoritative build outputs.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

When one runner is not enough

A single local WebDriver session is often the simplest place to start. Move to remote WebDriver or Selenium Server when you need remote execution or a wider browser/platform matrix. Compare the available browsers and platforms, setup time, environment control, debugging access, and the provider’s specific price and privacy terms. Selenium supports remote sessions, but provider capabilities and terms vary; verify them directly before choosing a service.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Sale
Sceptre New 22-Inch Gaming Monitor, FHD 1080p, Up to 144Hz, HDMI, DisplayPort, Built-in Speakers, Machine Black (E225W-FW144 Series, 2026)
  • 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
  • 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
  • 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.

Or skip the browser setup

If your goal is to capture a page image or PDF rather than exercise browser interactions in an automated test, ScreenshotNeo offers a one-request screenshot API and an MCP server for AI agents. It is not a replacement for Selenium when you need to test clicks, application behavior, or assertions. For a screenshot request, use this cURL example; the ScreenshotNeo documentation covers its API.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
  • Cookie and consent banners are accepted before capture; 60+ known consent platforms, newsletter popups, and chat widgets are removed, with each step configurable.
  • Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed; responses include X-Page-Verdict and X-Billed headers.
  • An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
  • The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots.

Sign up for ScreenshotNeo’s free plan to try it without a card.

Frequently Asked Questions

Does Selenium in GitHub Actions count as a unit test?

It is a browser-level check: Selenium drives a browser to exercise application behavior. Teams may call it a unit test colloquially, but keeping it separate from fast unit tests can make the suite easier to manage.

Do I need to download ChromeDriver manually?

Not necessarily. Recent Selenium versions include Selenium Manager, which can resolve or download a driver when needed, provided the Selenium version, browser, and runner environment support it.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can I use a remote browser instead of installing one on the runner?

Yes. Selenium supports remote sessions, which can help with remote execution or a broader browser/platform matrix. Choose a specific setup only after checking its coverage, pricing, privacy terms, and operational requirements.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.