当前位置: 首页 > 知识库问答 >
问题:

如何附加/嵌入捕获的屏幕截图在自定义softAssertion到cucumber报告?

公羊玉泽
2023-03-14

在软断言截图得到捕获时softAssertions.assertAll()被调用.因此,为捕获屏幕截图为每个软断言失败,创建了简单的CustomAssertion它扩展到SoftAssertions并在其中覆盖一个方法名称onAssertionErrorCollected().

下面是示例代码

public class CustomSoftAssertion extends SoftAssertions {

    public CustomSoftAssertion() {
    }

    @Override
    public void onAssertionErrorCollected(AssertionError assertionError) {
        File file = TestRunner.appiumDriver.getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(file, new File(System.getProperty("user.dir") + File.separator + "ScreenShots" + File.separator + LocalDate.now().format(DateTimeFormatter.ofPattern("MMMM_dd_yyyy")) + File.separator + "demo.png"), true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在步骤定义文件中:

CustomSoftAssertion softAssertion = new CustomSoftAssertion();
softAssertion.assertThat(isLogin).isTrue();

以上代码工作正常。但是,如何将这些截图附加/嵌入到cucumber报告中?注意:对于断言,我使用的是Assertj库。

共有1个答案

傅峰
2023-03-14

您可以使用scenario将场景附加到报告中。附上。这意味着您必须设置一些管道,才能将场景放入断言中。

public class CustomSoftAssertion extends SoftAssertions {

    private final Scenario scenario;

    public CustomSoftAssertion(Scenario scenario) {
        this.scenario = scenario;
    }

    @Override
    public void onAssertionErrorCollected(AssertionError assertionError) {
        // take screenshot and use the scenario object to attach it to the report
        scenario.attach(....)
    }
}

private CustomSoftAssertion softAssertion;

@Before
public void setup(Scenario scenario){
    softAssertion = new CustomSoftAssertion(scenario);
}

@After // Or @AfterStep
public void assertAll(){
    softAssertion.assertAll();
}

@Given("example")
public void example(){
    softAssertion.assertThat(isLogin).isTrue();
}
 类似资料:
  • 我看到有人为此发了一篇帖子,在用JAVA和Cucumber进行测试的每一步之后,如何捕捉屏幕截图? 但是,我想做的是能够在每一个动作之后,甚至在一个Cucumber步骤内,拍摄一个屏幕截图,并将其嵌入Cucumber报告中。换句话说,在一个步骤中有多个动作可以满足这个步骤,我想为所有动作嵌入屏幕截图。这可能吗?如果是,怎么做?

  • 我在我的项目中使用cucumber版本4。我在我的项目中使用以下依赖项。 使用上述依赖关系,我能够生成“cucumberjvm报告”。 我还用java编写了代码,用于将屏幕截图附加到报告中,我只在场景失败时拍摄屏幕截图。 我不确定是否遗漏了什么,但屏幕截图没有附加到报告中。cucumber生成的默认html报告正在显示屏幕截图。 谁能帮我一下吗。谢谢

  • 我有一个有30行的tableView,我还有一个位于tableView顶部的视图(不在tableView标题中),我想捕获屏幕的完整屏幕截图,包括视图和tableView的所有行,但我只能捕获tableView和视图的可见行。请帮助我,提前谢谢。这是我的代码和模拟器的屏幕截图。注意(我不希望我的视图位于tableview标题中,因为当我们滚动tableview时,它也会滚动,这就是为什么视图是固定

  • 我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:

  • 我正在尝试使用extent report构建selenium,但无法使用save screenshot函数,因为我无法引用ITestListener类中的WebDriver对象。下面是我的示例代码: 测试转轮。java: TestListener.java公共类TestListener实现ITestListener{ 问题: > 如何将WebDriver对象从TestRunner.java传递给T

  • Cucumber Extent Reports在没有屏幕截图的情况下工作,但是当我想要在Extent report中使用屏幕截图时,我会得到以下例外。 为了制作cucumber范围报告,我只做了配置更改。。。没有代码更改。为了添加截图,我在下面添加了钩子来添加截图API。 波姆。xml: 跑步者代码: 在钩子中添加截图代码: 添加了最后一行- 我使用extent.properties文件和exte