StoryReporterBuilder reporterBuilder = new StoryReporterBuilder()
.withCodeLocation(CodeLocations.codeLocationFromClass(EtsyDotComStories.class)).withFailureTrace(true)
.withFailureTraceCompression(true).withDefaultFormats().withFormats(formats)
.withCrossReference(crossReference);
Configuration configuration = new SeleniumConfiguration().useWebDriverProvider(driverProvider)
.useSeleniumContext(seleniumContext).useFailureStrategy(new RethrowingFailure())
.usePendingStepStrategy(pendingStepStrategy)
.useStoryControls(new StoryControls().doResetStateBeforeScenario(false))
.useStepMonitor(new SeleniumStepMonitor(contextView, seleniumContext, crossReference.getStepMonitor()))
.useStoryLoader(new LoadFromClasspath(EtsyDotComStories.class))
.useStoryReporterBuilder(reporterBuilder);
useConfiguration(configuration);
final ThreadCaching primordialCaching = new ThreadCaching();
MutablePicoContainer primordial = new PicoBuilder().withBehaviors(primordialCaching).build();
primordial.addComponent(WebDriverProvider.class, driverProvider);
// Groovy Steps - can be stateful per story.
final Storing store = (Storing) new Storing().wrap(new CompositeInjection(new ConstructorInjection(),
new SetterInjection("set", "setMetaClass")));
ClassLoader currentClassLoader = this.getClass().getClassLoader();
final DefaultClassLoadingPicoContainer pageObjects = new DefaultClassLoadingPicoContainer(currentClassLoader,
store, primordial);
pageObjects.change(Characteristics.USE_NAMES);
// This loads all the Groovy page objects - can be stateful
pageObjects.visit(new ClassName("pages.Home"), ".*\\.class", true,
new DefaultClassLoadingPicoContainer.ClassVisitor() {
public void classFound(@SuppressWarnings("rawtypes") Class clazz) {
pageObjects.addComponent(clazz);
}
});
ClassLoadingPicoContainer steps = pageObjects.makeChildContainer("steps");
steps.addComponent(new CacheFlusher(store));
steps.addComponent(new ClassName("HousekeepingSteps"));
steps.addComponent(new ClassName("EtsyDotComSteps"));
// Before And After Steps registered by instance
steps.addComponent(new PerStoryWebDriverSteps(driverProvider));
steps.addComponent(new WebDriverScreenshotOnFailure(driverProvider, configuration.storyReporterBuilder()));
// steps.addComponent(new WebDriverPageDumpOnFailure(driverProvider,
// configuration.storyReporterBuilder()));
steps.addComponent(new PerStoriesContextView(contextView));
useStepsFactory(new PicoStepsFactory(configuration, steps));