Running Selenium Tests: The Complete Guide
Do you spend hours manually testing your web application across desktop and mobile browsers? Need an automated solution that works seamlessly across Chrome, Firefox, Safari and beyond?
Look no further than Selenium!
Selenium automates web application testing across 2000+ real desktop and mobile browsers. As per Statista, Selenium usage has grown 4X in the last 5 years due to its flexibility across platforms and languages.
I have personally worked with Selenium for over 10 years across various test automation initiatives. In this comprehensive guide, I will share the exact process to:
- Set up Selenium from scratch
- Write automated Selenium scripts with ease
- Run cross-browser testing on cloud emulators
- Integrate seamlessly with CI/CD pipelines
- Monitor and report on test execution
- Apply best practices for long-term success
So let‘s get started, my friend!
Chapter 1 – Selenium Basics
Before jumping into Selenium code, it‘s good to understand what Selenium is, what problems it solves and how it fits your testing requirements.
What is Selenium?
Selenium is an open-source automated testing suite for web applications across different browsers and platforms. Its key capabilities:
- Multi-browser testing: Safari, Chrome, Firefox, IE, Edge etc.
- Cross-platform support: Windows, Linux, Mac
- Multiple language bindings: Java, C#, Python, JavaScript etc.
- Testing of responsive web apps: desktop sites, mobile sites and native apps
- Supports modern web frameworks: React, Angular, Vue.js etc.
- Integration with CI/CD pipelines like Jenkins, Github Actions etc.
These benefits have made Selenium the #1 browser test automation tool with 180K+ monthly downloads.
Advantages of Selenium
Here are some key reasons why 3 million+ testers and developers prefer Selenium:
- Open source and completely free
- Enables reliable regression testing across browsers
- Scalable across multiple environments
- Portable across operating systems
- Continued development with Selenium 4 and beyond
- Large community support across StackOverflow, GitHub etc.
For traditional web apps built with server-rendered HTML, Selenium provides the most robust and resilient testing solution.
Limitations of Selenium
However, we must also consider some downsides before adopting Selenium:
- Not optimized for single page web apps (SPAs)
- Script maintenance can be time-consuming
- Steep learning curve for those new to coding
- Slower execution than rivals like Playwright and Cypress
- Limited built-in reporting and session tracking
Emerging tools like Cypress, Playwright and TestProject overcome some Selenium challenges but support fewer browsers/platforms currently.
So weigh your application complexity, team skills and delivery timelines before finalizing automation approach.
Now let‘s shift gears and set up our Selenium testing environment.
Chapter 2 – Setting Up Selenium
To run Selenium scripts, we need to install browser drivers, language bindings and a test runner framework.
Step 1: Install Browser Drivers
Browser drivers (like ChromeDriver, GeckoDriver etc.) are executables that allow Selenium to automatically launch and control different browsers.
Latest browser driver versions are available at:
- ChromeDriver: https://chromedriver.chromium.org
- GeckoDriver (Firefox): https://github.com/mozilla/geckodriver
- EdgeDriver (Edge): https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Ensure you install the exact driver version matching your host machine‘s browser version for stability.
Step 2: Download Language Bindings
Selenium supports test scripting in Java, Python, C#, JavaScript etc. Download the appropriate language binding from official site.
For this guide, we will use Java – the most popular and stable Selenium binding.
Step 3: Set Up Test Runner Frameworks
To directly execute Selenium scripts, we need to integrate it with test runners like TestNG or JUnit using build tools like Maven.
For demonstration, our code examples will use the TestNG framework for structuring test cases along with Maven for build configuration.
This completes the Selenium setup! Now we are ready to start writing automated browser tests.
Chapter 3 – Writing Your First Selenium Script
We will apply a step-by-step approach to cover Selenium scripting basics:
Step 1: Create Test Class
Launch your IDE like Eclipse or IntelliJ and create a new Java Class. Provide a name like MyFirstTest:
public class MyFirstTest {
}
This will serve as the entry point for our test automation code.
Step 2: Import Selenium Packages
Import the required Java packages for Selenium bindings and TestNG integration:
import org.openqa.selenium.*;
import org.testng.annotations.*;
Step 3: Initialize WebDriver
Initialize the Selenium WebDriver instance which will automatically launch the desired browser during test:
WebDriver driver;
@BeforeTest
public void setup(){
System.setProperty("webdriver.chrome.driver",
"C:/tools/chromedriver.exe");
driver = new ChromeDriver();
}
Here WebDriver will launch the ChromeDriver matching local Chrome browser install.
Step 4: Navigate to Webpage
Use WebDriver to open the target web application under test:
@Test
public void testGooglePage() {
driver.get("https://google.com");
}
This will open the Chrome browser and load the Google page.
Step 5: Interact with Page
Now we can simulate user interactions like searching on the page:
WebElement searchBar = driver.findElement(By.name("q"));
searchBar.sendKeys("BrowserStack");
searchBar.submit();
This enters text "BrowserStack" in the search bar and presses Submit.
Step 6: Verify Output
Add test assertion to validate page title contains search text:
String pageTitle = driver.getTitle();
Assert.assertTrue(pageTitle.contains("BrowserStack"));
If page title check passes, test will pass else it fails.
Step 7: Close Browser
Once script execution completes, close the browser gracefully:
@AfterTest
public void close(){
driver.quit();
}
Our first Selenium test script is now ready!
The complete script flow will:
- Initialize ChromeDriver session
- Open Google webpage
- Enter keyword on page
- Validate page title
- Close browser
Let‘s execute the script next and view the output.
Chapter 4 – Executing Selenium Tests
To run the test script, first ensure you have:
- Installed Java 8+
- Added TestNG dependency in pom.xml
- Added Selenium Java binding .jars
- Downloaded ChromeDriver executable
Now right-click the script in Eclipse/IntelliJ and select Run As > TestNG Test.
This will execute the script, launching Chrome and performing search actions on Google, then closing the browser after assertion check.

