簡體   English   中英

以編程方式執行Selenium-rc時是否可以關閉流?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM