Chrome 的 Selenium webdriver 未在指定路径中保存屏幕截图
Selenium webdriver for Chrome is not saving screenshots in indicated path
public void afterTestMethod(TestContext testContext) throws Exception {
if (testContext.getTestException() == null) {
return;
}
File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
String testName = testContext.getTestClass().getSimpleName();
String methodName = testContext.getTestMethod().getName();
Files.copy(screenshot.toPath(),
Paths.get("C:\Users\user\git\ufe-360\UFE-TESTS\screenshots\test.png", testName + "_" + methodName + "_" + screenshot.getName()));
}
}
我的项目中有上面的代码,可以在测试执行后截取屏幕截图。
我怀疑我的代码中缺少某些东西。当我 运行 时,每个测试屏幕截图都不会保存在指定的路径中。我没有任何错误。每个测试都正确执行但没有屏幕截图。
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.OutputType;
private static void takeScreenshot() throws IOException, InterruptedException {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "chromedriver");
driver = new ChromeDriver();
driver.get("https://www.google.com/");
Thread.sleep(2);
TakesScreenshot scrShot =((TakesScreenshot)driver);
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
File DestFile=new File("/home/XXXX/Desktop/test.png");
FileUtils.copyFile(SrcFile, DestFile);
}
以上代码将打开 "google.com",它会截取屏幕截图并将其存储在桌面上,因为我已经提供了桌面路径。
在你的方法的开头,你有代码在测试没有 errors/exceptions 时不会让屏幕截图完成。所以你说 "Each test executes correctly but without screenshot." 并且这是意料之中的。
来自一个问题:
if (testContext.getTestException() == null) {
return;
}
来自您的补充评论
if (ITestResult.FAILURE == result.getStatus()) {
你的逻辑是这样的:如果测试失败,就在失败的瞬间截图。尝试修改您的测试代码使其失败,您应该会在给定路径中看到您的屏幕截图。如果您想实现一些不同的逻辑,例如 "make a screenshot at every test step",请更正一个问题,因为它会有一些不同的解决方案。
如果您只是删除 if
逻辑,您的代码将在测试的最后一步后生成屏幕截图。 (但我不确定这样的屏幕截图是否非常有用,因为通常屏幕截图用于帮助分析 "what went wrong" 而您的逻辑完美地涵盖了它)
public void afterTestMethod(TestContext testContext) throws Exception {
if (testContext.getTestException() == null) {
return;
}
File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
String testName = testContext.getTestClass().getSimpleName();
String methodName = testContext.getTestMethod().getName();
Files.copy(screenshot.toPath(),
Paths.get("C:\Users\user\git\ufe-360\UFE-TESTS\screenshots\test.png", testName + "_" + methodName + "_" + screenshot.getName()));
}
}
我的项目中有上面的代码,可以在测试执行后截取屏幕截图。 我怀疑我的代码中缺少某些东西。当我 运行 时,每个测试屏幕截图都不会保存在指定的路径中。我没有任何错误。每个测试都正确执行但没有屏幕截图。
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.OutputType;
private static void takeScreenshot() throws IOException, InterruptedException {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "chromedriver");
driver = new ChromeDriver();
driver.get("https://www.google.com/");
Thread.sleep(2);
TakesScreenshot scrShot =((TakesScreenshot)driver);
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
File DestFile=new File("/home/XXXX/Desktop/test.png");
FileUtils.copyFile(SrcFile, DestFile);
}
以上代码将打开 "google.com",它会截取屏幕截图并将其存储在桌面上,因为我已经提供了桌面路径。
在你的方法的开头,你有代码在测试没有 errors/exceptions 时不会让屏幕截图完成。所以你说 "Each test executes correctly but without screenshot." 并且这是意料之中的。 来自一个问题:
if (testContext.getTestException() == null) {
return;
}
来自您的补充评论
if (ITestResult.FAILURE == result.getStatus()) {
你的逻辑是这样的:如果测试失败,就在失败的瞬间截图。尝试修改您的测试代码使其失败,您应该会在给定路径中看到您的屏幕截图。如果您想实现一些不同的逻辑,例如 "make a screenshot at every test step",请更正一个问题,因为它会有一些不同的解决方案。
如果您只是删除 if
逻辑,您的代码将在测试的最后一步后生成屏幕截图。 (但我不确定这样的屏幕截图是否非常有用,因为通常屏幕截图用于帮助分析 "what went wrong" 而您的逻辑完美地涵盖了它)