你能检查一下java中是否加载了一个静态变量吗?

时间:2017-06-28 12:40:21

标签: java selenium selenium-webdriver static

我知道我们可以使用反射来检查类是否已加载。但是看起来虽然加载了类,但我看到的静态变量在我第一次访问它之前不会被加载。有问题的变量是WebDriver类中的TestDriver

所以,我的问题是我有一个测试详细信息界面,可以在执行测试之前输入一些测试细节。当我在此界面上按下开始测试时,WebDriver打开并执行测试。但是,当我不按开始测试按钮并关闭测试详细信息界面时,首先打开ChromeDriver然后关闭;这是不必要的。因此,如果有一种方法可以在调用driver.quit()之前检查驱动程序是否已初始化,我可以在driver.quit()初始化时调用它,如果不是,则可以调用。

如果您需要我澄清任何细节,请注意,我知道我不善于提问。

@Override
public void dispose(){
    try{
        Method m = ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[] {String.class});
        m.setAccessible(true);
        ClassLoader cl = ClassLoader.getSystemClassLoader();
        Object isclassloaded = m.invoke(cl, "testframework.TestDriver");
        //System.out.println(isclassloaded == null);
        if(isclassloaded != null){
            TestDriver.driver.quit();
        }
    } catch(Exception e){
        e.printStackTrace();
    }
    System.exit(0);
}

TestDriver.java

public class TestDriver {

    public static WebDriver driver = new ChromeDriver();

    ...
}

1 个答案:

答案 0 :(得分:0)

这不直接回答OP的问题(或者:答案是'不'),但提供了解决方法。

您可以添加一个惰性访问器函数来创建和存储driver实例:

private static WebDriver driver;

public static WebDriver driver() {
    if (driver == null) {
        driver = new ChromeDriver();
    }
    return driver;
}      

然后添加quit()方法:

public static void quit() {
    if (driver != null) driver.quit();
}

请注意,此代码不是线程安全的!