如何在 Cucumber Report 中自定义软断言期间附加/嵌入捕获的屏幕截图?

Posted

技术标签:

【中文标题】如何在 Cucumber Report 中自定义软断言期间附加/嵌入捕获的屏幕截图?【英文标题】:How to attach/embed captured screenshots during custom softAssertion into Cucumber Report? 【发布时间】:2021-12-17 04:36:38 【问题描述】:

在调用 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();

以上代码运行正常。但是,如何将此捕获的附加/嵌入此屏幕截图到黄瓜报告中? 注意:对于断言,我使用的是 Assertj 库。

【问题讨论】:

可能是 ***.com/q/68510688/9714611 的副本?或者您在将屏幕截图添加到报告时遇到问题? @Stefano Cordio,感谢分享链接。为了截取屏幕截图,我使用了钩子if ((scenario.isFailed()) || (scenario.getStatus().toString().equals("SKIPPED"))) byte[] screenshot = testContext.getAppiumDriver().getScreenshotAs(OutputType.BYTES); scenario.attach(resizeBytesImage(screenshot), "image/png", scenario.getName()); 但是,customAssertion() 截取的屏幕截图没有附加到报告中。 【参考方案1】:

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

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();

【讨论】:

现在附上了屏幕截图。但在报告中它以绿色突出显示。 imgur.com/ehBHwLg这怎么可能改变?我正在使用 maven-cucumber-reporting 您的后挂失败,因为这是调用 assertAll 的地方。如果您希望软断言在您的步骤中失败,您必须在您的步骤中或在步骤后的挂钩中调用 assertAll

以上是关于如何在 Cucumber Report 中自定义软断言期间附加/嵌入捕获的屏幕截图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在步骤定义中访问Cucumber步骤名称?

如何在cucumber.js的AfterStep钩子中获得步骤结果

如何在cypress Cucumber中编写Given,When,Then等可以使用的通用步骤定义

pb如何获取子报表

所有黄瓜测试后运行

如何在 Ruby Cucumber 中计算运行场景的标签?