Hi,

I am using *JBehave Core 4.3.5* with *JBehave Web Selenium 3.6-beta-2*.

After debugging I found out that the code never goes inside  if
(!future.isDone())
{So it never initialized duration.  Not sure what I am doing wrong. I am
only running 1 story at a time.

public void waitUntilAllDoneOrFailed(RunContext context) {
       if ( runningStories.values().isEmpty() ) {
           return;
       }
       boolean allDone = false;
       boolean started = false;
       while (!allDone || !started) {
           allDone = true;
           for (RunningStory runningStory : runningStories.values()) {
               if ( runningStory.isStarted() ){
                   started = true;
                   Story story = runningStory.getStory();
            Future<ThrowableStory> future = runningStory.getFuture();
            *if **(!future.isDone()) {*
               allDone = false;
               StoryDuration duration = runningStory.getDuration();
               runningStory.updateDuration();
               if (duration.timedOut()) {
                  embedderMonitor.storyTimeout(story, duration);
                  context.cancelStory(story, duration);
                  future.cancel(true);
                  if (embedderControls.failOnStoryTimeout()) {
                     throw new StoryExecutionFailed(story.getPath(),
                           new StoryTimedOut(duration));
                  }
                  continue;
               }
            } else {
               try {
                  ThrowableStory throwableStory = future.get();
                  Throwable throwable = throwableStory.getThrowable();
                  if (throwable != null) {
                     context.addFailure(story.getPath(), throwable);
                     if (!embedderControls.ignoreFailureInStories()) {
                        continue;
                     }
                  }
               } catch (Throwable e) {
                  context.addFailure(story.getPath(), e);
                  if (!embedderControls.ignoreFailureInStories()) {
                     continue;
                  }
               }
            }
               } else {
                   started = false;
                   allDone = false;
               }
           }
           tickTock();
       }
       writeStoryDurations(runningStories.values());
}


public StoriesRunner() {
    setBrowser();
    try {
        if (lifeCycleSteps instanceof PerStoriesWebDriverSteps) {
            JUnitReportingRunner.recommendedControls(configuredEmbedder());
            configuredEmbedder().useExecutorService(new DirectExecutorService(){
            }.create(
                    configuredEmbedder()
                            .embedderControls()
                            .doBatch(false)
                            .doGenerateViewAfterStories(true)
                            .doIgnoreFailureInStories(false)
                            .doIgnoreFailureInView(false)
                            .doSkip(false)
                            .doVerboseFailures(false)
                            .doVerboseFiltering(false)
                            .useStoryTimeouts("3000")
            ));
            /* Required to run stories with annotated meta filters */
            
configuredEmbedder().useMetaFilters(Arrays.asList(getListOfStoriesToRun().split(",")));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public Configuration configuration() {
    Class<? extends Embeddable> embeddableClass = this.getClass();
    return new SeleniumConfiguration()
            .useWebDriverProvider(driverProvider)
            .useSeleniumContext(context)
            .useStepCollector(stepCollector)
            /*.useStepMonitor(new SeleniumStepMonitor(contextView,
context, new SilentStepMonitor()))*/
            .useStoryLoader(new LoadFromClasspath(embeddableClass))
            .useParameterConverters(new
ParameterConverters().addConverters(new
ParameterConverters.DateConverter(new
SimpleDateFormat("yyyy-MM-dd"))))
            .useStoryReporterBuilder(new StoryReporterBuilder()
                    .withCodeLocation(codeLocationFromClass(embeddableClass))
                    .withDefaultFormats()
                    .withFormats(Format.STATS,
                                 Format.CONSOLE,
                                 Format.XML,
                                 Format.TXT,
                                 /*Format.HTML,*/
                                 screenShootingFormat)
                    .withFailureTrace(true)
                    );
}

private String getListOfStoriesToRun() throws IOException {
    if (System.getProperty("stories") == null) {
        //System.out.print(System.getProperty("story"));
        return readProperties.getStories();
    } else {
        return System.getProperty("stories");
    }
}

@Override
protected List<String> storyPaths() {
    return new 
StoryFinder().findPaths(CodeLocations.codeLocationFromPath("./src/main/resources"),
"**/*.story", "");
}


On Thu, Nov 1, 2018 at 8:02 AM Maganti Suryanarayana murthy <
[email protected]> wrote:

> Latest jbehave jars solved the problem
>
> On Wed, Oct 31, 2018, 10:45 PM Gajendra Sahu <[email protected]
> wrote:
>
>> Any updates on this? I am facing the same issue.
>>
>> Running using JunitStories and the storyDuration.props has durations 0.
>>
>> On Friday, 23 February 2018 11:58:17 UTC-6, mauro.talevi wrote:
>>>
>>> Please package all this in a downloadable zip that can be opened and
>>> run.  Don't forget a readme with tool versions etc
>>>
>>> On 23 Feb 2018, at 18:32, Maganti Suryanarayana murthy <
>>> [email protected]> wrote:
>>>
>>> Hi Mauro Talevi,
>>>
>>> I have used gradle as a build file and please find the code base that i
>>> am using. I am pasing build.gradle file and apptechJbehaveStories.java
>>>
>>> Build.gradle:
>>>
>>> def buildNumber = System.getProperty('buildNumber') ?: '0'
>>> def buildVersion = '1.0.0-' + buildNumber
>>>
>>> version = buildVersion
>>>
>>> apply plugin: 'groovy'
>>> apply plugin: 'java'
>>> apply plugin: 'maven'
>>>
>>>
>>> repositories {
>>>     mavenCentral()
>>>    }
>>>
>>> configurations {
>>>     jbehave
>>> }
>>>
>>> dependencies {
>>>     testCompile group: 'junit', name: 'junit', version: '4.11'
>>>     compile(group: 'org.jbehave.web', name: 'jbehave-web-selenium',
>>> version:'4.0-beta-1') {
>>>         exclude(module: 'selenium-remote-control')
>>>         exclude(module: 'selenium-java')
>>>         exclude(module: 'jbehave-core')
>>>     }
>>>     compile 'org.springframework:spring-webmvc:5.0.2.RELEASE'
>>>     compile 'org.jbehave.site:jbehave-site-resources:3.3.1'
>>>     compile 'org.jbehave:jbehave-spring:4.1.3'
>>>     compile 'org.jbehave:jbehave-core:4.1.3'
>>>     compile 'log4j:log4j:1.2.16'
>>>     compile group: 'org.seleniumhq.selenium', name: 'selenium-java',
>>> version: '3.7.1'
>>>     compile group: 'commons-collections', name: 'commons-collections',
>>> version: '3.2.1'
>>>     testCompile group: 'org.jbehave', name: 'jbehave-core', version:
>>> '4.1.3'
>>>     compile 'org.jbehave.site:jbehave-site-resources:3.3.1:@zip'
>>> }
>>>
>>> /** userDefined task to copy the srories from /src/main/stories into
>>> build/classes/test/stories*/
>>> task copyStories(type: Copy) {
>>>     from 'src/main/resources' into "${buildDir}/classes/test"
>>>     from 'src/main/stories' into "${buildDir}/classes/test/stories"
>>> }
>>>
>>>
>>> task copyJbehaveStyle(type: Copy) {
>>>     from(zipTree(jarPath("jbehave-core"))) {
>>>         include "style/*"
>>>     }
>>>     into("${buildDir}/classes/jbehave/view")
>>> }
>>>
>>> task copyJbehaveUtilities(type: Copy) {
>>>     from(zipTree(jarPath("jbehave-site-resources"))) {
>>>         include "js/**/*"
>>>         include "style/**/*"
>>>         include "images/*"
>>>     }
>>>     into("${buildDir}/classes/jbehave/view")
>>> }
>>>
>>> def jarPath(String jarName) {
>>>     configurations.testCompile.find({ it.name.startsWith(jarName)
>>> }).absolutePath
>>> }
>>>
>>>
>>> /** to specify the source for java and resources for test task, by
>>> default this is refered to src/test folder in gradle and maven*/
>>> sourceSets {
>>>     test {
>>>         java {
>>>             srcDir "src/main/java"
>>>         }
>>>         resources {
>>>             srcDir "src/main/resources"
>>>         }
>>>     }
>>> }
>>>
>>> test {
>>>     systemProperty "metaFilters", System.getProperty("metaFilters", "")
>>>     doFirst {
>>>         copy {
>>>             from(zipTree(jarPath("jbehave-core"))) {
>>>                 include "style/*"
>>>             }
>>>             into("build/reports/jbehave/view")
>>>
>>>         }
>>>         copy {
>>>             from(zipTree(jarPath("jbehave-site-resources"))) {
>>>                 include "js/**/*"
>>>                 include "style/**/*"
>>>                 include "images/*"
>>>             }
>>>             into("build/reports/jbehave/view")
>>>         }
>>>     }
>>>     systemProperties System.getProperties()
>>>     dependsOn([clean,copyStories,copyJbehaveUtilities,copyJbehaveStyle])
>>> }
>>>
>>>
>>> apptechJBehaveStories.java
>>>
>>> package com.apptech.qmo;
>>>
>>> import com.apptech.qmo.ipt.QMOHtmlOutput;
>>> import com.apptech.qmo.ipt.QMOStoryData;
>>> import com.apptech.qmo.ipt.QMOStoryReporterBuilder;
>>> import com.apptech.qmo.ipt.utils.Loggers;
>>> import com.google.common.util.concurrent.MoreExecutors;
>>> import org.apache.log4j.Logger;
>>> import org.apache.log4j.PropertyConfigurator;
>>> import org.jbehave.core.Embeddable;
>>> import org.jbehave.core.configuration.Configuration;
>>> import org.jbehave.core.embedder.Embedder;
>>> import org.jbehave.core.embedder.StoryControls;
>>> import org.jbehave.core.embedder.StoryTimeouts;
>>> import org.jbehave.core.failures.FailingUponPendingStep;
>>> import org.jbehave.core.failures.PendingStepStrategy;
>>> import org.jbehave.core.i18n.LocalizedKeywords;
>>> import org.jbehave.core.io.CodeLocations;
>>> import org.jbehave.core.io.LoadFromClasspath;
>>> import org.jbehave.core.io.StoryFinder;
>>> import org.jbehave.core.junit.JUnitStories;
>>> import org.jbehave.core.model.ExamplesTableFactory;
>>> import org.jbehave.core.model.TableTransformers;
>>> import org.jbehave.core.parsers.RegexStoryParser;
>>> import org.jbehave.core.reporters.CrossReference;
>>> import org.jbehave.core.reporters.Format;
>>> import org.jbehave.core.reporters.HtmlTemplateOutput;
>>> import org.jbehave.core.reporters.StoryReporterBuilder;
>>> import org.jbehave.core.steps.InjectableStepsFactory;
>>> import org.jbehave.core.steps.ParameterControls;
>>> import org.jbehave.core.steps.ParameterConverters;
>>> import org.jbehave.core.steps.spring.SpringStepsFactory;
>>> import org.jbehave.web.selenium.*;
>>> import org.springframework.context.ApplicationContext;
>>> import
>>> org.springframework.context.annotation.AnnotationConfigApplicationContext;
>>>
>>> import java.net.URL;
>>> import java.text.SimpleDateFormat;
>>> import java.util.ArrayList;
>>> import java.util.Arrays;
>>> import java.util.List;
>>> import java.util.Properties;
>>>
>>> import static com.apptech.qmo.ipt.utils.DriverProvider.driver;
>>> import static org.jbehave.core.io.CodeLocations.codeLocationFromClass;
>>> import static org.jbehave.core.io.CodeLocations.getPathFromURL;
>>> import static org.jbehave.core.reporters.Format.*;
>>>
>>> public class apptechJbehaveStories extends JUnitStories {
>>>     private static final String _STORIES_SEPARATOR = ",";
>>>     public static QMOHtmlOutput qmoHtmlOutput;
>>>     public static QMOStoryData storyData;
>>>     public static List<String> storyToExecute = null;
>>>     static CrossReference crossReference = new
>>> CrossReference().withJsonOnly().withOutputAfterEachStory(true);
>>>     Logger log = Logger.getLogger(apptechJbehaveStories.class);
>>>     PendingStepStrategy pendingStepStrategy = new
>>> FailingUponPendingStep();
>>>     ContextView contextView = new LocalFrameContextView().sized(640,
>>> 120);
>>>     SeleniumContext seleniumContext = new SeleniumContext();
>>>     //        SeleniumStepMonitor stepMonitor = new
>>> SeleniumStepMonitor(contextView,
>>> seleniumContext,crossReference.getStepMonitor());
>>>     Format[] formats = new Format[]{new
>>> SeleniumContextOutput(seleniumContext), Format.CONSOLE, XML, Format.HTML};
>>>     StoryReporterBuilder reporterBuilder = new
>>> QMOStoryReporterBuilder(storyData)
>>>
>>> .withCodeLocation(codeLocationFromClass(apptechJbehaveStories.class)).withFailureTrace(true)
>>>
>>> .withFailureTraceCompression(true).withDefaultFormats().withFormats(formats)
>>>             .withCrossReference(crossReference);
>>>     private ApplicationContext applicationContext;
>>>     private WebDriverProvider driverProvider = new
>>> PropertyWebDriverProvider();
>>>     private WebDriverSteps lifecycleSteps = new
>>> PerStoriesWebDriverSteps(driverProvider);
>>>
>>>     public apptechJbehaveStories() {
>>>         super();
>>>         try {
>>>             System.setProperty("webdriver.chrome.driver",
>>> "src/main/resources/drivers/chromedriver.exe");
>>>             storyData = new QMOStoryData();
>>>             String path =
>>> apptechJbehaveStories.class.getProtectionDomain().getCodeSource().getLocation().getPath()
>>> + "stories/log4j.properties";
>>>             PropertyConfigurator.configure(path);
>>>             if (lifecycleSteps instanceof PerStoriesWebDriverSteps) {
>>>
>>> configuredEmbedder().useExecutorService(MoreExecutors.newDirectExecutorService());
>>>             }
>>>         } catch (Exception e) {
>>>             e.printStackTrace();
>>>         }
>>>     }
>>>
>>>     @Override
>>>     public Configuration configuration() {
>>>         new WebDriverScreenshotOnFailure(driverProvider, new
>>> QMOStoryReporterBuilder());
>>>         Class<? extends Embeddable> embeddableClass = this.getClass();
>>>         Properties viewResources = new Properties();
>>>         viewResources.put("decorateNonHtml", "true");
>>>         LoadFromClasspath resourceLoader = new
>>> LoadFromClasspath(embeddableClass);
>>>         TableTransformers tableTranformers = new TableTransformers();
>>>         // Start from default ParameterConverters instance
>>>         ParameterConverters parameterConverters = new
>>> ParameterConverters(resourceLoader, tableTranformers);
>>>         ExamplesTableFactory examplesTableFactory = new
>>> ExamplesTableFactory(new LocalizedKeywords(), resourceLoader,
>>>                 parameterConverters, tableTranformers);
>>>         // add custom converters
>>>         parameterConverters.addConverters(new
>>> ParameterConverters.DateConverter(new SimpleDateFormat("yyyy-MM-dd")),
>>>                 new
>>> ParameterConverters.ExamplesTableConverter(examplesTableFactory));
>>>
>>>         return new
>>> SeleniumConfiguration().useSeleniumContext(seleniumContext)
>>>                 .useWebDriverProvider(driverProvider)
>>>                 .usePendingStepStrategy(pendingStepStrategy)
>>>                 .useStoryControls(new
>>> StoryControls().doResetStateBeforeScenario(true))
>>>                 .useStoryLoader(new
>>> LoadFromClasspath(apptechJbehaveStories.class))
>>>                 .useStoryParser(new
>>> RegexStoryParser(examplesTableFactory))
>>>                 .useStoryReporterBuilder(new
>>> QMOStoryReporterBuilder(storyData)
>>>
>>> .withCodeLocation(CodeLocations.codeLocationFromPath(getClassPath()))
>>>                         .withFailureTrace(true)
>>>                         .withFailureTraceCompression(true)
>>>                         .withCrossReference(crossReference)
>>>                         .withDefaultFormats()
>>>                         .withFormats(Format.CONSOLE, Format.HTML,
>>> Format.XML,Format.STATS))
>>>                 .useParameterControls(new ParameterControls()
>>>                         .useDelimiterNamedParameters(true))
>>>                 .useParameterConverters(parameterConverters)
>>>                 .useStepMonitor(crossReference.getStepMonitor());
>>>     }
>>>
>>>     private List<String> getMetaFilters() {
>>>         String metaFilterStr = System.getProperty("meta.filter");
>>>         metaFilterStr = metaFilterStr == null ? "" : metaFilterStr;
>>>         List<String> metaFilters =
>>> Arrays.asList(metaFilterStr.split(","));
>>>         log.info("**** MetaFilters = " + metaFilters);
>>>         return metaFilters;
>>>     }
>>>
>>>     private String getClassPath() {
>>>         URL fileUrl = codeLocationFromClass(this.getClass());
>>>         String classpath = getPathFromURL(fileUrl);
>>>         System.out.println("getClassPath classpath = " + classpath);
>>>         // class may come from a jar file
>>>         if (classpath.endsWith(".jar!")) {
>>>             int idx = classpath.lastIndexOf('.');
>>>             classpath = classpath.substring(0, idx);
>>>         }
>>>         return classpath;
>>>     }
>>>
>>>     @Override
>>>     public InjectableStepsFactory stepsFactory() {
>>>         if (this.applicationContext == null) {
>>>             AnnotationConfigApplicationContext applicationContext = new
>>> AnnotationConfigApplicationContext(com.apptech.qmo.ipt.configurations.SpringConfiguration.class);
>>>             this.applicationContext = applicationContext;
>>>         }
>>>         return new SpringStepsFactory(configuration(),
>>> this.applicationContext);
>>>     }
>>>
>>>     public static class CustomTimeoutParser implements
>>> StoryTimeouts.TimeoutParser {
>>>
>>>         public boolean isValid(String timeout) {
>>>             return timeout.matches("(\\d+)secs");
>>>         }
>>>
>>>         public long asSeconds(String timeout) {
>>>             return
>>> Long.parseLong(org.apache.commons.lang3.StringUtils.substringBefore(timeout,
>>> "secs"));
>>>         }
>>>
>>>     }
>>>
>>>     @Override
>>>     public void run() throws Throwable {
>>>         Embedder embedder = configuredEmbedder();
>>>         embedder.useMetaFilters(getMetaFilters());
>>>         // These should be enabled so that even though the stories fail
>>> it wont go to catch method. Its useful when running multiple scenarios
>>>         embedder.embedderControls().doIgnoreFailureInStories(true);
>>>         embedder.embedderControls().doIgnoreFailureInView(false);
>>>         embedder.embedderControls().doGenerateViewAfterStories(true);
>>>
>>> embedder.configuration().storyControls().doIgnoreMetaFiltersIfGivenStory(true);
>>>         embedder.useTimeoutParsers(new CustomTimeoutParser());
>>>         List<String> storyPaths = storyPaths();
>>>         try {
>>>             embedder.runStoriesAsPaths(storyPaths);
>>>         } catch (Exception e) {
>>>             Loggers.CONSOLE_LOGGER.error("STORY FAILED DUE TO:");
>>>             e.printStackTrace(System.err);
>>>             Loggers.FILE_LOGGER.error("STORY FAILED DUE TO:");
>>>             e.printStackTrace(System.err);
>>>             Loggers.CONSOLE_LOGGER.info("Driver instance is closing");
>>>             Loggers.FILE_LOGGER.info("Driver instance is closing");
>>>             embedder.generateCrossReference();
>>>             throw new Throwable(e.fillInStackTrace());
>>>         } finally {
>>>             try {
>>>                 Loggers.CONSOLE_LOGGER.info("Driver instance is
>>> closing");
>>>                 driver.quit();
>>>                 Loggers.FILE_LOGGER.info("Driver instance is closing");
>>>             } catch (Exception e) {
>>>                 System.out.println("Issue in closing driver instance in
>>> run method: " + e.getMessage());// Wantedly not caught the exception
>>>             }
>>>             embedder.generateCrossReference();
>>>         }
>>>     }
>>>
>>>     public String getStoryFromStoryPaths(String storyName, List<String>
>>> storyPaths) {
>>>         for (String story : storyPaths) {
>>>             System.out.println("story = " + story);
>>>             int stroryLength = story.split("/").length;
>>>             if (story.split("/")[stroryLength -
>>> 1].equalsIgnoreCase(storyName)) return story;
>>>         }
>>>         return "";
>>>     }
>>>
>>>     @Override
>>>     protected List<String> storyPaths() {
>>>         final List<String> globList = new ArrayList<String>();
>>>         final String[] globs = storyFilter().split(_STORIES_SEPARATOR);
>>>         for (final String story : globs) {
>>>             globList.add("**/*" + story + (story.endsWith(".story") ? ""
>>> : ".story"));
>>>         }
>>>         String classpath = getClassPath();
>>>         log.info("classpath=" + classpath);
>>>         List<String> paths = new StoryFinder().findPaths(classpath,
>>> globList, null);
>>>         log.info("**** story paths = " + paths.toString());
>>>         return paths;
>>>     }
>>>
>>>     private String storyFilter() {
>>>         String storyFilter = System.getProperty("story.filter");
>>>         if (storyFilter == null) {
>>>             storyFilter = "";
>>>         }
>>>         return storyFilter;
>>>     }
>>>
>>>     public String captureReportName() {
>>>         String storyName = null;
>>>         String fileNames[] = reporterBuilder.outputDirectory().list();
>>>         for (int i = 0; i < fileNames.length; i++) {
>>>             if (fileNames[i].contains("html") &
>>> !fileNames[i].contains("BeforeStories")) {
>>>                 String name[] = fileNames[i].split(".html");
>>>                 storyName = name[0];
>>>             }
>>>         }
>>>         return storyName;
>>>     }
>>> }
>>>
>>>
>>>
>>> On Thursday, February 22, 2018 at 12:19:29 PM UTC-6, mauro.talevi wrote:
>>>>
>>>> You need to provide a sample project that reproduces the issue for us
>>>> to help you.
>>>>
>>>> On 21 Feb 2018, at 16:39, Maganti Suryanarayana murthy <
>>>> [email protected]> wrote:
>>>>
>>>> Any help on this
>>>> ?
>>>>
>>>> On Tuesday, February 20, 2018 at 10:16:58 AM UTC-6, Maganti
>>>> Suryanarayana murthy wrote:
>>>>>
>>>>> Any one is facing above issue ?
>>>>>
>>>>> On Tuesday, February 20, 2018 at 9:42:28 AM UTC-6, Maganti
>>>>> Suryanarayana murthy wrote:
>>>>>>
>>>>>> Jbehave story report is not showing the time in report i.e., the
>>>>>> Duration is shown as 00:00:00.000. I am using gradle as a build tool.
>>>>>>
>>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "JBehave User" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> To view this discussion on the web, visit
>>>> https://groups.google.com/d/msgid/jbehave-user/6376be18-29ad-444f-9670-79a4a6eae694%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/jbehave-user/6376be18-29ad-444f-9670-79a4a6eae694%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>>
>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "JBehave User" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> To view this discussion on the web, visit
>>> https://groups.google.com/d/msgid/jbehave-user/045c006d-6548-466d-ab71-311b365880e6%40googlegroups.com
>>> <https://groups.google.com/d/msgid/jbehave-user/045c006d-6548-466d-ab71-311b365880e6%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "JBehave User" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/jbehave-user/aKfyLJmdsyY/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> To post to this group, send email to [email protected].
>> To view this discussion on the web, visit
>> https://groups.google.com/d/msgid/jbehave-user/604eab3b-5b98-4908-a71b-c6b1680f0354%40googlegroups.com
>> <https://groups.google.com/d/msgid/jbehave-user/604eab3b-5b98-4908-a71b-c6b1680f0354%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
*Regards,*
Gajendra Sahu

-- 
You received this message because you are subscribed to the Google Groups 
"JBehave User" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send an email to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/jbehave-user/CAK%3DAUZVw2e9rbSLuBmT7WHL4RD%2BeFT5Cu7bL%2B_E95pBbMAzXzg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to