我知道我们可以使用反射来检查类是否已加载。但是看起来虽然加载了类,但我看到的静态变量在我第一次访问它之前不会被加载。有问题的变量是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();
...
}
答案 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();
}
请注意,此代码不是线程安全的!