[英]Is it possible to close a stream when performing Selenium-rc programmatically?
我正在嘗試使用Selenese以編程方式為Selenium-rc運行多個測試套件。 我分析了selenium-server-standalone-2.37.0.jar
的Java代碼,並確定我必須使用GridLauncher
類的main方法。 而且因為我想運行多個測試套件,所以我陷入了循環。
for (String[] arguments : argumentsList) {
GridLauncher.main(arguments);
}
我遇到的第一個問題是GridLauncher
使用System.exit()
關閉自身。 但這也會導致我的過程停止。 我解決此問題的方法是使System.exit()
引發異常。 我從Stackoverflow 這個問題中得到的想法。
private static class ExitTrappedException extends SecurityException {
static void forbidSystemExitCall() {
final SecurityManager securityManager = new SecurityManager() {
@Override
public void checkPermission( Permission permission ) {
if( "exitVM".equals( permission.getName() ) ) {
throw new ExitTrappedException() ;
}
}
@Override
public void checkExit(int status) {
throw new SecurityException();
}
} ;
System.setSecurityManager( securityManager ) ;
}
static void enableSystemExitCall() {
System.setSecurityManager( null ) ;
}
}
for (String[] arguments : argumentsList) {
ExitTrappedException.forbidSystemExitCall();
try {
GridLauncher.main(arguments);
} catch (SecurityException se) {
//catching System.exit()
} finally {
ExitTrappedException.enableSystemExitCall() ;
}
}
我現在遇到的問題是流沒有關閉,並且在循環嘗試執行Selenium測試時出現異常WARN - Failed to start: SocketListener1@0.0.0.0:4444
我試圖尋找關閉方法流,但找不到任何東西。 是否可以關閉它? 如果是這樣,怎么辦?
您可能想要嘗試對流進行垃圾收集並將其終結(因為此類傾向於使用finalize()方法來釋放資源)。 您基本上將在System.gc()
之后跟隨System.runFinalization()
。 有關詳細信息,請參見以下問題: 如何確保始終調用finalize()(Java練習中的思考)
在執行System.gc()
之前,您可能還需要擺脫一些線程。 有關如何列出線程,請參閱問題“ 獲取Java中當前正在運行的所有線程的列表”。 另一個問題討論了如何停止線程: 如何在Java中殺死線程? 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.