Java Selenium Webdriver连接拒绝
我在我的硒webdriver上得到了太常见的连接拒绝错误。相同的代码在几周前执行。Java Selenium Webdriver连接拒绝
我一直在阅读圈子通过现有的职位,并尝试更新geckodriver和FireFox无济于事。我可以在运行相同版本的驱动程序,浏览器和库等的另一台计算机上运行相同的代码。我如何找到特定于此机器的原因?错误在下面。
调试1 调试2 调试3
异常在线程 “主” org.openqa.selenium.WebDriverException:org.apache.http.conn.HttpHostConnectException:连接到本地主机:28379 [本地主机/ 127.0。 0.1,localhost/0:0:0:0:0:0:0:1]失败:连接被拒绝:连接构建信息:版本:'unknown',修订:'unknown',时间:'unknown'系统信息:host :'LT9LTDRC2',ip:'10 .130.3.15',os.name:'Windows 10',os.arch:'amd64',os.version:'10 .0',java.version:'1.8.0_131'驱动程序信息: driver.version:Gecko_Driver at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:91)at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)at org.openqa .org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java: 137)在org.openqa.selenium.firefox.FirefoxDriver。(FirefoxDriver.java:191)at org.openqa.selenium.firefox.FirefoxDriver。(FirefoxDriver.java:108)at org.openqa.selenium.firefox.FirefoxDriver。( (Gecko_Driver.java:13)导致:org.apache.http.conn.HttpHostConnectException:连接到localhost:28379 [localhost/127.0.0.1,localhost/0:0: 0:0:0:0:0:1]失败:连接被拒绝:在org.apache.http.impl.conn处的org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159)处进行连接。 PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)at在org.apache.http.impl的org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)处提供org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)。在org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient。)上的org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)上的execchain.RetryExec.execute(RetryExec.java:89)在org.openqa上org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)处的org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) .selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:139)at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:87)at org.openqa.selenium.remote.ProtocolHandshake.createSession (ProtocolHandshake.java:343)at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:159)at org.openqa.selenium.remote.HttpCommandExecutor.execute (HttpCommandExecutor.java:142)at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)... 8更多原因:java.net.ConnectException:连接被拒绝:在java.net连接.dualStackPlainSocketImpl.waitForConnect(Native Method)at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)at java.net.AbstractPlainSocketImpl在java.net.PlainSocketImpl.connect(未知源)上的.connect(Unknown Source)在java.net.SocksSocketImpl.connect(未知源)在java.net.Socket.connect(未知源)在org.apache.http.conn .socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)... 23更多
即使下面的基本代码,我也会得到这个结果。
enter code here
package seleniumPrograms;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class Gecko_Driver {
public static void main(String[] args) {
System.out.println("Debug 1");
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
System.out.println("Debug 2");
capabilities.setCapability("marionette", true);
System.out.println("Debug 3");
WebDriver driver = new FirefoxDriver(capabilities);
System.out.println("Debug 4");
driver.get("http://www.google.com");
driver.manage().window().maximize();
driver.quit();
}
}
与铬的例子。
@Test
public void testGoogleSearch() throws InterruptedException {
// Optional, if not specified, WebDriver will search your path for chromedriver.
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com/xhtml");
Thread.sleep(5000); // Let the user actually see something!
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys("ChromeDriver");
searchBox.submit();
Thread.sleep(5000); // Let the user actually see something!
driver.quit();
}
故障跟踪:
org.openqa.selenium.WebDriverException:超时等待司机服务器开始。 构建信息:版本:'unknown',修订:'unknown',时间:'unknown' 系统信息:主机:'LT9LTDRC2',ip:'192.168.1.6',操作系统名称:'Windows 10',操作系统。 arch:'amd64',os.version:'10 .0',java.version:'1.8.0_131' 驱动程序信息:driver.version:Gecko_Driver at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService。的java:193) 在org.openqa.selenium.remote.service.DriverService.start(DriverService.java:181) 在org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78) 在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250) at org.openqa.se (ChromeDriver.java: 184) 在org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java:171) 在org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java:124) 在seleniumPrograms.Gecko_Driver.testGoogleSearch(Gecko_Driver。的java:16) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在java.lang.reflect中.Method.invoke(未知来源) at org.juni t.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod .invokeExplosive(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner。 java:290) at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58) at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner。 java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org。 eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse。 jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 引起人:org.openqa.selenium.net。UrlChecker $ TimeoutException:在org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:107) org.openqa.selenium.remote.service.DriverService处等待[http://localhost:31675/status] 20002 ms 后超时。 waitUntilAvailable(DriverService.java:190) ... 33更多 引起:com.google.common.util.concurrent.UncheckedTimeoutException:java.util.concurrent.TimeoutException at com.google.common.util.concurrent.SimpleTimeLimiter在java的java.util.concurrent.TimeoutException :.callWithTimeout(SimpleTimeLimiter.java:140) 在org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:80) ... 34更 引起。 util.concurrent.FutureTask.get(未知来源) 在com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:128) ...... 35多个
你可以做一对夫妇的调试输出? 即
System.out.println("Debug 1");
System.out.println("Debug 2");
System.out.println("Debug 3");
等...所以也许我们能看到应用程序崩溃?
这里是解决你的问题:
我没有看到任何错误这样在你的代码,但错误堆栈跟踪HttpHostConnectException
说明了一切。
执行以下步骤:
- 我看不出有什么必要使用
throws InterruptedException
,你可以考虑将其删除。 - 按照最佳做法,尽量让geckodriver保持在方便的位置。
C:\\your_directory
。 避免使用
Temp
的目录名称。-
虽然你已经接受
DesiredCapabilities
类的帮助,但在启动驱动程序实例时还没有通过它。你必须做:WebDriver driver = new FirefoxDriver(capabilities);
清除您的Mozilla Firefox浏览器的缓存。
- 从Windows任务管理器,手动杀了你可能需要运行CCleaner的保留了所有不必要的东西geckodriver.exe
- 的所有正在运行的实例。
- 重新启动你的机器。
- 执行您的测试。它应该运作良好。
在测试步骤结束时,请拨打
driver.quit()
以防止geckodriver实例悬空。-
这是你自己的工作代码块添加
System.setProperty
行:System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); System.out.println("Debug 1"); DesiredCapabilities capabilities=DesiredCapabilities.firefox(); System.out.println("Debug 2"); capabilities.setCapability("marionette", true); System.out.println("Debug 3"); WebDriver driver = new FirefoxDriver(capabilities); System.out.println("Debug 4"); driver.get("http://www.google.com"); driver.manage().window().maximize(); driver.quit();
让我知道如果这能帮助你。
谢谢Dev,但不幸的是,在完成所有建议的步骤后,我仍然得到相同的错误。 –
遗憾的是仍然没有改变。我在环境变量中设置了geckodriver,所以我根本不需要这个设置。 –
请在问题区域更新您的当前代码和错误堆栈跟踪,以便进一步分析。谢谢 – DebanjanB
我们的安全部门引入了阻止访问geckodriver.exe执行的策略。这是通过尝试从cmd运行来识别的。不知道为什么我没有在IDE中获得有意义的错误(被组策略阻止),我确实在chrome和IE中得到了这个错误。为了使用驱动程序,它需要保存在程序文件中,虽然这可能是特定于我的情况。如果你得到Geckodriver的这个错误,我会建议尝试从cmd执行它,看看是否有政策问题。
感谢您的快速响应。它在实例化FirefoxDriver() –
System.setProperty(“webdriver.gecko.driver”,“C:\\ Temp \\ Drivers and Libraries \\ geckodriver-v0.16.1-win64 \\ geckodriver.exe”)时失败。 \t System.out.println(“Debug 1”); \t DesiredCapabilities功能= DesiredCapabilities.firefox(); \t System.out.println(“Debug 2”); \t capabilities.setCapability(“marionette”,true); \t System.out.println(“Debug 3”); \t WebDriver driver = new FirefoxDriver(); System.out.println(“Debug 4”); \t driver.get(“http://www.google.com”); \t \t driver.manage()。window()。maximize(); –
调试4从不打印 –