selenium grid,以编程方式创建节点

时间:2012-11-21 16:32:11

标签: selenium grid registration nodes

我必须创建一个java应用程序,它将启动一个节点并将其连接到集线器。到目前为止,当集线器和节点在同一台计算机上时,我已经能够这样做了,但是当我尝试在另一台机器集线器上连接时,注册过程就会永远挂起。

我尝试了不同的方法。只需在代码中调用我的bat文件函数。

String command = "java -jar selenium-server-standalone-2.26.0.jar -role node -hub http://192.168.0.11:4444/grid/register -port 4449 -Dwebdriver.chrome.driver=data\\driver\\chromedriver.exe -Dwebdriver.ie.driver=data\\driver\\IEDriverServer.exe -nodeConfig data\\configurations.json";

    try
    {
        pr = Runtime.getRuntime().exec(command);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

从bat文件调用时,该命令有效,但在代码中,只有在节点和集线器位于同一台计算机上时才能正常工作。

我也试过使用RegistrationRequest。

RegistrationRequest req = new RegistrationRequest();
                req.setRole(GridRole.NODE);

                Map<String, Object> nodeConfiguration = new HashMap<String,
                Object>();

                nodeConfiguration.put(RegistrationRequest.AUTO_REGISTER, true);
                nodeConfiguration.put(RegistrationRequest.HUB_HOST, "192.168.100.66");

                nodeConfiguration.put(RegistrationRequest.HUB_PORT, 4444);
                nodeConfiguration.put(RegistrationRequest.PORT, 5555);

                URL remoteURL = new URL("http://" + "192.168.100.66" + ":" + 5555);
                nodeConfiguration.put(RegistrationRequest.PROXY_CLASS, "org.openqa.grid.selenium.proxy.DefaultRemoteProxy");
                nodeConfiguration.put(RegistrationRequest.MAX_SESSION, 1);
                nodeConfiguration.put(RegistrationRequest.CLEAN_UP_CYCLE, 2000);
                nodeConfiguration.put(RegistrationRequest.REMOTE_HOST, remoteURL);
                nodeConfiguration.put(RegistrationRequest.MAX_INSTANCES, 1);

                req.setConfiguration(nodeConfiguration);

                remote = new SelfRegisteringRemote(req);
                remote.startRemoteServer();
                remote.startRegistrationProcess();

同样的结果,当我尝试在另一台计算机集线器上运行时,它会进行注册过程。 信息 - 将节点注册到集线器:http://192.168.100.66:4444 / grid / register

任何想法为什么?或者怎么做。

2 个答案:

答案 0 :(得分:0)

好。不确定是否适合您,但我想分享我在项目中使用的方法。 我有远程机器,运行192.168.4.52 IP和selenium stanadlone服务器。 我在当地获得的所有硒测试套件。 因此,要在远程计算机上运行我的selenium测试套件,我只需在本地计算机上的BaseSeleniumTest.java中使用这些设置:

....
@BeforeClass
    public static void firefoxSetUp() throws MalformedURLException {

          DesiredCapabilities capability = DesiredCapabilities.firefox();


        driver = new RemoteWebDriver(new URL("http://192.168.4.52:4444/wd/hub"), capability);

        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        driver.manage().window().setSize(new Dimension(1920, 1080));
    }
    @Before
    public void homePageRefresh() throws IOException {

        driver.manage().deleteAllCookies();
        driver.get(propertyKeysLoader("login.base.url"));
    }


    @AfterClass
    public static void closeFirefox(){
        driver.quit();
    }

其中string

driver = new RemoteWebDriver(new URL("http://192.168.4.52:4444/wd/hub"), capability);

表示我想要运行我的硒测试的机器的IP。 我使用此命令在远程计算机上启动服务器: 我运行测试套件之前在cmd中java -jar selenium-server-standalone-2.26.0.jar。 希望它对你有所帮助。

答案 1 :(得分:0)

我弄清楚了我的问题,修复起来非常简单。在我的代码中我有

URL remoteURL = new URL("http://" + "192.168.100.66" + ":" + 5555);

我只需要用我的本地IP地址替换ip地址,而不是集线器ip地址,并且它有效。这是奇怪的原因我很确定我从网上的某个地方获取了这个代码并且他有一个ip的变量,而且它对于remoteURL和HUB_HOST是相同的