0

After upgrading to latest selenium, Selenium grid is giving an error for RegistrationRequest(). I am getting req.setRole(), req.setConfiguration(), etc. not found. look like RegistrationRequest() class got change in selenium new version but not sure how to use that class and modify my existing code. Any idea how to resolve this?

Here is my code,

package selenium;

import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.openqa.grid.common.GridRole;
import org.openqa.grid.common.RegistrationRequest;
import org.openqa.grid.internal.utils.configuration.GridHubConfiguration;
import org.openqa.grid.internal.utils.SelfRegisteringRemote;
import org.openqa.grid.web.Hub;
import org.openqa.selenium.remote.DesiredCapabilities;

public class SeleniumGrid {

    private static Hub hub;
    private static URL remoteURL;
    private static RegistrationRequest req = new RegistrationRequest();
    private Map<String, Object> nodeConfig = new HashMap<String, Object>();
    private static SelfRegisteringRemote remote = new SelfRegisteringRemote(req);

    SeleniumBase sb = new SeleniumBase();

    public void setup() throws Exception {

        hub = getHub("localhost", 4458);
        remoteURL = new URL("http://" + hub.getUrl() + ":" + 5555);

        // req = setRegRequest();
        req.setRole(GridRole.NODE);
        req.addDesiredCapability(sb.getCapability());

        List<DesiredCapabilities> dc = req.getCapabilities();

        for (DesiredCapabilities c : dc) {
            System.out.println("Using capabilities: " + c.toString());
        }

        // nodeConfig.put(req.AUTO_REGISTER, true);
        nodeConfig.put(req.HUB_HOST, hub.getHost());
        nodeConfig.put(req.HUB_PORT, hub.getPort());
        nodeConfig.put(req.PORT, 5555);

        // nodeConfig.put(RegistrationRequest.PROXY_CLASS, "org.openqa.grid.selenium.proxy.DefaultRemoteProxy");
        nodeConfig.put(req.MAX_SESSION, 1);
        // nodeConfig.put(RegistrationRequest.CLEAN_UP_CYCLE, 2000);
        nodeConfig.put(req.REMOTE_HOST, remoteURL);
        nodeConfig.put(req.MAX_INSTANCES, 1);

        nodeConfig.put(req.BROWSER, "firefox");
        nodeConfig.put(req.UNREGISTER_IF_STILL_DOWN_AFTER, 20000);

        nodeConfig.put(req.HOST, hub.getHost());

        System.out.println("Hub Port: " + hub.getHost() + hub.getPort());
        System.out.println(req.HOST);
        System.out.println(req.HUB_HOST);
        System.out.println(req.HUB_PORT);

        req.setConfiguration(nodeConfig);

        remote.startRemoteServer();

        remote.startRegistrationProcess();

    }

    public RegistrationRequest setRegRequest() {
        RegistrationRequest request = new RegistrationRequest();

        request.setRole(GridRole.NODE);
        request.addDesiredCapability(sb.getCapability());

        List<DesiredCapabilities> dc = request.getCapabilities();

        for (DesiredCapabilities c : dc) {
            System.out.println("Using capabilities: " + c.toString());
        }
        return request;

    }

    public Hub getHub(String host, int port) {
        GridHubConfiguration config = new GridHubConfiguration();
        config.setHost(host);
        config.setPort(port);
        Hub someHub = new Hub(config);

        return someHub;

    }

    public void tearDown() throws Exception {
        remote.stopRemoteServer();
        hub.stop();
    }
}
Krishnan Mahadevan
  • 14,121
  • 6
  • 34
  • 66
Umang
  • 11
  • 1
  • 1
  • 4

1 Answers1

1

Here's a full fledged working example that starts a hub, starts a node, wires up the node to the hub, runs a test against the locally spun off hub, and then goes on to shut down the node and then the hub.

import org.openqa.grid.common.GridRole;
import org.openqa.grid.internal.utils.SelfRegisteringRemote;
import org.openqa.grid.internal.utils.configuration.GridHubConfiguration;
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration;
import org.openqa.grid.selenium.proxy.DefaultRemoteProxy;
import org.openqa.grid.web.Hub;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.server.SeleniumServer;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;

public class SeleniumGrid {

    private Hub hub;
    private SelfRegisteringRemote remote;

    @BeforeClass
    public void setup() throws Exception {
        hub = getHub("localhost", 4458);
        hub.start();
        remote = new SelfRegisteringRemote(getNodeConfiguration());
        remote.addBrowser(DesiredCapabilities.firefox(), 2);
        SeleniumServer server = new SeleniumServer(remote.getConfiguration());
        remote.setRemoteServer(server);
        remote.startRemoteServer();
        remote.startRegistrationProcess();
    }

    @Test
    public void test() throws MalformedURLException {
        URL url = new URL(hub.getUrl() + "/wd/hub");

        RemoteWebDriver driver = new RemoteWebDriver(url, DesiredCapabilities.firefox());
        try {
            driver.get("http://www.google.com");
            System.err.println("Title " + driver.getTitle());
        } finally {
            driver.quit();
        }
    }

    @AfterClass
    public void tearDown() throws Exception {
        remote.stopRemoteServer();
        hub.stop();
    }

    private GridNodeConfiguration getNodeConfiguration() {
        GridNodeConfiguration nodeConfiguration = new GridNodeConfiguration();

        nodeConfiguration.register = true;
        nodeConfiguration.hub = String.format("http://%s:%d", hub.getConfiguration().host, hub.getConfiguration().port);
        nodeConfiguration.port = 5555;
        nodeConfiguration.proxy = DefaultRemoteProxy.class.getCanonicalName();
        nodeConfiguration.maxSession = 1;
        nodeConfiguration.cleanUpCycle = 2000;
        nodeConfiguration.unregisterIfStillDownAfter = 20000;
        nodeConfiguration.role = GridRole.NODE.toString();
        nodeConfiguration.port = 5555;
        nodeConfiguration.getHubHost();
        nodeConfiguration.hub = String.format("http://%s:%d", hub.getConfiguration().host, hub.getConfiguration().port);
        return nodeConfiguration;
    }

    private Hub getHub(String host, int port) {
        GridHubConfiguration config = new GridHubConfiguration();
        config.host = host;
        config.port = port;
        return new Hub(config);
    }
}
Krishnan Mahadevan
  • 14,121
  • 6
  • 34
  • 66
  • Tried the same approach but no luck..have posted new question here - https://stackoverflow.com/questions/68127728/selenium-grid-org-openqa-selenium-webdriverexception-error-forwarding-the-new . Would love to hear thoughts – RISHI KHANNA Jun 25 '21 at 10:28
  • Copied and tried same code as mentioned but still same error org.openqa.selenium.WebDriverException: Error forwarding the new session cannot find : Capabilities {browserName: chrome, platform: macOS 10.14 – RISHI KHANNA Jun 25 '21 at 10:35