Hi Roy, When I checkout the project I get a NullPointerException at at org.google.web.common.MyWebDriverScreenshotOnFailure.saveScreenshotTo(MyWebDriverScreenshotOnFailure.java:81)
Is it the expected behaviour? 2013/2/20 Roy de Kleijn <[email protected]> > Sure,**** > > ** ** > > I can’t put the actual code online, because it’s confidential. But I made > a small project with exactly the same components and dependencies.**** > > ** ** > > https://github.com/roydekleijn/Spring-Jbehave-WebDriver-Example **** > > ** ** > > You can actually execute the code if you establish a Selenium grid on your > localhost. You can then execute the following Maven command: mvn > integration-test -Dgroup=google**** > > It contains failing tests (on purpose), because on failure a screenshot > should be made and included in the report.**** > > ** ** > > This is what I like to achieve:**** > > **- **I like to run my tests in multiple threads (this already > works)**** > > **- **I like to have reports including screenshots of the > failing tests. (this doesn’t work yet)**** > > ** ** > > Any help is much appreciated! **** > > ** ** > > Best regards,**** > > Roy**** > > ** ** > > ** ** > > *From:* Mauro Talevi [mailto:[email protected]] > *Sent:* dinsdag 19 februari 2013 21:48 > *To:* [email protected] > *Subject:* Re: [jbehave-user] Configure Custom reporter by Spring config > XML file**** > > ** ** > > Can you please put your project somewhere on github so it can be cloned > and debugged? > > On 19/02/2013 19:15, Roy de Kleijn wrote:**** > > I appreciate your help, > > But there were no reports generated: > this is the output message [INFO] Generating reports view to > <projectname>' using formats '[]' and view properties > > > This is how the runner looks like: > public class RunWebStories extends JUnitStories { > private WebDriverProvider driverProvider = new > SeleniumWebDriverProvider(); > private static final Logger LOG = Logger.getLogger(RunWebStories.class); > private Configuration configuration; > > public RunWebStories() { > Embedder embedder = configuredEmbedder(); > > embedder.embedderControls().doGenerateViewAfterStories(true) > .doIgnoreFailureInStories(true).doIgnoreFailureInView(true) > .doVerboseFiltering(true); > //embedder.useExecutorService(MoreExecutors.sameThreadExecutor()); > } > > @Override > public Configuration configuration() { > configuration = makeConfiguration(this.getClass(), > driverProvider); > return configuration; > } > > public static Configuration makeConfiguration(Class<?> embeddableClass, > WebDriverProvider driverProvider) { > Properties viewResources = new Properties(); > viewResources.put("decorateNonHtml", "true"); > > ParameterConverters parameterConverters = new ParameterConverters(); > > ExamplesTableFactory examplesTableFactory = new ExamplesTableFactory( > new LocalizedKeywords(), > new LoadFromClasspath(embeddableClass), parameterConverters); > parameterConverters.addConverters(new DateConverter( > new SimpleDateFormat("yyyy-MM-dd")), > new ExamplesTableConverter(examplesTableFactory)); > > SeleniumConfiguration seleniumConfig = new SeleniumConfiguration(); > > seleniumConfig.useWebDriverProvider(driverProvider); > seleniumConfig.useStoryLoader(new > LoadFromClasspath(embeddableClass.getClassLoader())); > > StoryReporterBuilder reporter = new StoryReporterBuilder(); > reporter.withCodeLocation( > CodeLocations > .codeLocationFromClass(embeddableClass)); > //.withDefaultFormats() > //.withFormats(new ScreenshootingHtmlFormat(driverProvider), XML, > CONSOLE, TXT); > reporter.withRelativeDirectory( > "jbehave/" > + System.getProperty("conceptName") > + "/" > + System.getProperty("siteId") > ); > seleniumConfig > .useFailureStrategy(new FailingUponPendingStep()) > // .useStepMonitor(new SeleniumStepMonitor(contextView, > // seleniumContext, new SilentStepMonitor())) > .useStoryReporterBuilder(reporter) > .useParameterConverters(parameterConverters);// new > // SeleniumContextOutput(seleniumContext), > return seleniumConfig; > } > > @Override > public InjectableStepsFactory stepsFactory() { > ApplicationContext context = new SpringApplicationContextFactory( > "org/spilgames/" + System.getProperty("conceptName") > + "/config/config.xml").createApplicationContext(); > return new SpringStepsFactory(configuration(), context); > } > > @Override > protected List<String> storyPaths() { > > return new StoryFinder().findPaths( > codeLocationFromClass(this.getClass()), > "**/" + System.getProperty("conceptName") > + "/newStories/*.story", "**/excluded*.story"); > > } > } > > > and this is how the Spring Configuration looks like: > <bean id="screenshot" class="org.spilgames.ScreenshootingHtmlFormat"> > <constructor-arg ref="provider" /> > <constructor-arg value="SCREENSHOT" /> > </bean> > > <bean > > class="org.jbehave.core.configuration.spring.SpringStoryReporterBuilder" > init-method="withDefaultFormats"> > <property name="formats"> > <list> > <ref bean="screenshot" /> > <value>CONSOLE</value> > <value>TXT</value> > <value>XML</value> > </list> > </property> > </bean> > > > Any strange thing here ? > > **** > ------------------------------ > > *Van:* louis gueye [[email protected]] > *Verzonden:* dinsdag 19 februari 2013 18:21 > *Aan:* [email protected] > *Onderwerp:* Re: [jbehave-user] Configure Custom reporter by Spring > config XML file**** > > Hi Roy,**** > > ** ** > > It should run out-of-the-box if your org.spilgames.ScreenshootingHtmlFormat > extends org*.*jbehave*.*core*.*reporters.Format**** > > > > **** > > **** > > Something like this should work. **** > > class org.spilgames.ScreenshootingHtmlFormat extends org*.*jbehave*.*core* > .*reporters.Format {**** > > private**** > > WebDriver driverProvider;**** > > ScreenshootingHtmlFormat (WebDriver driverProvider, String name) {**** > > super(name);**** > > this.driverProvider = driverProvider;**** > > }**** > > }**** > > <bean id="screenshot" class="org.spilgames.ScreenshootingHtmlFormat"> > > **** > > <constructor-arg ref="provider" /> > > **** > > <constructor-arg value="SCREENSHOT" /> > > **** > > </bean> > > **** > > **** > > ** ** > > <bean > > class="org.jbehave.core.configuration.spring.SpringStoryReporterBuilder" > init-method="withDefaultFormats"> > <property name="formats"> > <list>**** > > <ref bean="screenshot"/> **** > > > <value>CONSOLE</value> > <value>TXT</value>**** > > <value>XML</value> > </list> > </property> > </bean>**** > > ** ** > > ** ** > > ** ** > > 2013/2/19 Roy de Kleijn <[email protected]>**** > > Thanks for your quick feedback ? > > Where should I do that ? inside the spring configuration file ? > Can it also be done outside of spring config XML file ? and How should > that look like ? > > > In some way the tests are running again, but I still get an error when a > screenshot is made. driver = null **** > > > > <bean id="screenshot" class="org.spilgames.ScreenshootingHtmlFormat"> > <constructor-arg ref="provider" /> > </bean> > <bean > > class="org.jbehave.core.configuration.spring.SpringStoryReporterBuilder" > init-method="withDefaultFormats"> > <property name="formats"> > <list>**** > > <ref bean="screenshot"/> **** > > > <value>CONSOLE</value> > <value>TXT</value>**** > > <value>XML</value> > </list> > </property> > </bean>**** > > This will let the test run, but gives me the driver = null error; > > > **** > ------------------------------ > > *Van:* louis gueye [[email protected]] > *Verzonden:* dinsdag 19 februari 2013 14:12 > *Aan:* [email protected] > *Onderwerp:* Re: [jbehave-user] Configure Custom reporter by Spring > config XML file**** > > Hi Roy,**** > > ** ** > > Spring supports implicit conversion from string to Enum. ** ** > > Other formats are Enum.**** > > I guess you won't be able to inject non Enum value unless your init-method > (i.e withDefaultFormats) supports it.**** > > I would pass a list of String as parameter to withDefaultFormat method and > then convert each string into the right formatter instance then store it.* > *** > > ** ** > > > -- > Cordialement/Regards, > > Louis GUEYE > linkedin <http://fr.linkedin.com/in/louisgueye> | > blog<http://deepintojee.wordpress.com/> > | twitter <http://twitter.com/#%21/lgueye>**** > > ** ** > > ** ** > > 2013/2/19 Roy de Kleijn <[email protected]>**** > > Hello, > > I have the following question. > > I implemented a custom reporter format ( > http://jaroslav-sedlacek.blogspot.nl/2011/05/screenshots-in-jbehave-reports.html) > which creates a screenshot on failure and add a link to the reports. Which > works fine when using a single thread. > > This is how I configured it in a class which extends from JUnitStories: > > StoryReporterBuilder reporter = new StoryReporterBuilder(); > reporter.withCodeLocation( > CodeLocations > .codeLocationFromClass(embeddableClass)) > .withFormats(new ScreenshootingHtmlFormat(driverProvider), XML, > CONSOLE, TXT); > > This doesn't work when using multiple threads. Which seems to be logical > since the driverProvider is null. > > So I added this custom reporter to the spring configuration xml file. This > is actually the place where I distribute the driverProvider. I see that the > screenshots are being made (file are stored in a folder). However the HTML > reports are not generated properly. > > So I tried to move the StoryReporterBuilder to the spring configuration > file is well: so it looks like this: > > <bean id="screenshot" class="org.spilgames.ScreenshootingHtmlFormat"> > <constructor-arg ref="provider" /> > </bean> > > <bean > > class="org.jbehave.core.configuration.spring.SpringStoryReporterBuilder" > init-method="withDefaultFormats"> > <property name="formats"> > <list> > <value>CONSOLE</value> > <value>TXT</value> > <value>screenshot</value> > <value>XML</value> > </list> > </property> > </bean> > > However this doesn't work for customformats. Is there a workaround? or is > there another to do this ? How can I define the custom format in the Spring > Configuration XML file? > > The first bean in the above example is working (screenshots are being made) > The second bean needs some modification, because it gets stuck at the > third parameter. > > > Any help is appreciated! > > Thanks, > Roy > > > > > **** > > > > **** > > ** ** > > > > **** > > ** ** > > -- > Cordialement/Regards, > > Louis GUEYE > linkedin <http://fr.linkedin.com/in/louisgueye> | > blog<http://deepintojee.wordpress.com/>| > twitter <http://twitter.com/#%21/lgueye>**** > > ** ** > -- Cordialement/Regards, Louis GUEYE linkedin <http://fr.linkedin.com/in/louisgueye> | blog<http://deepintojee.wordpress.com/>| twitter <http://twitter.com/#%21/lgueye>
