Sikuli框架在出現異常時,沒有做出一些好的處理,比如截圖,打印日誌,還有對程序的回收,我們可以通過java中的方法對Sikuli進行封裝一下,實現這些功能,好了,看如下代碼
package com.sikuli;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.sikuli.script.Screen;
public class SikuliElWait {
/****************************************************************
* 對屏幕進行拍照
*
****************************************************************/
public static void snapShot(String path) throws Exception {
String imaFormat ="png";
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
String fName = path +"eImage/";
BufferedImage screenshot = (new Robot()).createScreenCapture(new
Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight()));
File folder =new File(fName);
if (!folder .exists() && !folder .isDirectory()) {
folder.mkdir();
}
String name=fName+"err."+imaFormat;
File f = new File(name);
//將screenshot對象寫入圖像文件
ImageIO.write(screenshot, imaFormat, f);
}
/****************************************************************
* 等待元素出現,如果元素有異常,進行當前頁面截圖並關閉應用程序
*
****************************************************************/
public static void waitEl(Screen scr,String className,String path,String ima,double time,Process app) throws Exception{
Logger log = LogManager.getLogger(className);
DOMConfigurator.configure("log4j.xml");
try {
scr.wait(path+ima, time);
log.info("元素存在");
} catch (Exception e) {
SikuliElWait.snapShot(path);
log.info("元素不存在");
app.destroy();
throw(e);
}
}
}