我是剧作家和黄瓜的新手。我设置了一个简单的项目,在网站上成功登录时,我将截取主页的屏幕截图。屏幕截图正在 TestScreenshots 文件夹中生成,但有 2 个屏幕截图。第一个是我使用 Playwright 给出的名称,第二个是自动生成的。如何阻止 Cucumber 自动生成这个embedded1.png?我无法找到确切的问题。我使用 Junit4 作为跑步者
Step类中的方法:
@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");--- Giving same issue
}
我正在使用 Cucumber Extent Report Adapter 7。下面是我的extent.properties 文件
extent.reporter.spark.start=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 {
}
我尝试调试该问题,但确实找到了任何解决方案。范围报告是否导致此问题?
作为 M.P. Korstanje 说,看起来 Extent 和 Playwright 都将屏幕截图存储在同一个地方。如果您 1. 使用不同的报告器并且 2. 不要将屏幕截图写入文件夹,则可以避免此问题以及可能的其他问题。
Allure Report不使用自定义位置进行屏幕截图,所有测试结果和附件都位于一个文件夹中,因此保证您的问题不会发生。
使用 Allure,您可以按照以下方式在您提供的代码中捕获屏幕截图:
import io.qameta.allure.Allure;
...
@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")));
try (InputStream is = Files.newInputStream(Paths.get("./TestScreenshots/Login.png"))) {
Allure.attachment("image.png", is);
}
}
事实上,您可以省略在屏幕截图文件夹中写入“任何内容”。当您附加屏幕截图时,只需从内存中读取而不是从磁盘中读取:
import io.qameta.allure.Allure;
...
@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();
try (InputStream is = new ByteArrayInputStream(screenshot)) {
Allure.attachment("image.png", is);
}
}
当您使用它时,将整个屏幕截图过程隐藏到一个单独的函数中可能是有意义的,因为您很可能会多次使用它。所以:
import io.qameta.allure.Allure;
...
@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());
take_screenshot();
}
public void take_screenshot() {
byte[] screenshot=page.screenshot();
try (InputStream is = new ByteArrayInputStream(screenshot)) {
Allure.attachment("image.png", is);
}
}
如果您决定使用 Allure,最简单的安装方法是通过 Homebrew(在 Linux 和 Mac 上):
brew install allure
然后,您必须将 Allure 依赖项添加到您的项目中。由于您使用 JUnit4 作为运行器,因此您将需要 allure-junit4 集成;您可以在文档中
allure-results
文件夹中自动生成 Allure 报告。所有屏幕截图都存储在那里。要查看报告,只需在控制台中运行以下命令:
allure serve path/to/the/allure/results/folder