RemoteWebDriver usage 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.remote.RemoteWebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.net.URL; import java.time.Duration; public class RemoteWebDriverLoginTest { public static void main(String[] args) { WebDriver driver = null; try { // Set desired capabilities for browser (Chrome example) DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setBrowserName("chrome"); // Connect to Selenium Grid hub driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capabilities); // Navigate to login page driver.get("https://example.com/login"); // Enter username WebElement usernameInput = driver.findElement(By.id("username")); usernameInput.sendKeys("testuser"); // Enter password WebElement passwordInput = driver.findElement(By.id("password")); passwordInput.sendKeys("Test@123"); // Click login button WebElement loginButton = driver.findElement(By.id("loginBtn")); loginButton.click(); // Wait for URL to change to dashboard WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.urlToBe("https://example.com/dashboard")); // Verify welcome message WebElement welcomeMessage = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("welcomeMessage"))); String messageText = welcomeMessage.getText(); if ("Welcome, testuser!".equals(messageText)) { System.out.println("Test Passed: Welcome message is correct."); } else { System.out.println("Test Failed: Welcome message is incorrect."); } } catch (Exception e) { System.out.println("Test Failed due to exception: " + e.getMessage()); } finally { if (driver != null) { driver.quit(); } } } }
This test script uses RemoteWebDriver to connect to a Selenium Grid hub running at http://localhost:4444/wd/hub. We set the desired browser capabilities to Chrome.
The script navigates to the login page, enters the username and password using By.id locators, and clicks the login button.
We use an explicit wait (WebDriverWait) to wait until the URL changes to the dashboard page, ensuring the login was successful.
Then, we wait for the welcome message element to be visible and verify its text matches the expected greeting.
The test prints a pass or fail message based on the assertion and always closes the browser session in the finally block to clean up resources.
Now add data-driven testing with 3 different username and password combinations to verify login functionality.
Practice
RemoteWebDriver in Selenium?Solution
Step 1: Understand RemoteWebDriver's role
RemoteWebDriver allows running tests on browsers that are not on the local machine but on remote servers or machines.Step 2: Compare options
Options A, C, and D do not describe remote execution. Only To run browser tests on remote machines or servers correctly states the purpose.Final Answer:
To run browser tests on remote machines or servers -> Option AQuick Check:
RemoteWebDriver = remote test execution [OK]
- Thinking RemoteWebDriver runs tests locally
- Confusing RemoteWebDriver with headless testing
- Assuming RemoteWebDriver speeds up local tests
RemoteWebDriver instance in Java?Solution
Step 1: Check RemoteWebDriver constructor parameters
The constructor requires a URL object for the remote server and browser options as parameters.Step 2: Validate each option
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), new ChromeOptions()); correctly uses new URL(...) and new ChromeOptions() in the right order. RemoteWebDriver driver = new RemoteWebDriver("http://localhost:4444/wd/hub", new ChromeOptions()); passes a String instead of URL. RemoteWebDriver driver = new RemoteWebDriver(new ChromeOptions(), new URL("http://localhost:4444/wd/hub")); reverses parameters. RemoteWebDriver driver = new RemoteWebDriver(); uses no parameters, which is invalid.Final Answer:
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), new ChromeOptions()); -> Option DQuick Check:
Constructor needs URL then Options [OK]
- Passing String instead of URL object
- Swapping parameters order
- Using default constructor without parameters
URL url = new URL("http://localhost:4444/wd/hub");
ChromeOptions options = new ChromeOptions();
RemoteWebDriver driver = new RemoteWebDriver(url, options);
driver.get("https://example.com");
System.out.println(driver.getTitle());
driver.quit();Solution
Step 1: Analyze RemoteWebDriver usage
The code creates a RemoteWebDriver with a valid URL and ChromeOptions, then navigates to a website and prints the title.Step 2: Understand execution flow
The driver runs on the remote server at the URL, opens Chrome, loads the page, prints the title, and quits cleanly. No errors expected.Final Answer:
It opens Chrome on the remote server, navigates to example.com, prints the page title, then closes the browser -> Option BQuick Check:
RemoteWebDriver runs remote browser and prints title [OK]
- Assuming it runs locally
- Expecting compile or runtime errors
- Thinking getTitle() is unsupported
RemoteWebDriver driver = new RemoteWebDriver("http://localhost:4444/wd/hub", new FirefoxOptions());
driver.get("https://example.com");Solution
Step 1: Check constructor parameter types
RemoteWebDriver constructor expects a URL object, not a String. Passing a String causes a compile-time error.Step 2: Verify other options
FirefoxOptions is valid for RemoteWebDriver. driver.get() is valid. RemoteWebDriver can be instantiated directly.Final Answer:
The URL parameter should be a java.net.URL object, not a String -> Option AQuick Check:
Constructor needs URL object, not String [OK]
- Passing String instead of URL object
- Thinking FirefoxOptions is invalid
- Believing driver.get() is unsupported
http://grid.example.com:4444/wd/hub. Which code snippet correctly creates two RemoteWebDriver instances for this purpose?Solution
Step 1: Confirm correct constructor usage for both drivers
Each RemoteWebDriver must be created with a java.net.URL object and the corresponding browser options (ChromeOptions or FirefoxOptions).Step 2: Evaluate each option
RemoteWebDriver chromeDriver = new RemoteWebDriver(new URL("http://grid.example.com:4444/wd/hub"), new ChromeOptions()); RemoteWebDriver firefoxDriver = new RemoteWebDriver(new URL("http://grid.example.com:4444/wd/hub"), new FirefoxOptions()); correctly uses new URL(...) and proper options for both drivers. RemoteWebDriver chromeDriver = new RemoteWebDriver("http://grid.example.com:4444/wd/hub", new ChromeOptions()); RemoteWebDriver firefoxDriver = new RemoteWebDriver("http://grid.example.com:4444/wd/hub", new FirefoxOptions()); passes String instead of URL. RemoteWebDriver chromeDriver = new RemoteWebDriver(new ChromeOptions(), new URL("http://grid.example.com:4444/wd/hub")); RemoteWebDriver firefoxDriver = new RemoteWebDriver(new FirefoxOptions(), new URL("http://grid.example.com:4444/wd/hub")); swaps parameters. RemoteWebDriver chromeDriver = new RemoteWebDriver(); RemoteWebDriver firefoxDriver = new RemoteWebDriver(); uses no parameters, which is invalid.Final Answer:
RemoteWebDriver chromeDriver = new RemoteWebDriver(new URL("http://grid.example.com:4444/wd/hub"), new ChromeOptions()); RemoteWebDriver firefoxDriver = new RemoteWebDriver(new URL("http://grid.example.com:4444/wd/hub"), new FirefoxOptions()); -> Option CQuick Check:
Use URL object first, then browser options for each driver [OK]
- Passing String instead of URL
- Swapping constructor parameters
- Trying to instantiate without parameters
Ready to prove it?
Pass the test and this pattern moves unknown
