Согласно https://github.com/appium/java-client/blob/master/docs/Page-objects.md мы сможем определить повторно используемый компонент, расширив класс
io.appium.java_client.pagefactory.Widget
В приведенной выше документации отмечалось, что локатор для переменной экземпляра представляетОбъект виджета может быть помещен над объявлением его
class page1{
...
@FindBy(id = "//xpath..")
private SthExtendsWidget widget1;
...
}
или непосредственно над ключевым словом class в файле, где определен виджет
@FindBy(id = "//xpath..")
class SthExtendsWidget {
...
private SthExtendsWidget widget1;
...
}
Согласно документу,Если мы можем найти виджет на всех страницах, используя один и тот же локатор, мы можем поместить его выше ключевого слова class , как указано выше, чтобы не повторять его каждый раз, когда он появляется на определенной странице. Проблема в том, что это невозможно по моему мнению. Я пытался использовать исходный код из https://github.com/grasshopper7/component/tree/master/component
После перемещения локатора для SOQuesWidget из SOHomePageObject в SOQuesWidget я заканчиваю со следующим исключением:
java.lang.ClassCastException: class java.lang.Class cannot be cast to class java.lang.reflect.Field (java.lang.Class and java.lang.reflect.Field are in module java.base of loader 'bootstrap')
Isэто ошибка или недоразумение фреймворка?