java - JBehave - 一个故事中不可能有多个结果吗?

标签 java gherkin jbehave

故事中不可能同时有成功和失败的结果吗?

Lifecycle:
After:
Outcome: FAILURE 
Given I capture page screenshot
Given I close browser
Outcome: SUCCESS
Given I close browser

Scenario: Sample one
Given I open browser
When I do something

Scenario: Sample two
Given I open browser
When I do another thing

例如,对于失败,我想在关闭浏览器之前截取屏幕截图。如果成功我只想关闭浏览器。

我知道我可以在所有场景结束时关闭浏览器,只保留失败结果。我想知道是否有办法在生命周期之后执行此操作。 谢谢。

最佳答案

引用OP:

For example, for failures I want to take a screenshot before closing the browser. If successful I just want to close the browser.

现在,有趣的问题是您使用哪个框架来进行断言? 我假设您使用与 JBehave 捆绑在一起的 Junit,因为 JBehave 依赖于知道 JUnit 抛出的异常是否存在错误。

这个想法是: a) 发生错误时抛出异常(因此需要检查每一步) b) 截屏 c) 继续测试(即关闭浏览器)

因此,为了引发异常,您实际上不需要做太多事情,因为在使用 JUnit 的 Assert 语句时这是自动完成的。

例如

Assert(username.equals("expected_user").isTrue();

如果上述失败,将会抛出异常。 您可以这样捕获它:

public class RunnerExtension implements AfterTestExecutionCallback {

    @Override
    public void afterTestExecution(ExtensionContext context) throws Exception {
        Boolean testResult = context.getExecutionException().isPresent();
        System.out.println(testResult); //false - SUCCESS, true - FAILED
    }
}

@ExtendWith(RunnerExtension.class)
public abstract class Tests {

}

摘自这个答案: JUnit5 - How to get test result in AfterTestExecutionCallback

所以基本上,在执行每个断言之后,您会覆盖标准行为。在上面的例子中,你可以添加(当抛出异常时-->截屏)。

下面是 Selenium-Java 的截图代码:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));

希望以上内容对您有所帮助!

关于java - JBehave - 一个故事中不可能有多个结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52861022/

相关文章:

java - 如何让我的按钮适合 Android 屏幕?

java - 通过 java 检索序列 nextVal 是否比在表上触发选择查询更快?

java - 最大和连续子数组(面试题)

bdd - 存储 SpecFlow 测试运行中所有功能的全局变量

ruby-on-rails - 使用小 cucumber 编写功能的原因

ruby - 如何从 Ruby Cucumber 场景大纲生成可由 Cucumber 报告正确使用的结果?

java - 结合JBehave和SpringJUnit4ClassRunner实现事务回滚

java - 如何使用具有正常 "Given"语句的示例表(Parametrised Scenarios)

cucumber - JBehave 和 Cucumber 有什么区别?

java - HashMap 的多个实例