繁体   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