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 { }
解决方法
问题根源是你同时触发了两次截图保存动作:
- 通过
page.screenshot().setPath()手动在本地生成Login.png - 调用
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
相关产品推荐
相关产品推荐

