在运行时根据方法名称命名屏幕截图

时间:2016-02-04 20:42:40

标签: java selenium selenium-webdriver junit jbehave

在下列情况下有人可以帮助我吗?

我要创建一个使用Selenium Webdriver获取屏幕截图的常用方法,其中屏幕截图的文件名应该更新为我所称的方法的名称。

这就是我现在所拥有的:

创建了一个方法来获取时间戳并将其用于文件名:

public String getTimeStamp() {
    String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
    return timestamp;
}

//  Method to get the Screenshot at any given instance. The Screenshots taken are copied to Screenshots folder under `"build\jbehave\view"`.
public void getScreenShots() throws Exception {
    File srcfile = driver.getScreenshotAs(OutputType.FILE);
    File folder = new File("Screenshots");

    if(folder.exists()){
    FileUtils.copyFile(srcfile, new File("./build/jbehave/view/Screenshots/" + "Screenshot_" + getTimeStamp() + ".png"));
    }else {

        File dir1 = new File("Screenshots");
        dir1.mkdir();
        FileUtils.copyFile(srcfile, new File("./build/jbehave/view/Screenshots/" + "Screenshot_" + getTimeStamp() + ".png"));

    }
    }

我正在寻找一种方法,它可以获取我调用上述getScreenShots()方法的方法的名称,并在运行时将其作为我的文件名而不是时间戳。

3 个答案:

答案 0 :(得分:2)

您可以从当前线程的堆栈跟踪中获取方法名称:

byte[] scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
String filename = Thread.currentThread().getStackTrace()[1].toString();
FileUtils.writeByteArrayToFile(new File(filename), scrFile);

在此示例中,filename是一个执行此片段的方法(在堆栈跟踪中为1)。

答案 1 :(得分:0)

您可以使用this来获取正在运行的测试方法。 然后使用selenium驱动程序获取屏幕截图。

答案 2 :(得分:0)

您应该可以从Thread.currentThread().getStackTrace()获取该方法,但可能存在问题:Javadocs