Java 在运行时基于方法名称命名屏幕截图

Java 在运行时基于方法名称命名屏幕截图,java,selenium,selenium-webdriver,junit,jbehave,Java,Selenium,Selenium Webdriver,Junit,Jbehave,有人能在下面的情况下帮我吗 我必须创建一个使用SeleniumWebDriver获取屏幕截图的通用方法,其中屏幕截图的文件名应该更新为我调用它的方法的名称 这就是我现在拥有的: 创建了获取时间戳并将其用于文件名的方法: public String getTimeStamp() { String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());

有人能在下面的情况下帮我吗

我必须创建一个使用SeleniumWebDriver获取屏幕截图的通用方法,其中屏幕截图的文件名应该更新为我调用它的方法的名称

这就是我现在拥有的:

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

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()
方法的方法的名称,并在运行时将其作为我的文件名,而不是时间戳。

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

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

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

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

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

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

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

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

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


在本例中,
文件名
是一个方法,它执行这个片段(它在堆栈跟踪中是1)。

这是否用于测试?如果是,你的意思是测试方法的名称吗?使用JUnit会很容易,因为@Gavin:我编辑了我的帖子,让它更清楚。任何帮助都将不胜感激。@el_tomato:我正在使用JBehave来编写代码并按要求运行它JUnit@el_tomato链接了上面的正确答案。在junit中,您使用Testname规则。这是否在测试中使用?如果是,你的意思是测试方法的名称吗?使用JUnit会很容易,因为@Gavin:我编辑了我的帖子,让它更清楚。任何帮助都将不胜感激。@el_tomato:我正在使用JBehave来编写代码并按要求运行它JUnit@el_tomato链接了上面的正确答案。在junit中,您使用Testname规则;我正在将文件类型转换为.png,同时复制到特定路径。你能告诉我是否可以用你提到的方法完成吗?只需使用File.renameTo方法Hi Alex,谢谢更新。但是,在您共享的链接中提到的renameTo方法指出,重命名操作可能无法将文件从一个文件系统移动到另一个文件系统。您能添加代码将文件(本例中为文件名)复制到所需位置吗?我使用以下方法获取屏幕截图:file srcfile=driver.getScreenshotAs(OutputType.file);我正在将文件类型转换为.png,同时复制到特定路径。你能告诉我是否可以用你提到的方法完成吗?只需使用File.renameTo方法Hi Alex,谢谢更新。但是,在您共享的链接中提到的renameTo方法指出,重命名操作可能无法将文件从一个文件系统移动到另一个文件系统。您能添加代码将文件(本例中为文件名)复制到所需位置吗?我现在只学习Selenium和JBehave,对Java知之甚少。你能解释一下如果我们使用Thread.currentThread().getStackTrace(),会出现什么问题吗?我现在只学习Selenium和JBehave,对Java知之甚少。你能解释一下如果我们使用Thread.currentThread().getStackTrace(),会出现什么问题吗?