如何使用标签名称在黄瓜中截取屏幕截图

时间:2017-10-20 06:41:08

标签: java selenium cucumber screenshot

我在Selenium/Java中编写了以下代码,但我想参数化此代码并添加为其截取屏幕的标记名称:

@Then("^Take Screenshot$")
public void tearDown() {
    // take the screenshot at the end of every test
    String location = "D:/ubdd/screenshots/";
    DateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy h-m-s");
    Date date = new Date();
    File scrFile = 
    ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    // now save the screenshto to a file some place
    try {
    FileUtils.copyFile(scrFile, new File(location + 
    dateFormat.format(date)+".png"));
    System.out.println("Screenshot saved");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

2 个答案:

答案 0 :(得分:1)

使用Before hook and add the Scenario object作为参数。黄瓜会将此注入当前执行的场景。

private Scenario sce;

    @Before
    public void beforeHook(Scenario scenario) {
         this.sce = scenario


        List<String> tags = sce.getSourceTagNames();
    }

您可以在步骤定义中访问存储的方案对象,以调用getSourceTagNames()来获取标记

答案 1 :(得分:0)

如果您的测试是单线程的,您可以使用Before Hook将正在执行的场景作为@Grasshoper提及并将其存储在全局变量中,然后从正在执行的步骤访问场景以检索标记名称:

private Scenario scenario;

@Before
public void setUp(Scenario scenario) {
  this.scenario = scenario;
}

@Then("^Take Screenshot$")
public void tearDown() {
  this.scenario.getSourceTagNames();
  ...
}

对于多线程执行,我会使用ConcurrentHashMap来维护线程ID和正在执行的场景之间的链接。然后,您可以使用线程ID从步骤中检索正在执行的场景。