Добрый день!
У меня возникла такая проблема. Я создал обёртку над шаблоном PageFactory с помощью DefaultFieldDecorator. Теперь использую свои аннотации и способы поиска элементов.
Но у меня возникла проблема с "ленивой инициализацией". Иногда мне бы хотелось закэшировать веб-элементы, свойства которых я получаю, но не знаю как. Аннотация @CacheLookup не работает после "расширения" PageFactory с помощью DefaultFieldDecorator. Да и хотелось бы не "всегда кэшировать отдельный элемент", а "на время включать кэширование, а затем (после получения нескольких свойств) отключать".
Кусок кода, где поиск происходит дважды:
webElement.clear(); webElement.click();
Переопределение делаю как-то так (сам понимаю с трудом, так как делал года три назад):
public class MyFieldDecorator extends DefaultFieldDecorator { public MyFieldDecorator(ElementLocatorFactory factory) { super(factory); }
public class MyElementLocator implements ElementLocator { private final SearchContext searchContext; private final By by;
public MyElementLocator(SearchContext searchContext, Field field) { this.searchContext = searchContext; MyAnnotations annotations = new MyAnnotations(field); by = annotations.buildFirstBy(); }
public final class MyElementLocatorFactory implements ElementLocatorFactory, SearchContext {
PageFactory.initElements(new MyFieldDecorator(new MyElementLocatorFactory(driver)), webPage);
Надеюсь, что удалось объяснить, что я хочу :)