The console output will show test status along with execution statistics:

This confirms successful first test run! 🎉
However, testing on local browsers has limitations in scale and compatibility.
Next, we will run cross-browser testing suites leveraging cloud emulators!
Chapter 5 – Cross Browser Testing on the Cloud
Manually testing your web app across Chrome, Firefox, Safari and IE can be time-consuming.
This where cloud platforms like BrowserStack come into the picture!
BrowserStack Overview
BrowserStack provides instant access 2000+ real mobile devices and browsers available on an online Selenium grid.
Top benefits are:
✔️ Local testing limitations eliminated
✔️ Support for niche browsers like Safari 14, IE 11
✔️ Mobile testing across 700+ device models
✔️ Debugging tools for interactive issue diagnosis
✔️ Parallel distributed testing to cut cycle times
To integrate Selenium scripts with BrowserStack:
Step 1: Sign Up for BrowserStack
Create a trial account on BrowserStack to access their Selenium cloud.
Step 2: Configure environment details
Add BrowserStack username and access key to tests:
String userName = "bsuser_abc";
String accessKey = "abcdef12werxyz34";
Step 3: Define browser capabilities
Create a DesiredCapabilities object with details around:
- Operating System
- Browser, Browser version
- Device name, platform etc.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("os", "Windows");
caps.setCapability("os_version", "10");
caps.setCapability("browser", "Firefox");
caps.setCapability("browser_version", "beta");
This selects the Windows 10 OS with Firefox Beta browser.
Step 4: Instantiate RemoteWebDriver
Pass server URL and capabilities to the RemoteWebDriver constructor:
WebDriver driver = new RemoteWebDriver(
new URL("https://" + userName + ":" + accessKey +
"@hub-cloud.browserstack.com/wd/hub"), caps);
On test run, BrowserStack will automatically spin up the desired browser environment!
Step 5: Run Test Suite
No other script changes needed! Running your test classes will now direct tests to execute on BrowserStack‘s cloud.
This allows scaling automated tests across 2000+ desktop and mobile browsers with just an initialization change!
Chapter 6 – Integrations with CI/CD Pipelines
While tests can be triggered manually, integrating Selenium with CI/CD pipelines enables:
✔️ Scheduled test runs
✔️ Testing every app change
✔️ Automatedpass/fail tracking
✔️ Enforcement of quality gates
Popular tools like Jenkins and GitHub Actions integrate smoothly with Selenium for browser testing.
Jenkins Integration
Key steps for running Selenium scripts on Jenkins:
- Install Jenkins using Docker or direct download
- Install Maven Integration and Selenium plugins
- Create Jenkins job for your app, add SCM integration
- Configure build steps to compile code, run Selenium tests
- View automated test reports post build
Jenkins makes it easy to execute regression suites across environments.
GitHub Actions Integration
To leverage GitHub Actions for test automation:
- Push application and tests to GitHub repository
- Create GitHub workflow yaml with Selenium setup commands
- Define test runner steps for different environments
- Check test reports and screenshots attached to workflow runs
- Set up badge reporting for pull requests
This facilitates testing every code change made!
Chapter 7 – Recommended Best Practices
Here some key best practices to adopt for Selenium test automation:
1. Unique Element Identification
Use unique IDs, class names, CSS selectors to precisely locate elements. Avoid brittle XPath locators.
2. External Test Data
Keep test data like input values in external JSON/XML files instead of hardcoding. Enables easy test maintenance.
3. Page Object Model
Follow this design pattern to abstract out page interactions into modular Page Object classes.
4. Parameterized Test Cases
Parameterize tests to pass different values using TestNG XML or data providers. Reduces code duplication.
5. Effective Exception Handling
Handle failures gracefully using try-catch blocks. Log relevant details for easy debugging.
6. Follow TDD Principles
Apply test-driven approach with positive and negative test cases defined upfront even before app is built. Reduces late-stage bugs.
Adopting industry best practices will ensure your test suites are scalable, resilient and maintainable long-term.
Chapter 8 – Troubleshooting Guide
Despite best efforts, sometimes our beloved Selenium scripts fail unexpectedly 🤯
So let‘s take a look some common exceptions that may arise and their associated solutions:
| Exception/Failure Scenario | Troubleshooting Tips |
| Element not found in the DOM | Use more unique locators. Check for overlapping elements hiding test element. Handling stale element references. |
| Test case timeout | Increase wait timeout duration. Check performance of pages/API responses. |
| Browser crashes unexpectedly | Install matching browser and driver versions. Update OS/hardware/browser settings if needed. |
| SSL certificate errors | Handle insecure certificates gracefully in capabilities object if needed. |
For additional assistance, leverage Selenium‘s active community support through StackOverflow and GitHub discussions.
The Road Ahead
Although Selenium leads the browser test automation space, here is an outlook on developments impacting its future:
Selenium 4 and BiDi
Selenium 4 with integrated WebDriver BiDi protocol enables faster test execution and reliable element finding. This is a positive update that keeps Selenium competitive.
Emergence of New Tools
Frameworks like Cypress and Playwright have fixed Selenium pain points around flaky tests and slow execution. However, Selenium still provides the most comprehensive browser support.
Evolution of Frontend Ecosystem
Single page applications (SPAs) with headless browser testing techniques pose challenges for traditional Selenium. Continued customization is required to keep pace with shifts like these.
First-Party Browser Automation
Native automation support in Chrome DevTools and Firefox Browser CLI means vendors have an increased stake in custom testing approaches tied to their browser instead of Selenium.
So while Selenium retains pole position currently, continued innovation is vital for it to maintain dominance as a general test automation solution as approaches continue to evolve.
Let‘s Get Testing!
This brings us to the end of our Selenium test automation journey.
We took a comprehensive look at:
✔️ Selenium components
✔️ Scripting basics
✔️ Cross-browser testing setup
✔️ Framework integrations
✔️ Troubleshooting tips
✔️ Testing best practices
You are now equipped to start test automation for your web apps with Selenium like a seasoned expert!
So try putting this guide into practice on your first real project. As you build up experience, don‘t forget to pay it forward by contributing back to Selenium open source community.
Happy test automation my friend! Let me know if any part of this guide needs more explanation.