我在Eclipse下使用IE11和Java。我不在远程系统上运行测试,我也没有使用RDC。此测试在我的本地计算机上运行。
当我尝试拍摄以下屏幕的快照时,Selenium似乎遇到了问题。
这是执行以下代码时的作用:
File scrFile = ((TakesScreenshot) webdr).getScreenshotAs(OutputType.FILE);
这样做大约三次,然后继续下一个陈述。
以下是我在拍摄屏幕截图时调用的实际方法:
public String captureScreenShot() {
String screenShotLocation = System.getProperty("user.dir");
String TCID = GlobalVars.getInstance().getTCID();
WebDriver webdr = GlobalVars.getInstance().getWebdr();
String screenshotDir = GlobalVars.getInstance().getScreenshotDir();
String methodName = getCallingMethod(0);
String screenShotName = null;
// I'm using the test case ID as the directory name where the image will be stored.
if (screenshotDir == null) {
if (TCID.toLowerCase().contains("like")) {
String[] parsedName = TCID.split(" ");
screenshotDir = parsedName[1];
} else {
screenshotDir = TCID;
}
}
try {
File scrFile = ((TakesScreenshot) webdr).getScreenshotAs(OutputType.FILE);
screenShotName = generateUniqueValue().retStringValue + ".png";
String[] pathSections = GlobalVars.getInstance().getLogDir().split("\\\\");
pathSections[pathSections.length-1] = "";
String path = "";
for (int x = 0; x < pathSections.length-1; x++) {
path = path + pathSections[x] + "\\";
}
screenShotLocation = path + "screenshots\\" + screenshotDir +"\\" + screenShotName;
FileUtils.copyFile(scrFile, new File(screenShotLocation));
} catch (IOException e) {
logMessage(MessType.FAIL, "From Common (" + methodName + ") Sorry, Because I received an exception while trying to capture the a screenshot, a screenshot will not be included.", "System Returned: " + e.toString());
}
return screenShotLocation;
}
条件恰好在行:
File scrFile = ((TakesScreenshot) webdr).getScreenshotAs(OutputType.FILE);
GlobalVars是一个单例类,主要是Setters和Getters。这是代码:
/**
* The GlobalVars class is a singleton class that provides the ability to set global variables during the execution of a script.
* @author lgonzalez
* @since Dec 10, 2015
*/
public static class GlobalVars {
private static GlobalVars instance;
public static GlobalVars getInstance() {
if (instance == null) {
instance = new GlobalVars();
}
return instance;
}
private String currentTestCaseID;
private String screenshotDir;
private WebDriver webdr;
private String LogDir;
private BufferedWriter bfWritter;
private FileWriter flWriter;
private LogFileHandler fileHandler;
private int logLevel;
private int passed;
private int failed;
// I create a variable containing the LogHandler class when the singleton class is invoked
private GlobalVars() {
fileHandler = new LogFileHandler();
}
//---------------------------------------------------
// G E T T E R S
//---------------------------------------------------
public BufferedWriter getbfWriter() {
return bfWritter;
}
public FileWriter getflWriter() {
return flWriter;
}
public String getLogDir() {
return LogDir;
}
public LogFileHandler getLogHandler() {
return fileHandler;
}
public int getLogLevel() {
return logLevel;
}
public String getScreenshotDir() {
return screenshotDir;
}
public String getTCID() {
return currentTestCaseID;
}
public WebDriver getWebdr() {
return webdr;
}
public int getPassed() {
return passed;
}
public int getFailed() {
return failed;
}
//---------------------------------------------------
// S E T T E R S
//---------------------------------------------------
public void setbfWriter(BufferedWriter bfwritter) {
this.bfWritter = bfwritter;
}
public void setflWriter(FileWriter flwriter) {
this.flWriter = flwriter;
}
public void setLogDir(String logDir) {
this.LogDir = logDir;
}
public void setLogLevel(int loglevel) {
this.logLevel = loglevel;
}
public void setScreenshotDir(String screenshotDir) {
this.screenshotDir = screenshotDir;
}
public void setTCID(String currentTestCaseID) {
this.currentTestCaseID = currentTestCaseID;
}
public void setWebdr(WebDriver webdr) {
this.webdr = webdr;
}
public void setPassed(int passed) {
this.passed = passed;
}
public void setFailed(int failed) {
this.failed = failed;
}
}
至于FileUtils。此类是作为org.apache.commons.io.FileUtils
的一部分导入的答案 0 :(得分:0)
我无法解决这个具体问题,但我找到了一个更好的解决方案。我使用了Java的Robot类,所以我替换了Selenium的方法:
File scrFile = ((TakesScreenshot) webdr).getScreenshotAs(OutputType.FILE);
使用以下机器人代码:
try {
Robot robot = new Robot();
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
//Create the image
BufferedImage exportImage = robot.createScreenCapture(new Rectangle(0, 0, (int) scrSize.getWidth(), (int) scrSize.getHeight()));
//Get graphics - Get the layer we can actually draw on
Graphics2D imageGraphics = (Graphics2D) exportImage.getGraphics();
//Cleanup after ourselves
imageGraphics.dispose();
screenShotName = generateUniqueValue().retStringValue + ".png";
String[] pathSections = GlobalVars.getInstance().getLogDir().split("\\\\");
pathSections[pathSections.length-1] = "";
String path = "";
for (int x = 0; x < pathSections.length-1; x++) {
path = path + pathSections[x] + "\\";
}
效果更好。