Java反射方法获取带注释的字段作为SelenideElement

标签 java reflection cucumber bdd selenide

我使用 Cucumber 和 Selenide 进行 UI 测试,我有这些方法

public static void initPage(String pageName) throws Exception {
    Set<Class<?>> annotated = new Reflections(PAGES_PACKAGE).getTypesAnnotatedWith(PageTitle.class);

    for (Class classToInit : annotated) {
        PageTitle annotation = (PageTitle) classToInit.getAnnotation(PageTitle.class);
        if (annotation.name().equals(pageName)) {
            classToInit.newInstance();
            lastInitialized = substringAfter(classToInit.toString(), "class ");
            lastInitClass = classToInit;
            return;
        }
    }

    throw new AutotestError("Could not find page to init: " + pageName);
}

public static SelenideElement findElementByTitle(String elementName) throws IllegalAccessException, InstantiationException {
    Set<Field> annotated = new Reflections(lastInitialized, new FieldAnnotationsScanner()).getFieldsAnnotatedWith(ElementTitle.class);

    for (Field field : annotated) {
        ElementTitle annotation = field.getAnnotation(ElementTitle.class);
        if (annotation.name().equals(elementName)) {
            field.setAccessible(true);
            SelenideElement el = (SelenideElement) field
            return el;
        }
    }
    throw new AutotestError("Element not found: " + elementName);
}

我对反射非常陌生,正在尝试利用 org.reflections.Reflections 库构建页面对象模式来搜索各种页面对象类中的带注释的字段。然而,我在从第二种方法中获取的字段返回 SelenideElement 时遇到问题(SelenideElement el = ... 行目前显然是错误的)。如何获取可在测试中用作 SelenideElement (带有 @ElementTitle 和 @FindBy 注释)的字段?提前致谢。

最佳答案

你应该换线
SelenideElement el = (SelenideElement) 字段

SelenideElement el = ((SelenideElement) field.get(pageObject))

说明

根据 Field.get 的文档:
返回指定对象上此 Field 表示的字段的值。如果该值具有基本类型,则该值会自动包装在对象中。

关于Java反射方法获取带注释的字段作为SelenideElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48282645/

相关文章:

Java类变量个数

c# - 方法工厂——案例与反射(reflection)

c# - 如何在不使用反射的情况下访问一系列类的公共(public)属性

javascript - 使用 Cucumber + capybara + selenium 测试 Rails 应用程序会导致空白页

java - 如何将 FirefoxDriver 的新实例传递给每个新线程?

java - 出现以下警告如何解决?

java - 如何在 Java 中轻松更改 XML 文档的文档类型?

c# - 如何调用 Activator.CreateInstance,将方法作为构造函数参数传递?

java - API测试。如何管理Payload

ruby-on-rails - 如何从spork过渡到spring?