![JAR search and dependency download from the Maven repository](/logo.png)
info.novatec.testit.webtester.junit5.extensions.pages.PageInitializerExtension Maven / Gradle / Ivy
package info.novatec.testit.webtester.junit5.extensions.pages;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.Extension;
import org.junit.jupiter.api.extension.ExtensionContext;
import lombok.extern.slf4j.Slf4j;
import info.novatec.testit.webtester.browser.Browser;
import info.novatec.testit.webtester.junit5.extensions.BaseExtension;
import info.novatec.testit.webtester.junit5.extensions.NoManagedBrowserException;
import info.novatec.testit.webtester.junit5.extensions.NoManagedBrowserForNameException;
import info.novatec.testit.webtester.junit5.extensions.browsers.Managed;
import info.novatec.testit.webtester.pages.Page;
/**
* This {@link Extension} initializes {@link Page} instances into fields annotated with {@link Initialized}. This is done
* before the first {@link BeforeEach} method is invoked.
*
* In case the test is declaring multiple {@link Managed} {@link Browser} instances each must have a unique name and the
* {@link Initialized#source()} property must be specified!
*
* Example:
*
* @EnableWebTesterExtensions
* public class FooTest {
*
* @Managed
* Browser browser;
*
* @Initialized
* FooPage page;
*
* }
*
* @EnableWebTesterExtensions
* public class BarTest {
*
* @Managed("b1")
* Browser browser1;
* @Managed("b2")
* Browser browser2;
*
* @Initialized(source="b2")
* BarPage page;
*
* }
*
*
* @see Initialized
* @since 2.1
*/
@Slf4j
public class PageInitializerExtension extends BaseExtension implements BeforeEachCallback {
@Override
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
public void beforeEach(ExtensionContext context) throws Exception {
executeHandlingUndeclaredThrowables(context, this::createPagesForAnnotatedFields);
}
private void createPagesForAnnotatedFields(ExtensionContext context) {
List pageFields = getModel(context).getPageFields();
if (pageFields.isEmpty()) {
log.debug("no pages to initialize");
return;
}
Map map = getModel(context).getNamedBrowserFields();
if (map.isEmpty()) {
throw new NoManagedBrowserException();
}
Object testInstance = context.getRequiredTestInstance();
pageFields.forEach(pageField -> {
String browserName = getBrowserName(pageField);
Field browserField = map.get(browserName);
if (browserField == null) {
throw new NoManagedBrowserForNameException(browserName);
}
Browser browser = getValue(browserField, testInstance);
Page page = createPage(pageField, browser);
setValue(pageField, testInstance, page);
log.debug("initialized field '{} {}' with new page instance from '{}' browser",
pageField.getType().getSimpleName(), pageField.getName(), browserName);
});
}
private String getBrowserName(Field pageField) {
return pageField.getAnnotation(Initialized.class).source();
}
@SuppressWarnings("unchecked")
private Page createPage(Field pageField, Browser browser) {
return browser.create(( Class extends Page> ) pageField.getType());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy