Я кратко пошел по этому пути, но из-за нашего приложения это было не совсем достижимо (страницы не всегда отображаются в одном и том же порядке после посещения страницы).
public class PageElement implements WebElementAdapter, Locatable {
private How how;
private String using;
private boolean required;
@FindBy(how = How.ID_OR_NAME, using = DEFAULT_LOCATION_STRATEGY)
private WebElement backingElement;
public PageElement(How how, String using using) {
this.how = how;
this.using = using;
this.required = true;
}
/**
* This is how the overriding of the element location is done. I then injected
* these values in a spring configured bean file.
*
* This is needed on your config file:
* default-lazy-init="true" default-init-method="initialize">
*/
public final void initElement() {
if (backingElement == null || isStale() {
backingElement = getDriver().findElement(getLocationStrategy());
}
}
public By getLocationStrategy() {
By by = new ByIdOrName(using.replace(DEFAULT_LOCATION_STRATEGY, using));
switch(how) {
case CLASS_NAME:
by = By.className(using.replace(DEFAULT_LOCATION_STRATEGY, using));
break;
//Do for others
}
return by;
}
public WebElement getBackingElement() {
return backingElement;
}
}
public interface WebElementAdapter {
WebElement getBackingElement();
}
public interface Locatable {
By getLocationStrategy();
}
Затем я создал общие виджеты в POJO и внедрил их в объекты страницы, которые были коллекцией этих виджетов.
Оттуда у меня был простой тестовый комплект, который отвечал за принятие строк (которые затем выполнялись.он позволял писать тестовые сценарии в SpEL и действовать на бинах, которые были введены.
Это было то, что я считал довольно аккуратным проектом, но мне пришлось отложить его, чтобы сделать некоторые другие вещи.