Java 异常和丢弃未被捕获

Java 异常和丢弃未被捕获,java,selenium,phantomjs,Java,Selenium,Phantomjs,我正在运行Selenium测试,我不希望线程结束,因此我正在捕获所有可以捕获的内容。这是我的程序结构 My Main.java for (int i = 0; i < numberOfThreads; i++) { System.out.println("Inside loop to create threads!"); System.out.println("Number of threads to create: " + numberOfThreads); to

我正在运行Selenium测试,我不希望线程结束,因此我正在捕获所有可以捕获的内容。这是我的程序结构

My Main.java

for (int i = 0; i < numberOfThreads; i++)
{
    System.out.println("Inside loop to create threads!");
    System.out.println("Number of threads to create: " + numberOfThreads);
    totalNumberOfThreads++;
    String threadName = "Thread" + totalNumberOfThreads;
    if (type.contains("auto"))
    {
        newThread = new Thread(new Test());
    }

    UncaughtExceptionHandler handler = new UncaughtExceptionHandler()
    {
        @Override
        public void uncaughtException(Thread t, Throwable ex)
        {
            FileOutputStream fos = null;
            try
            {
                fos = new FileOutputStream(new File("throwable.txt"), true);
            }
            catch (FileNotFoundException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            PrintStream ps = new PrintStream(fos);
            ex.printStackTrace(ps);
        }
    };

    newThread.setName(threadName);
    newThread.setUncaughtExceptionHandler(handler);
    newThread.start();
}
即使我在Test.java中捕获异常和throwable,我仍然会不时在throwable.txt中看到以下异常,这意味着在Test.java中没有捕获错误

org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 02:56:46'
System info: host: 'localhost', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.1.5-x86_64-linode61', java.version: '1.8.0_60'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:589)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:618)
    at org.openqa.selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.java:464)
    at myprogram.Test.run(Test.java:155)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.openqa.selenium.WebDriverException: The PhantomJS/GhostDriver server has unexpectedly died!
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 02:56:46'
System info: host: 'localhost', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.1.5-x86_64-linode61', java.version: '1.8.0_60'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.phantomjs.PhantomJSCommandExecutor.execute(PhantomJSCommandExecutor.java:88)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:568)
    ... 4 more
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:30041 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:143)
    at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:89)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:134)
    at org.openqa.selenium.phantomjs.PhantomJSCommandExecutor.execute(PhantomJSCommandExecutor.java:82)
    ... 5 more
Caused by: java.net.ConnectException: Connection refused
    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:74)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134)
    ... 18 more

检查stacktrace,可以看到异常是由finally中的driver.quit()引发的。如果你想抓住这些,你必须用另一个try{}来包围对quit()的调用

at org.openqa.selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.java:464)
at myprogram.Test.run(Test.java:155)

您的finally仍然没有被try/catch包围

你需要像这样的东西:

  finally{
      try{
        driver.quit();
      }catch(Exception ex){
        //do something
      }
  }

你们在班级考试的第155行有什么内容
myprogram.Test.run(Test.java:155)
。。。是不是
driver.quit()
?driver.quit();在最后一个街区。现在我明白了。代码质量:测试代码和生产代码一样重要;因此,它应该和那本书一样仔细地写。从这个意义上说:读过罗伯特·马丁的《干净的代码》吗?@Jägermeister我会查他的书谢谢你的推荐
  finally{
      try{
        driver.quit();
      }catch(Exception ex){
        //do something
      }
  }