JBehave+TestNG+Selenium Grid-当使用单个JBehave故事文件时,为每个单独的Seleniu



我有一个JBehave项目,需要与TestNG和Selenium网格集成,该项目在github中使用this、this和this代码(很抱歉,因为我无法通过整个代码,所以只显示引用)我已经完成了JBehave+TestNG+Selenium grid。

但我的问题是,当使用单个Story文件在不同的Selenium节点中执行时,jbehave报告index.html文件仅针对任何一个节点显示。我希望在一个或多个jbehavereportindex.html文件中为每个节点提供单独的报告。我不应该使用两个故事文件运行,如何在单个jbehave report html文件中为每个Selenium节点显示单独的报告。

我知道jbehave在生成报告时使用了freemarker,但我不知道如何覆盖它并为每个selenium节点显示报告。有什么想法请分享。

提前感谢。

我认为将Jbehavior和TestNG结合起来不是一个更好的主意。Jbehavior支持故事,使用testng将没有任何用处,比如分组、参数等。现有的JunitStories类可以很好地与Jbehavior配合使用。如果您使用它来组织测试结果,您可以使用jbehave的自定义诱惑报告工具(链接)。您可以使用Jbehavior+Allure+SeleniumGrid架构。

最后尝试了一种方法,发现它现在是一个临时解决方案。

  1. 创建一个字符串变量,用于获取Story Runner类中的详细信息
RemoteWebDriver driver = (RemoteWebDriver) DriverManager.getDriver();
        String hostname = hng.getHostName(driver.getSessionId());
        String browserName = driver.getCapabilities().getBrowserName();
        String browserVersion = driver.getCapabilities().getVersion();
  1. 然后将该值传递给Story Embedded类,如下所示
Embedder storyEmbedder = new StoryEmbedder(driver, browserName + "v" + browserVersion);
  1. 在Story Embedded类中,指定该String值,如下所示
private WebDriver driver;
    private static String name;
    public StoryEmbedder(WebDriver driver, String hostname) {
            this.driver = driver;
            this.name = hostname;
        }
  1. 然后在useStoryReporterBuilder函数内的Configuration方法中添加以下代码
.withRelativeDirectory(name) //where 'name' is the String variable refer above step.
  1. 类似的回报如下
return new MostUsefulConfiguration()
                    .useStoryControls(new StoryControls().doDryRun(false).doSkipScenariosAfterFailure(false))
                    .useStoryLoader(
                            new LoadFromClasspath(embedderClass))
                    .useStoryParser(
                            new RegexStoryParser(
                                    examplesTableFactory))
                    .useStoryPathResolver(new UnderscoredCamelCaseResolver())
                    .useStoryReporterBuilder(
                            new StoryReporterBuilder().withCodeLocation(CodeLocations.codeLocationFromClass(embedderClass))
                                    .withDefaultFormats().withPathResolver(new ResolveToPackagedName())
                                    .withViewResources(viewResources).withReporters(new MyStoryReporter())
                                    .withFormats(Format.CONSOLE, Format.TXT, Format.HTML, Format.XML).withFailureTrace(true)
                                    .withFailureTraceCompression(true).withCrossReference(xref).withRelativeDirectory(name)).useParameterConverters(parameterConverters)
                    // use '%' instead of '$' to identify parameters
                    .useStepPatternParser(new RegexPrefixCapturingPatternParser("%"));

现在我可以有两个基于浏览器和浏览器版本的文件夹。

如果你们有更好的答案,请发布出来。提前感谢。

最新更新