繁体   English   中英

Java try-catch没有捕获异常

[英]Java try-catch not catching exception

我有以下方法:

private void checkIfLoggedIn() {
  try{
    try {
      new WebDriverWait(driver, 10)
            .until(ExpectedConditions.visibilityOfElementLocated(
             By.cssSelector("a[href*='score']")));
    } 
    catch (WebDriverException e) {
    } 
    loggedInState = 2;
  }
  catch (TimeoutException e) {
    loggedInState = -1;
  }
}

简而言之,此方法的工作是等待网页完成加载已登录的页面,然后通过更改变量来告知其余代码。 该代码在绝大多数情况下都能正常运行,但是,如果驱动程序在完成之前关闭(由另一个线程关闭),则会崩溃。 我的代码停止功能非常好-如果网页已关闭,则很可能已经完成了任务(或由于其他原因而崩溃了)。 问题是错误日志(在下面发布)不会消失。 为了捕获任何可能的异常,我什至尝试了catch (Exception e)类的广泛操作,但是崩溃日志不会消失。 任何意见,将不胜感激!

编辑:感谢@jdigital,我发现代码实际上捕获异常,然而,是由硒屏蔽输出它自己的异常。 关于如何使硒停止输出错误的任何建议将不胜感激!

 Jan 27, 2014 6:48:29 PM org.openqa.selenium.support.ui.ExpectedConditions findElement
WARNING: WebDriverException thrown by findElement(By.selector: a[href*='score'])
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: '[Edited out for Privacy]', ip: '[Edited out for Privacy]', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_45'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:396)
    at org.openqa.selenium.By$ByCssSelector.findElement(By.java:432)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299)
    at org.openqa.selenium.support.ui.ExpectedConditions.findElement(ExpectedConditions.java:730)
    at org.openqa.selenium.support.ui.ExpectedConditions.access$0(ExpectedConditions.java:728)
    at org.openqa.selenium.support.ui.ExpectedConditions$4.apply(ExpectedConditions.java:130)
    at org.openqa.selenium.support.ui.ExpectedConditions$4.apply(ExpectedConditions.java:1)
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)
    at Web.WebCrawler.checkIfLoggedIn(WebCrawler.java:89)
    at Web.WebCrawler.access$0(WebCrawler.java:86)
    at Web.WebCrawler$1.run(WebCrawler.java:80)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:178)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:131)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
    at org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:319)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:298)
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:165)
    at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute(FirefoxDriver.java:366)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:527)
    ... 13 more

您应该能够设置Selenium的“日志记录首选项”以自定义异常输出。

编辑:也许在上面引用的链接上的说明不是太有用。 Selenium似乎使用标准的Java记录器接口。 掌握RemoteWebDriver对象,然后通过setLogLevel(java.util.logging.Level.OFF)关闭其日志记录。

另一种选择是, FirefoxDriver允许将stdout / stderr重定向到文件。 这样做的好处是可以根据需要检查输出。 否则,您可以覆盖或删除它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM