Docker execution environment in Selenium Java - Build an Automation Script
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import java.net.URL; import java.time.Duration; public class DockerLoginTest { static WebDriver driver; static WebDriverWait wait; @BeforeAll public static void setup() throws Exception { // Connect to Selenium Docker container running at localhost:4444 ChromeOptions options = new ChromeOptions(); driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), options); wait = new WebDriverWait(driver, Duration.ofSeconds(10)); } @Test public void testLogin() { driver.get("https://example.com/login"); WebElement emailInput = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("email"))); emailInput.sendKeys("admin@test.com"); WebElement passwordInput = driver.findElement(By.id("password")); passwordInput.sendKeys("Pass123!"); WebElement loginButton = driver.findElement(By.id("loginBtn")); loginButton.click(); // Wait until URL changes to dashboard wait.until(ExpectedConditions.urlToBe("https://example.com/dashboard")); String currentUrl = driver.getCurrentUrl(); assertEquals("https://example.com/dashboard", currentUrl, "User should be on dashboard page after login"); } @AfterAll public static void teardown() { if (driver != null) { driver.quit(); } } }
This test connects to a Selenium Docker container running Chrome browser at http://localhost:4444/wd/hub. The @BeforeAll method sets up the remote WebDriver and explicit wait.
The test navigates to the login page URL, waits for the email input to be visible, then enters the email and password. It clicks the login button and waits explicitly until the URL changes to the dashboard URL.
Finally, it asserts that the current URL is exactly the dashboard URL, confirming successful login.
The @AfterAll method quits the driver to close the browser session.
Using explicit waits ensures the test does not fail due to timing issues. Using By.id locators makes element selection stable and fast. The test assumes the Docker container is started and stopped outside this code.
Now add data-driven testing with 3 different sets of login credentials (valid and invalid).
Practice
Solution
Step 1: Understand Docker's role in Selenium testing
Docker creates isolated containers that have clean browser setups, avoiding environment conflicts.Step 2: Compare options
Only It provides a clean, consistent browser environment for tests. correctly states Docker provides a clean, consistent browser environment. Other options describe unrelated or incorrect features.Final Answer:
It provides a clean, consistent browser environment for tests. -> Option AQuick Check:
Docker environment = clean browser setup [OK]
- Thinking Docker writes test scripts automatically
- Believing Docker removes need for assertions
- Assuming Docker only runs tests locally
Solution
Step 1: Identify the correct Selenium class for remote connections
RemoteWebDriver is designed to connect to browsers running on remote servers or containers like Docker.Step 2: Eliminate other options
ChromeDriver and FirefoxDriver are for local browsers. DockerClient is unrelated to Selenium.Final Answer:
RemoteWebDriver -> Option DQuick Check:
RemoteWebDriver connects to remote browsers [OK]
- Using ChromeDriver for Docker browsers
- Confusing DockerClient with Selenium classes
- Using FirefoxDriver for remote Docker sessions
URL url = new URL("http://localhost:4444/wd/hub");
ChromeOptions options = new ChromeOptions();
RemoteWebDriver driver = new RemoteWebDriver(url, options);
driver.get("https://example.com");
String title = driver.getTitle();
System.out.println(title);
What will be printed if the page title is "Example Domain"?Solution
Step 1: Understand the code flow
The code opens the URL "https://example.com" in a remote Chrome browser inside Docker and retrieves the page title.Step 2: Identify the output of getTitle()
The getTitle() method returns the page title, which is "Example Domain" for that URL.Final Answer:
Example Domain -> Option BQuick Check:
driver.getTitle() = "Example Domain" [OK]
- Printing the URL instead of the title
- Confusing options object with title
- Printing class names instead of values
Solution
Step 1: Analyze connection refused error
This error means the test code cannot reach the Selenium server at the given URL.Step 2: Identify common Docker causes
If the Docker container running Selenium Grid is stopped or not started, the connection will fail.Final Answer:
Docker container is not running or Selenium Grid is not started. -> Option CQuick Check:
Connection refused = server not running [OK]
- Blaming ChromeDriver usage for connection errors
- Ignoring container running status
- Assuming URL typos without verification
Solution
Step 1: Understand parallel test isolation needs
Parallel tests require isolated browser sessions to avoid state conflicts.Step 2: Evaluate Docker container usage
Starting multiple containers with separate Selenium nodes allows independent browser sessions for each test.Step 3: Eliminate unsafe options
Sharing RemoteWebDriver instances or running sequentially defeats parallelism. Using local ChromeDriver ignores Docker benefits.Final Answer:
Start multiple Docker containers each running a Selenium node and connect each test to a different container URL. -> Option AQuick Check:
Parallel tests need isolated containers [OK]
- Sharing RemoteWebDriver instance across threads
- Running tests sequentially to avoid conflicts
- Ignoring Docker and using local drivers
Ready to prove it?
Pass the test and this pattern moves unknown
