2016-02-04 5 views
0

Может ли кто-нибудь помочь мне в следующей ситуации?Именование скриншота, основанного на имени метода во время выполнения

Я должен создать общий метод для получения скриншотов с помощью 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(), и иметь его как имя моего файла во время выполнения, а не иметь отметки времени.

+0

Используется ли это в тесте? Если да, то вы имеете в виду имя метода тестирования? – Gavin

+1

Использование JUnit было бы легко, как [здесь] (http://stackoverflow.com/questions/473401/get-name-of-currently-executing-test-in-junit-4) – elTomato

+0

@Gavin: Я отредактировал мой пост, чтобы сделать его более понятным. Любая помощь будет высоко оценен. –

ответ

0

Вы можете использовать this, чтобы получить метод текущего теста. И затем используйте драйвер selenium, чтобы получить снимок экрана.

0

Вы должны иметь возможность получить метод от Thread.currentThread().getStackTrace(), но могут быть проблемы: Javadocs.

+0

Я просто изучаю Selenium и JBehave теперь с небольшими знаниями на Java. Не могли бы вы объяснить мне, какие проблемы могут поддержать, если мы используем Thread.currentThread(). GetStackTrace()? –

2

Вы можете получить имя метода из трассировки стека из текущего потока:

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

В этом примере filename представляет собой метод, который выполняет этот фрагмент (это 1 в трассировки стека).

+0

Я использую метод ниже, чтобы получить скриншот: Файл srcfile = driver.getScreenshotAs (OutputType.FILE); Я конвертирую тип файла в .png при копировании на определенный путь. Не могли бы вы рассказать мне, можно ли это сделать в методе, который вы упомянули? –

+0

просто используйте File.renameTo метод https://docs.oracle.com/javase/7/docs/api/java/io/File.html#renameTo(java.io.File) –

+0

Привет, Алекс, спасибо за обновления. Но метод renameTo, упомянутый в указанной вами ссылке, указывает, что операция переименования не сможет переместить файл из одной файловой системы в другую. Не могли бы вы добавить этот код, который можно использовать для копирования файла (имя файла в этом случае) в нужное место? –