无法在Selenium中截屏
我正在尝试捕获每个故障发生的屏幕截图并编写下面的代码,但这不起作用。
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();
}
}
}
}
这是失败的
文件scrFile =((TakesScreenshot)驱动程序).getScreenshotAs(OutputType.FILE);
堆栈跟踪:
[TestNG] Running:
C:Documents and Settings537310Local SettingsTemptestng-eclipse-1576306112testng-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)
进口清单:
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;
您共享的堆栈跟踪不是堆栈跟踪,但我认为是testng日志。
你提供的例子实际上是有效的。 我只是让测试失败,因为在@AfterMethod中,只有当测试失败时才会执行截图:if(!result.isSuccess())
然后当我再次运行这个例子时,我得到了:
java.io.FileNotFoundException:C: screenshot2.png(访问被拒绝)
然后我改变了图片的位置在D上:权限是正确的,它的工作是端到端的,我可以看到截图。
干杯
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();
}
}
}
}
嗨sinisa229 mihajlovski,
你的脚本工作正常。 但脚本中有轻微的变化。 如果我不会评论该行“assert false”,它会给出错误。
尝试这个 :
WebDriver augmentedDriver = new Augmenter().augment(driver);
File screenshot = ((TakesScreenshot)augmentedDriver).
getScreenshotAs(OutputType.FILE);
代替
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);