как cделать скриншоты ошибок с помощью JAva

всем привет!!!

использую связку selenium +testNg +ant

 у меня есть

try catch() block

try{

            Assert.assertEquals("http://vinnica.ria.ua/", d1.getCurrentUrl(), "error");
        Assert.assertEquals("RIA.ua - Объяв222ления Винница, бесплатные объявления и частные объявления Винницы - доска объявлений бесплатно в Виннице.", d1.getTitle(), "error title");
       }

catch(Throwable t){


             APP_LOGS.debug("Error Test_negative");
            TestBase.capturescreenshot("RegisterTest_negative");        

                                          }

и у меня есть capturescreenshot метод, который унаследуется от TestBase класса
-------------------------------------------------------
public static void capturescreenshot(String fileName) {
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    try {
        FileUtils.copyFile(scrFile, new File(System.getProperty("user.dir")+"\\screenshots\\"+fileName+".jpg"));
    } catch (IOException e) {
     
        e.printStackTrace();
    }      
   
}
-----------------------------------------------------------
screenshotPath=/home/msks/eclipse/worspaceJava/Core_Ria/screenshots

in config.properties
 
вот и после выполнения кода в консоле видим :

FAILED: testcaseB2
java.lang.NullPointerException
    at com.qtpselenium.base.TestBase.capturescreenshot(TestBase.java:260)
    at com.qtpselenium.suiteB.TestCase_B2.testcaseB2(TestCase_B2.java:61)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
 
 
потом пробывал пройти код в дебаг prospectivity

java отстанавливается на строчке
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

помогите, подскажите!!!

 

@AfterMethod
public void setScreenshot(ITestResult result) {
if (!result.isSuccess()) {
try {
WebDriver returned = new Augmenter().augment(webDriver);
if (returned != null) {
File f = ((TakesScreenshot) returned)
.getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(f, new File(SCREENSHOT_FOLDER
+ result.getName() + SCREENSHOT_FORMAT));
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (ScreenshotException se) {
se.printStackTrace();
}
}
 
if (webDriver != null) {
webDriver.quit();
}
}

По всей видимости ссылка на драйвер куда-то потерялась. Вы уверены, что класс с методом снятия скринов имеет доступ к инстансу драйвера?

И еще один момент... Какой драйвер используете? Для RWD ваш вариант не прокатит.

            if (driver.getClass().equals(RemoteWebDriver.class)) {
                scrFile = ((TakesScreenshot) new Augmenter().augment(driver)).getScreenshotAs(OutputType.FILE);
            } else {
                scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            }

Да, и кстати такая верификация assert'ами не выдаст нужный вам результат в случае, когда, к примеру, 2 условия будут неверными. Первый фейл assert'a уйдет в catch и вы никогда не узнаете результат второго. Порекомендовал бы реализацию софт ассертов. Где-то на форуме вроде уже обсуждалось.

по поводу 2 условий согласен !!!

не совсем  понял про софт ассерти
 

нужен готовий проект чтоби посмотреть и сравнить

TestNG - готовый проект, содержащий класс SoftAssert, складирующий все фейлы ассертов в контейнер, который выплюнет все это дело в 1 эксепшене при вызове определенного метода.