所以,问题是下一个: 我有一个负责WebDriver的类。每个WebDriver对象都是一个Singletone,所以我在很多测试中使用ThreadLocal来使用这个驱动程序。
private static final ThreadLocal<WebDriver> threadLocalScope = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
ConfigProperty configProperty = new ConfigProperty();
System.setProperty(configProperty.getChromeDriver(), configProperty.getUrl());
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File(configProperty.getChromeExtension()));
driver = new ChromeDriver(options);
driver.manage().window().maximize();
return driver;
}
};
public static WebDriver getDriver() {
return threadLocalScope.get();
}
正如您所看到的,当驱动程序启动它时会为Google Chrome安装一些扩展程序,但在每次测试中都不需要此扩展程序。
所以,我想创建一个类似@InstallExtension的Annotation,并在运行时看到这个。如果我的测试中存在注释,它将以其他方式安装WebDriver这个扩展 - 不是。 我该怎么办?
答案 0 :(得分:1)
让我详细说明一下我的意见: 一旦创建了注释,就像这样(假设注释的目标是一个方法,否则只需将目标更改为FIELD,...):
@Retention(RetentionPolicy.RUNTIME)
@Target({ METHOD})
public @interface InstallExtension{}
在你的代码中,你需要这样的东西:
if (yourClass.getMethod("name", null).isAnnotationPresent(InstallExtension.class)) {
...
}
答案 1 :(得分:0)
这是你想要的吗?
@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface AnAnnotation {
String value();
}
@BeforeMethod
public void testBeforeMethod(Method method) {
if (method.isAnnotationPresent(AnAnnotation.class))
System.out.println("Annotation is " + method.getAnnotationsByType(AnAnnotation.class)[0].value() );
System.out.println("Before Test");
}
@AnAnnotation("ExtensionName")
@Test
public void test1() {
System.out.println("Test 1 Test");
}