Sikuli-IDE 用起来方便,但是用到实际项目中还是有局限性的,Sikuli 提供了 Sikuli-Script 的 jar 包,在 Sikuli-X 的安装目录下,这样就可以在

eclipse 中使用 JAVA 编写代码了,并用 Sikuli-Script 和 selenium 完美结合使用。

首先新建一个 Sikuli 的项目,导入 Sikuli-Script.jar 包,然后在项目下新建一个 CaleTest.java,并且在项目文件下新建一个存放图片的文件

夹 PNG,在 PNG 文件夹下对应 CaleTest.java 建一个同名的文件夹存放对应使用的图片(便于维护)。

然后就开始敲代码了,代码如下:

package com.sikuli;  

import java.io.IOException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import org.sikuli.script.FindFailed;  
import org.sikuli.script.Screen;  

public class CaleTest {  

    public static void main(String[] args) throws IOException, FindFailed {  

        Process app= null;      //新建一个进程  
        String path ="E:\\workspace\\Sikuli\\PNG\\CaleTest\\";   //图片路径  
        String strat = null;  
        String end =null;  

        app=Runtime.getRuntime().exec("calc.exe");  //打开计算器  

        Screen scr = new Screen();   //新建一个操作屏幕  

        //获取时间,打印开始日志         
        Date now = new Date();   
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");        
        strat = dateFormat.format(now);  
        System.out.println("strat"+"-------"+strat);  

        scr.wait(path+"1481855580087.png", 5);    //等待元素出现,超时5秒  
        scr.click(path+"1481855580087.png");        //点击元素  

        scr.wait(path+"1481855635062.png", 5);  
        scr.click(path+"1481855635062.png");  

        scr.wait(path+"1481855675892.png", 5);  
        scr.click(path+"1481855675892.png");  

        scr.wait(path+"1481855716969.png", 5);  
        scr.click(path+"1481855716969.png");  

        scr.wait(path+"1481855763519.png", 5);  
        scr.click(path+"1481855763519.png");  

        scr.wait(path+"1481855820477.png", 5);  
        scr.click(path+"1481855820477.png");  

        Date now1 = new Date();   
        SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");       
        end = dateFormat1.format(now1);       
        System.out.println("end"+"-------"+end);          


        if (scr.exists(path+"66.png", 1000) != null){  
            System.out.println("测试通过");  
            app.destroy();       //关闭计算器进程    
        }  
        else{  
            System.out.println("测试失败");  
            app.destroy();        
        }  
    }  
}  

运行一下,用时 9 秒

感觉是不是有点慢,因为是在整个电脑屏幕中识别,下面我们把识别范围缩小下,使用 Screen 中的 setRect 方法设置识别区域

app=Runtime.getRuntime().exec("calc.exe");  //打开计算器  

Screen scr = new Screen();   //新建一个操作屏幕  

scr.setRect(596,325,220,315);    //设定识别区域

再次运行看下时间,用时 5 秒,少了差不多一半,当然了这个也是有问题的,就是程序不在这个区域就不行了


↙↙↙阅读原文可查看相关链接,并与作者交流