2016-04-26 10 views
1

Ich arbeite gerade an einem Automatisierungsprojekt, ich habe dieses einfache Programm erstellt, um Testinformationen zu melden und Screenshots zu machen.Automation screenshot

package ReportTest; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.testng.Assert; 
import org.testng.ITestResult; 
import org.testng.annotations.AfterMethod; 
import org.testng.annotations.Test; 
import com.relevantcodes.extentreports.ExtentReports; 
import com.relevantcodes.extentreports.ExtentTest; 
import com.relevantcodes.extentreports.LogStatus; 

import ReportTest.Utitlity; 
public class ReportTest { 


ExtentReports report; 
ExtentTest logger; 
WebDriver driver; 


@Test 
public void verifyBlogTitle() 
{ 

    report =new ExtentReports("C:\\Users\\reganc3\\desktop\\report\\LearnAutomation.html"); 


    logger=report.startTest("VerifyBlogTitle"); 

    driver = new FirefoxDriver(); 

    driver.manage().window().maximize(); 

    logger.log(LogStatus.INFO, "Browser started"); 

    driver.get("http://www.learn-automation.com"); 

    logger.log(LogStatus.INFO, "Application is up and running"); 

    String title = driver.getTitle(); 

    Assert.assertTrue(title.contains("Selenium")); 

    logger.log(LogStatus.PASS, "Title Verified"); 
} 

@AfterMethod 
public void tearDown(ITestResult result) 
{ 
    if(result.getStatus()==ITestResult.FAILURE) 
    { 

    String screenshot_path = Utitlity.captureScreenshot(driver, result.getName()); 
    logger.log(LogStatus.FAIL, "TitleVerification", screenshot_path); 

    } 

    report.endTest(logger); 
    report.flush(); 

    driver.get("C:\\Users\\reganc3\\desktop\\report\\LearnAutomation.html"); 
} 
} 

Hier ist meine Utilitys Klasse, die den Screenshot

package ReportTest; 



import java.io.File; 

import org.apache.commons.io.FileUtils; 
import org.openqa.selenium.OutputType; 
import org.openqa.selenium.TakesScreenshot; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebDriverException; 
import java.util.*; 

public class Utitlity { 



public static String captureScreenshot(WebDriver driver, String screenshotName) 
{ 
    try 
    { 
     TakesScreenshot ts=(TakesScreenshot)driver; 

     File source=ts.getScreenshotAs(OutputType.FILE); 

     String dest = " C:\\Users\\reganc3\\desktop\\ " +screenshotName+ ".png"; 

     File destination=new File(dest); 

     FileUtils.copyFile(source, destination); 

     System.out.println("Screenshot taken"); 

     return dest; 

    } 
    catch (Exception e) 
    { 
     System.out.println("Exception while taking screenshot "+e.getMessage()); 
     return e.getMessage(); 
    } 

} 
} 

Ich erhalte die folgenden Fehler

** Ausnahme während der Einnahme Screenshot null

ich zu nehmen aufgerufen wird Ich bin ziemlich neu bei Selenium und TestNG, also suche ich im Grunde nach jemandem, der etwas Licht in diese Richtung bringt und mir ein paar Hinweise in die richtige Richtung gibt und um zu verstehen, was ac ist passiert mit meinem Code, der diesen Fehler verursacht.

Vielen Dank Im Voraus.

+0

sind Sie sicher, dass der Pfad, den Sie in der captureScreenshot zur Verfügung gestellt haben gültige –

+0

Hallo @rajNishKuMar ist es diese Zeile Sie "String dest =" C bedeuten, ist: \\ Users \\ reganc3 \\ Desktop \\ "+ screenshotName + ".png"; "Ich dachte mir, dass diese Codezeile nur darauf hinweist, wo der Screenshot gespeichert wird, sobald er erstellt wurde? – colin

+0

auch, um Ihnen zu helfen gibt es große Video, wie man mit Ausdehnung Reports arbeitet https://www.youtube.com/watch?v=dBj7pxhZXhY –

Antwort

0

ich die falsche Version von ExtentReport für die Verwendung von Code, den ich hatte.

Der Code, den ich verwendete, war für eine neuere aktuelle Version von ExtentReport und die Maven-Abhängigkeit, die ich hatte, zeigte auf eine ältere Version. Der Code selbst funktionierte perfekt, als ich die Abhängigkeit auf die neueste Version aktualisierte.

0

Ich bin derzeit mit dieser Methode Screenshots in meinen Tests zu nehmen:

import java.io.File; 
import java.io.IOException; 
import org.apache.commons.io.FileUtils; 
import org.openqa.selenium.OutputType; 
import org.openqa.selenium.TakesScreenshot; 
import org.openqa.selenium.WebDriver; 

public void takeScreenShot(WebDriver driver, String methodName) { 
     File screenshotFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
      try { 
       FileUtils.copyFile(screenshotFile,new 
File("Screenshots\\"+methodName+" "+GetTimeStampValue()+".png")); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
     } 

und diese Methode einen Zeitstempel zu erhalten:

import java.io.IOException; 
import java.util.Calendar; 
import java.util.Date; 

public String GetTimeStampValue()throws IOException{ 
    Calendar cal = Calendar.getInstance();  
    Date time=cal.getTime(); 
    String timestamp=time.toString(); 
    String systime=timestamp.replace(":", "-"); 
    return systime; 
} 
0
Robot r=new Robot(); 
r.keyPress(KeyEvent.VK_PRINTSCREEN); 
r.keyRelease(KeyEvent.VK_PRINTSCREEN);