I am using selenium pagefactory, and have introduced an annotation @Name(Description = "Username"), which I use for all WebElements. I need to find the value for Description in my custom methods later on, for reporting, like:
public static void click(WebElement element) throws Throwable {
try {
element.click();
} catch(ElementNotInteractableException E1) {
throw new UnableToInteractWithElementException("Unable To Interact With " + WebElement Descriptionn);
}
}
My @Name annotation interface and pagefactory look like this:
Name Interface
@Target({ElementType.FIELD, ElementType.TYPE,ElementType.CONSTRUCTOR})
public @interface Name {
String Description() default "";
}
@Name(Description = "Username")
@FindBy(id="txtLoginID")
public WebElement username;
The problem I face while using reflections is the need to define classname of pagefactory , and also provide fieldname as string "username" , to retrieve the annotation value.
I wish to be able to retrieve the annotation value by only providing my WebElement and no other object to my click(WebElement element) method.
WebElementas an argument. You would have to pass the whole Page Object as well.public static void click(Class<? extends PageObject> poClass, WebElement element). Is this acceptable? - Fenio