public void initializePageFragment(Object childObject, WebElement childRoot, Object parentObject) { if (!hasPropertyFor(Root.class, childObject)) { fail("No property annotated with @Root in class " + childObject.getClass()); } setInstanceOf(Root.class, childObject, childRoot); if (hasPropertyFor(Drone.class, childObject)) { WebDriver driver = getInstanceOf(Drone.class, parentObject, WebDriver.class); // FIXME when driver == null /* if (grapheneContext == null) { grapheneContext = GrapheneContext.getContextFor(ReflectionHelper.getQualifier(field.getAnnotations())); } grapheneContext.getWebDriver(xx.class) where xx is the class type of the field where annotation was placed on */ setInstanceOf(Drone.class, childObject, driver); } try { List<Field> fields = ReflectionHelper.getFieldsWithAnnotation(childObject.getClass(), FindBy.class); for (Field field : fields) { By by = FindByUtilities.getCorrectBy(field, How.ID_OR_NAME); // WebElement if (field.getType().isAssignableFrom(WebElement.class)) { WebElement element = childRoot.findElement(by); ReflectionUtil.setValue(field, childObject, element); // List<WebElement> } else if (field.getType().isAssignableFrom(List.class) && getListType(field) .isAssignableFrom(WebElement.class)) { List<WebElement> elements = childRoot.findElements(by); ReflectionUtil.setValue(field, childObject, elements); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } if (hasPropertyFor(Grafaces.class, childObject)) { setInstanceOf(Grafaces.class, childObject, this); } executeMethodsOfType(PostConstruct.class, childObject); }