Перейти к содержимому

FibYar

Регистрация: 13 сен 2012
Offline Активность: 30 июл 2017 16:01
-----

Мои темы

PageFactory, DefaultFieldDecorator и CacheLookup

19 апреля 2017 - 14:20

Добрый день!

У меня возникла такая проблема. Я создал обёртку над шаблоном 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);

Надеюсь, что удалось объяснить, что я хочу :)