Search in sources :

Example 1 with AbstractPage

use of org.keycloak.testsuite.page.AbstractPage in project keycloak by keycloak.

the class DroneUtils method replaceDefaultWebDriver.

/**
 * This static method can be used to change default {@ode WebDriver} to different one if the test is able to run
 * with only one {@code WebDriver}.
 *
 * {@code target} parameter is supposed be of type {@code AbstractKeycloakTest} or {@link AbstractPage}.
 *
 * @param target target class on which one needs to change {@code WebDriver}
 * @param driver the new {@code WebDriver}
 */
public static void replaceDefaultWebDriver(Object target, WebDriver driver) {
    DroneUtils.addWebDriver(driver);
    List<Field> allFields = new ArrayList<>();
    // Add all fields of this class and superclasses
    Class<?> targetClass = target.getClass();
    while (targetClass != null) {
        allFields.addAll(Arrays.asList(targetClass.getDeclaredFields()));
        allFields.addAll(Arrays.asList(targetClass.getFields()));
        targetClass = targetClass.getSuperclass();
    }
    for (Field f : allFields) {
        if (f.getAnnotation(Page.class) != null && AbstractPage.class.isAssignableFrom(f.getType())) {
            try {
                if (!f.isAccessible())
                    f.setAccessible(true);
                Object o = f.get(target);
                AbstractPage page = (AbstractPage) o;
                page.setDriver(driver);
                replaceDefaultWebDriver(page, driver);
            } catch (IllegalAccessException e) {
                throw new IllegalStateException("Could not replace the driver in " + f, e);
            }
        } else if (f.getName().equals("driver") && WebDriver.class.isAssignableFrom(f.getType())) {
            try {
                if (!f.isAccessible())
                    f.setAccessible(true);
                f.set(target, driver);
            } catch (IllegalAccessException e) {
                throw new IllegalStateException("Could not replace the " + f.getName() + " in class " + target.getClass().getName(), e);
            }
        } else if (f.getName().equals("oauth") && OAuthClient.class.isAssignableFrom(f.getType())) {
            try {
                if (!f.isAccessible())
                    f.setAccessible(true);
                Object o = f.get(target);
                ((OAuthClient) o).setDriver(driver);
            } catch (IllegalAccessException e) {
                throw new IllegalStateException("Could not replace the " + f.getName() + " in class " + target.getClass().getName(), e);
            }
        }
    }
    DroneUtils.removeWebDriver();
}
Also used : Field(java.lang.reflect.Field) AbstractPage(org.keycloak.testsuite.page.AbstractPage) ArrayList(java.util.ArrayList)

Aggregations

Field (java.lang.reflect.Field)1 ArrayList (java.util.ArrayList)1 AbstractPage (org.keycloak.testsuite.page.AbstractPage)1