有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java trycatch未捕获异常

我有以下方法:

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;
  }
}

简单地说,这种方法的工作是等待网页加载完登录的pa 并通过更改一个变量来让代码的其余部分知道。这段代码在绝大多数情况下都能完美工作,但是如果驱动程序在完成之前(被另一个线程)关闭,它就会崩溃。我完全同意代码停止——如果网页已经关闭,它很可能已经完成了任务(或者因为其他原因崩溃)。问题是错误日志(发布在下面)不会消失。为了捕捉任何可能的异常,我甚至尝试了catch (Exception e)这样广泛的方法,但crashlog不会消失。任何建议都将不胜感激

编辑:多亏了@jdigital,我发现代码实际上捕捉到了异常,但这被Selenium输出自己的异常所掩盖。任何关于如何让selenium停止输出错误的建议都将不胜感激

 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

共 (1) 个答案

  1. # 1 楼答案

    您应该能够设置Selenium's Logging Preferences来定制异常输出

    编辑: 也许上述链接中的说明没有太大帮助。 看起来Selenium使用的是标准Java logger接口。获取RemoteWebDriver对象,然后通过^{关闭其日志记录

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