You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cucumber Java结合Playwright时自动生成embedded1.png重复截图的问题求助

问题:Cucumber Extent Report自动生成重复截图embedded1.png的解决方法

我是Playwright和Cucumber的新手,搭建了一个简单项目,在网站登录成功后对首页进行截图。截图会生成在TestScreenshots文件夹中,但出现两张截图:一张是我通过Playwright指定名称的Login.png,另一张是自动生成的embedded1.png。我使用JUnit4作为运行器,尝试修改scenario.attach()的参数但问题依旧,目前使用Cucumber Extent Report Adapter 7,怀疑是Extent Report导致该问题,想了解如何阻止Cucumber自动生成这张重复的embedded1.png。

截图文件展示

步骤类中的方法

@Then("User verifies the Sign In button on the website")
public void user_verifies_the_sign_in_button_on_the_website()  {
        
        assertThat(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("sign in menu")).first());
        byte[] screenshot=page.screenshot(new Page.ScreenshotOptions()
                  .setPath(Paths.get("./TestScreenshots/Login.png")));
        scenario.attach(screenshot, "image/png", screenshot.toString());
        // scenario.attach(screenshot, "image/png", "Login");--- 同样有问题    
                  
    }

extent.properties文件内容

extent.reporter.spark=true
extent.reporter.spark.out=target/Cucumber-Reports/extent-Report.html
extent.reporter.spark.config=src/test/resources/spark-config.xml
screenshot.dir=TestScreenshots/
screenshot.rel.path=../.././TestScreenshots/

运行器文件

@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources/features",
glue = {"stepdefinitions"},
plugin = {"pretty", "com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:"})
public class PageRunnerTest {

}

解决方法

问题根源是你同时触发了两次截图保存动作:

  1. 通过page.screenshot().setPath()手动在本地生成Login.png
  2. 调用scenario.attach()传递截图字节流时,Extent Report Adapter会自动将该字节流保存到你指定的screenshot.dir目录下,默认命名为embedded1.png

有两种方案可以避免重复:

方案一:只保留Extent Report自动生成的截图

删掉手动生成截图的setPath参数,同时给scenario.attach()的第三个参数设置自定义名称,这样Extent Report会用这个名称生成截图,替代默认的embedded1.png:

byte[] screenshot=page.screenshot(); // 去掉setPath,不手动生成本地文件
scenario.attach(screenshot, "image/png", "Login"); // 第三个参数设为自定义名称

执行后,TestScreenshots目录只会生成Login.png,不会出现embedded1.png。

方案二:保留手动生成的Login.png,让报告直接引用

不需要传递截图字节流,直接将已生成的文件路径附加到报告中,Extent Report会直接引用该文件,不会重复生成:

// 先手动生成截图
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("./TestScreenshots/Login.png")));
// 附加本地文件到报告
scenario.attach(new File("./TestScreenshots/Login.png"), "image/png", "Login");

内容的提问来源于stack exchange,提问作者Abhi06

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:52:32