我有这个代码
public static SelenideElement findElementByTitle(String elementName) throws IllegalAccessException {
Set<Field> annotated = new Reflections(lastInitialized, new FieldAnnotationsScanner()).getFieldsAnnotatedWith(ElementTitle.class);
for (Field field : annotated) {
ElementTitle annotation = field.getAnnotation(ElementTitle.class);
if (annotation.value().equals(elementName)) {
field.setAccessible(true);
SelenideElement el = (SelenideElement) field.get(page(lastInit));
return el;
}
}
throw new AutotestError("Element not found: " + elementName);
在我实际实现继承之前,它工作得很好,而且看来我的代码无法访问父类中带注释的字段。如果我设置了程序包访问权限,则由于模棱两可而导致异常(在不同的类中获得了几个相同的注释,例如“下一步”按钮)。
这是设置lastInitialized和lastInit字段的代码(PAGES_PACKAGE只是一个指向包含我所有页面对象类的包的字符串)
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.value().equals(pageName)) {
classToInit.newInstance();
lastInitialized = substringAfter(classToInit.toString(), "class ");
lastInit = classToInit;
return;
}
}
throw new AutotestError("Can't find page to init: " + pageName);
}
我想做的是,要有一个主页,其中包含网站上其他所有选项卡所具有的所有常规字段,并希望继承我网站的所有“选项卡”,同时能够以以下方式访问父字段:如果它们是我当前的页面。