java – 在Selenium HtmlUnitDriver程序中捕获的SocketException

前端之家收集整理的这篇文章主要介绍了java – 在Selenium HtmlUnitDriver程序中捕获的SocketException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我写了一个小脚本,它接受我们公司收到的Epson打印机的默认IP地址,并根据要求自动更改.这是使用Selenium HtmlUnitDriver完成的.

脚本获取页面,插入新IP,然后提交它.因为一旦我们第二次提交IP就会更改,页面不再是192.168.192.168,并且脚本不想完成.

以下是脚本:

  1. import org.openqa.selenium.By;
  2. import org.openqa.selenium.WebDriver;
  3. import org.openqa.selenium.WebElement;
  4. import org.openqa.selenium.htmlunit.HtmlUnitDriver;
  5. public class Main {
  6. public static void main(String[] args) {
  7. // Creating a new instance of the HTML unit driver.
  8. WebDriver driver = new HtmlUnitDriver();
  9. driver.get("http://192.168.192.168/ctcpip.htm");
  10. // Find and change the IP Address field.
  11. WebElement element = driver.findElement(By.name("IpAddress"));
  12. element.clear();
  13. element.sendKeys("192.168.192.169");
  14. element.submit();
  15. // Reset the printer. This changes it's IP as well,causing the initial driver page to no longer exist.
  16. WebElement reset = driver.findElement(By.name("Submit"));
  17. reset.submit();
  18. // The script never gets this far.
  19. driver.quit();
  20. }
  21. }

脚本在完成之前会超时.单击reset元素时,http://192.168.192.168/ctcpip.htm的初始URL实际上不存在,因为我们已将其更改为192.169.192.169.这是预期的行为,也是整个计划的重点.

控制台显示

  1. Nov 03,2016 10:36:52 AM org.apache.http.impl.execchain.RetryExec execute
  2. INFO: I/O exception (java.net.SocketException) caught when processing request to {}->http://192.168.192.168:80: Operation timed out
  3. Nov 03,2016 10:36:52 AM org.apache.http.impl.execchain.RetryExec execute
  4. INFO: Retrying request to {}->http://192.168.192.168:80
  5. Exception in thread "main" java.lang.RuntimeException: org.apache.http.conn.HttpHostConnectException: Connect to 192.168.192.168:80 [/192.168.192.168] Failed: Operation timed out
  6. at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:739)
  7. at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.processPostponedActions(JavaScriptEngine.java:820)
  8. at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1325)
  9. at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1268)
  10. at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1216)
  11. at org.openqa.selenium.htmlunit.HtmlUnitWebElement.submit(HtmlUnitWebElement.java:175)
  12. at Main.main(Main.java:19)
  13. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  14. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  15. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  16. at java.lang.reflect.Method.invoke(Method.java:498)
  17. at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
  18. Caused by: org.apache.http.conn.HttpHostConnectException: Connect to 192.168.192.168:80 [/192.168.192.168] Failed: Operation timed out
  19. at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:140)
  20. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318)
  21. at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)
  22. at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)
  23. at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
  24. at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
  25. at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
  26. at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
  27. at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
  28. at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:178)
  29. at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1313)
  30. at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1230)
  31. at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:338)
  32. at com.gargoylesoftware.htmlunit.WaitingRefreshHandler.handleRefresh(WaitingRefreshHandler.java:92)
  33. at com.gargoylesoftware.htmlunit.html.HtmlPage.executeRefreshIfNeeded(HtmlPage.java:1446)
  34. at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:306)
  35. at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:475)
  36. at com.gargoylesoftware.htmlunit.WebClient.loadDownloadedResponses(WebClient.java:2074)
  37. at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:733)
  38. ... 11 more
  39. Caused by: java.net.ConnectException: Operation timed out
  40. at java.net.PlainSocketImpl.socketConnect(Native Method)
  41. at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
  42. at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
  43. at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
  44. at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
  45. at java.net.Socket.connect(Socket.java:589)
  46. at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:72)
  47. at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:123)
  48. ... 29 more
  49. Process finished with exit code 1

如何告诉我的驱动程序实例页面已经更改,以便进程可以正常退出

脚本需要到达driver.quit();线.

最佳答案
你试过电话吗?

  1. driver.quit();

之前

  1. reset.submit();

?您不再使用驱动程序来检索任何元素,因此您可以在提交页面之前退出.

我希望它有所帮助.

猜你在找的Java相关文章