如果注释存在,我该如何做一些功能?

时间:2018-04-17 13:53:24

标签: java selenium selenium-webdriver reflection annotations

所以,问题是下一个: 我有一个负责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这个扩展 - 不是。 我该怎么办?

2 个答案:

答案 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");
}