Unable to take a screenshot in Selenium

I try to capture a screenshot for each failure and wrote the following code, but this does not work.

public class TestFile { WebDriver driver = new FirefoxDriver(); @Test public void Testone(){ driver.get("http://www.google.com/"); } @AfterMethod(alwaysRun=true) public void catchExceptions(ITestResult result){ System.out.println("result"+result); String methodName = result.getName(); System.out.println(methodName); if(!result.isSuccess()){ try { File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile,new File("C:\\screenshot2.png" )); } catch (IOException e1) { e1.printStackTrace(); } } } } 

This does not work when

File driver scrFile = ((TakesScreenshot)). GetScreenshotAs (OutputType.FILE);


stack trace:

 [TestNG] Running: C:\Documents and Settings\537310\Local Settings\Temp\testng-eclipse-1576306112\testng-customsuite.xml result[TestResult name=Testone status=FAILURE method=TestFile.Testone()[pri:0, instance: com.example.tests.TestFile@1b34126 ] output={null}] FAILED CONFIGURATION: @AfterMethod catchExceptions([TestResult name=Testone status=FAILURE method=TestFile.Testone()[pri:0, instance: com.example.tests.TestFile@1b34126 ] output={null}]) net.sf.cglib.core.CodeGenerationException: java.lang.IllegalAccessException-->Class org.openqa.selenium.remote.Augmenter$CompoundHandler can not access a member of class org.openqa.selenium.firefox.FirefoxDriver with modifiers "protected" at net.sf.cglib.core.ReflectUtils.newInstance(ReflectUtils.java:235) 

import list:

 package com.example.tests; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.remote.Augmenter; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; 
+7
source share
3 answers

The stacktrace package you used is not a stack, but I think the testng log is.
The example you provided really works. I just skipped the test because in @AfterMethod the screenshot is only taken if the test fails: if (! Result.isSuccess ())
Then, when I ran the example again, I got:
java.io.FileNotFoundException: C: \ screenshot2.png (Access denied)
Then I changed the image location to D: where the permissions are correct, and it worked from end to end, I see a screenshot.

Greetings

 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; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; public class TestFile { WebDriver driver = new FirefoxDriver(); @Test public void Testone() { driver.get("http://www.google.com/"); assert false; } @AfterMethod(alwaysRun = true) public void catchExceptions(ITestResult result) { System.out.println("result" + result); String methodName = result.getName(); System.out.println(methodName); if (!result.isSuccess()) { try { File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File("C:\\screenshot2.png")); } catch (IOException e1) { e1.printStackTrace(); } } } } 
+2
source

Hi sinisa229 mihajlovski,

Your script is working correctly. but there is a slight change in your script. If I do not comment on the line "assert false", it gives an error.

+1
source

Try the following:

  WebDriver augmentedDriver = new Augmenter().augment(driver); File screenshot = ((TakesScreenshot)augmentedDriver). getScreenshotAs(OutputType.FILE); 

Instead

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

0
source

All Articles