Господа, прошу совета, можно ли реализовать такое на C#?
BasePage
Скрытый текст
public class BasePage { private final String BASE_URL = "http://myurl.ru"; protected Driver driver; [@FindBy(css = ".selector") public BaseElement myElement; protected BasePage(String url) { driver = Console.driver; driver.goToURL(BASE_URL + url); PageFactory.initElements(new FieldDecorator(driver), this); myElement.click(); } }
BaseElement
Скрытый текст
public class BaseElement { protected WebElement element; protected Driver driver; protected BaseElement(WebElement element) { this.element = element; driver = Console.driver; } /** custom methods */ }
FieldDecorator
Скрытый текст
public class FieldDecorator extends DefaultFieldDecorator { public FieldDecorator(SearchContext searchContext) { super(new DefaultElementLocatorFactory(searchContext)); } @Override public Object decorate(ClassLoader loader, Field field) { /** * somecode */ return super.decorate(loader, field); } @SuppressWarnings("unchecked") private Class<BaseElement> decoratableClass(Field field) { /** * somecode */ if (BaseElement.class.isAssignableFrom(decoratableClass)) { return (Class<BaseElement>) decoratableClass; } else { return null; } } protected BaseElement createElement(ClassLoader loader, ElementLocator locator, Class<BaseElement> decoratableClass) { /** * somecode */ WebElement proxy = proxyForLocator(loader, locator); return ElementWrapper.createInstance(decoratableClass, proxy); } @SuppressWarnings("unchecked") protected List<BaseElement> createList(ClassLoader loader, ElementLocator locator, Class<BaseElement> decoratableClass) { /** * somecode */ return elements; } }
ElementWrapper
Скрытый текст
public class ElementWrapper { public static BaseElement createInstance(Class<BaseElement> decoratableClass, WebElement element) { try { return decoratableClass.getConstructor(WebElement.class).newInstance(element); } catch (Exception e) { throw new AssertionError( "WebElement can't be represented as " + decoratableClass ); } } }
Или расскажите/дайте почитать, как инициализировать собственные элементы.
Или придётся реализовывать подобным образом?
И как вообще люди работают с .Net Selenium, если половина классов sealed?