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).