How can I run Selenium WebDriver on remote machine?

I want to run selenium webdriver on remote machine. Can anyone guide me upon that.

RemoteWebDriver is a class that implements the WebDriver interface on the remote server. The browser driver classes like FirefoxDriver, ChromeDriver, InternetExplorerDriver, etc. extend the Remote WebDriver class.

Selenium RemoteWebDriver class can be implemented under this package-

java.lang.Object
org.openqa.selenium.remote.RemoteWebDriver

These are the implemented interfaces for Selenium RemoteWebDriver-

HasCapabilities, HasInputDevices, Interactive, FindsByClassName, FindsByCssSelector, FindsById, FindsByLinkText, FindsByName, FindsByTagName, FindsByXPath, JavascriptExecutor, SearchContext, TakesScreenshot, WebDriver

These are the known subclasses for Selenium RemoteWebDriver-

ChromeDriver, EdgeDriver, FirefoxDriver, InternetExplorerDriver, OperaDriver, SafariDriver

The primary function of Selenium RemoteWebDriver is to act as an interface to execute tests on a remote machine or in a distributed environment. And that is also the most significant difference between Selenium RemoteWebDriver and Selenium WebDriver.

To run the tests remotely, you can use the Selenium Grid RemoteWebDriver. A Selenium Grid cloud can execute browser tests in multiple machines with different operating systems and browsers. The advantage of using a Selenium grid is that it allows you to run these tests in parallel across numerous environments.

There are two primary components of the Selenium Grid, namely-

  1. Hub
  2. Node

Hub acts as the server, and a Node is a remote machine in which the tests are run in multiple operating systems and browsers. The browser type and the platform in which the tests have to be executed in a remote machine must be defined in the DesiredCapabilities.

You can follow these steps for setting up the Selenium Grid-

Step 1: Download the Selenium standalone jar from the official website of Selenium.

Step 2: Now, we have to define the Hub and the Node for executing our tests. To define a Hub, open command prompt (cmd.exe) and navigate to the folder where the Selenium standalone jar is placed. Type the following command-

java -jar selenium-server-standalone-3.141.59.jar -role hub

By default, the server would be launched in the port 4444, which can be modified by -port followed by the port number.

Once the hub has been launched successfully, you should see the message as displayed in the image below.

Step 3: Once the hub is launched, we have to set up the Node in another system to run our tests. To configure the Node , open the command prompt, navigate to the Selenium standalone jar path, and type the following command-

Java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://localhost:4444/grid/register -port 1414

You’ll be needed to specify the port number for the node by using -port parameter followed by the port number (1414 in this case).

Once the Node is launched, you should be able to see a message like the one in the image below.

Step 4: To verify the successful configuration, open localhost:4444/grid/console in the browser, which shows details about the configured Node and Hub .

Several nodes can be configured like above, and the tests can be run.

Step 5: After configuring the Hub and the Node, we can run our tests through the automation script.

I’m sharing a sample code to test the login functionality of a website. I have implemented Selenium Grid RemoteWebDriver instance in this code-

package Demo;
import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test;

public class GridDemo {
	
  @Test
    public void login() throws MalformedURLException{
        DesiredCapabilities dr = DesiredCapabilities.firefox();
//specify the browser
        dr.setBrowserName("firefox");  
//specify the environment                
        dr.setPlatform(Platform.WINDOWS);     
     
  //specify the hub URL           
        RemoteWebDriver driver=new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), dr);
        driver.navigate().to("https://opensource-demo.orangehrmlive.com/");
        driver.findElement(By.id("txtUsername")).sendKeys("Admin");
        driver.findElement(By.id("txtPassword")).sendKeys("admin123");
        driver.close();

}
}

TestNG.xml-

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="PDF Handling">
  <test name="Verify Pdf content">
      <classes>
      <class name="Demo.GridDemo"/>
      </classes>
  </test> 
 </suite>

The above code will run in the remote machine that has been configured, and by configuring nodes with different browsers or operating systems, the test can be run in parallel. For maximum results, I would recommend using a cloud-based Selenium Grid like LambdaTest.