Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 网格无法连接到节点_Selenium_Selenium Webdriver_Selenium Grid - Fatal编程技术网

Selenium 网格无法连接到节点

Selenium 网格无法连接到节点,selenium,selenium-webdriver,selenium-grid,Selenium,Selenium Webdriver,Selenium Grid,当我运行selenium代码时,我遇到了以下错误。有人能帮我解决这个问题吗: Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 129.633 sec <<< FAILURE! GoogleTest(gridtest.GridTest) Time elapsed: 128.291 sec <<< FAILURE! org.openqa.selenium.remote.Unreac

当我运行selenium代码时,我遇到了以下错误。有人能帮我解决这个问题吗:

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 129.633 sec <<< FAILURE!
GoogleTest(gridtest.GridTest)  Time elapsed: 128.291 sec  <<< FAILURE!
org.openqa.selenium.remote.UnreachableBrowserException: **Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.**
Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T15:28:36.4Z'
System info: host: 'XXXXXX', ip: 'XXXXXX', os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.32-696.23.1.el6.x86_64', java.version: '1.8.0_77'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:607)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:217)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:140)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:153)
    at gridtest.GridTest.GoogleTest(GridTest.java:48)
**Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to xxx.xxx.xxx.xxx:4444 [xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy, xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy] failed: Connection timed out**
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:157)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
    at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:138)
    at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:86)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:337)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:136)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:586)
    ... 38 more
Caused by: java.net.ConnectException: Connection timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
    ... 53 more
一旦节点启动,我可以在节点控制台中看到该节点已注册到网格。 在Jenkins Selenium Grid中,我还可以看到节点连接在注册的远程组件中

在Selenium网格配置中,我还使用chrome配置了上述端口,并在匹配配置的节点中启动了节点

下面是我的简单代码:

System.out.println("I am in test");

        DesiredCapabilities capabilities = DesiredCapabilities.firefox();

        // say you use the redhat5 label to indicate RHEL5 and the amd64 label to specify the architecture
        //capabilities.setCapability("jenkins.label","RHEL6");
        //capabilities.setCapability("jenkins.label","redhat5 && amd64");
        // Say you want a specific node to thread your request, just specify the node name (it must be running a selenium configuration though)
        //capabilities.setCapability("jenkins.nodeName","(master)");

        //capabilities.setPlatform(Platform.WINDOWS); 
        //System.setProperty("webdriver.chrome.driver", "Drivers"+File.separator+"chromedriver.exe");
        //System.setProperty("webdriver.chrome.driver", "C:\\chromedriver\\chromedriver.exe");


        System.out.println("I am after setting chromedriver path ");

        remoteWD = new RemoteWebDriver(new URL("http://xxx.xxx.xxx.xxx:4444/wd/hub"), capabilities); 
        //remoteWD = new ChromeDriver(); 

        System.out.println("I am after RMD");

        remoteWD.get("http://www.google.com"); 
        WebElement element = remoteWD.findElement(By.name("q"));
        element.sendKeys("Selenium WebDriver"); 
        element.submit();
        Thread.sleep(10000);
        System.out.println(remoteWD.getTitle());
        remoteWD.quit();

remoteWebDriver的超时问题默认为60秒

下面是它的正确设置(我的示例是C#,但在Java中应该是相同的:

var timeout = TimeSpan.FromHours(1);
var driver = new RemoteWebDriver(new Uri(node), new BrowserFactory().Create().ToCapabilities(), timeout);
我采用了本文中记录的完整解决方案:

我想,您的防火墙中的端口17946被阻止了。请检查是否允许前向转发。@Uday使用启动网格集线器和节点的命令更新问题,并且只使用最小的代码来重现问题,以便更快地解决问题analysis@Murthi,我希望安全工程团队在枢纽上开放港口与我们沟通ith Node。那么,这个端口仍然有可能被防火墙阻塞?需要向网络团队询问其他哪些方面?@Debanjan,正如我所说的,Hub是从Selenium插件运行的,所以对于Grid,我们不需要提供任何命令。对于Node,我也在上面提到过。我通过在sc中提供实际的Jenkins服务器名称来解决我的问题由于存在一些安全限制,他们不允许我指向“新URL(“)”。然后我用我的服务器名更改Jenkins URL,如“新URL(“Jenkins服务器名:4444/wd/hub”)”,然后它开始工作。在这里共享,因为这可能会帮助其他人。
var timeout = TimeSpan.FromHours(1);
var driver = new RemoteWebDriver(new Uri(node), new BrowserFactory().Create().ToCapabilities(), timeout);