如何在 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.js的AfterStep钩子中获得步骤结果