sikuli实战记录

摘要:
可在sikulix的官网下载,戳我。2)在PATH中添加sikulix下libs路径。由于目前sikuli只支持32位的jre,如果使用64位,在运行时,会出现问题:Win32Util.dll:Can'tload32-bit.dllonaAMD64bitplatform。3)支持java、python等多种语言,可以和selenium无缝对接,只需导入sikuli的脚本jar包即可。综上,只有被selenium逼得实在没招了,我才会去用sikuli。

最近,为了解放运营人力,需要对某国企的系统进行自动化操作。该系统使用的是https,需要加载证书,而且非得用IE才行,firefox无法正常的加载证书。而selenium启动的IE是纯净的,不会加载任何东西。关于selenium如何能够支持对https的系统进行测试,这个还需要研究。而对这个系统进行自动化操作,只是个权宜之计,所以不打算在这上面浪费过多的成本,前段时间对sikuli也做了一些了解,这回就考虑使用sikuli迅速开发一个脚本,顺便进行一次实战的检查。

1、安装

1)下载sikuli的IDE——sikuliX,并安装。可在sikulix的官网下载,戳我。

2)在PATH中添加sikulix下libs路径。

如果没有设置,在运行时,会出现如下提示:GettingtheVisionProxy.dll:Cannotfinddependentlibraries

3)准备好一个32位的jre 1.7。

由于目前sikuli只支持32位的jre,如果使用64位,在运行时,会出现问题:Win32Util.dll: Can't load 32-bit .dll on a AMD 64 bit platform。

2、开发

1)在eclipse中建一个marven工程。因为最后是准备产出一个jar包来执行,所以选择quickstart。

是否marven无所谓,只是个人习惯了而已。

sikuli实战记录第1张

2)配置依赖包

由于marven的托管库中没有sikuli-script,所以需要使用sikulix中的sikuli-script.jar,加入marven的本地仓库,或者导入buildpath中。

3)修改工程的jre为32位的jre 1.7。

4)开发脚本

功能:在博客园首页右上角的找找看中输入“你好”,然后点击找找看,进行搜索。Java中的示例如下:

public classApp 
{
    private final static String SIKULI_PIC_PATH = "C:\Users\shifeng\Documents\博客图片\";
    private final static String SEARCH_PIC = "search.png";
    
    public static voidmain( String[] args )
    {
        Screen s = newScreen();
        Pattern search = new Pattern(SIKULI_PIC_PATH +SEARCH_PIC);
        try{
            s.click(search.targetOffset(-148, 3));
            s.paste("你好");
            s.click(search.targetOffset(117, 3));
        } catch(FindFailed e) {
            //TODO Auto-generated catch block
e.printStackTrace();
        }
    }
}

其实sikuli的逻辑很简单,就是初始化一个屏幕,然后匹配图片,对图片区域进行操作。各种花样就是在如何匹配和如何操作。

实战中我碰到的有意思的事情,主要有三点:

a、如果需要指定点击的具体坐标,需要使用click(patten.targetoffset(x, y))。

b、如果需要输入中文,type()是没有办法的,需要使用paste()。

c、当无法使用pagedown或pageup按键滚动页时,通过s.click(Key.TAB),即模拟tab键来切换控件,达到滚动的目的。

3、运行

1)打jar包。

这个比较简单。因为我是有main函数的,所以选择导出为RunnableJARfile,并选择launch configuration;Libraryhandling中,选择第二个。

2)运行jar包

通过以下命令运行到处的jar包:

C:jre1.7.0_21injava -Dfile.encoding=utf-8 -jartest.jar

我没有去修改java的环境变量,所以指定了java的路径。

在命令中添加参数 -Dfile.encoding=utf-8,是因为工程的编码格式utf-8,如果没有指定运行时的编码格式,会导致在sikuli录入中文时,录入乱码。命令中的“-D”用来设置系统变量值。

另外在运行时,曾遇到过“找不到主清单属性”的问题。这是由于导出时没有指定接口类。在jar包中的META-INF中,有一个MANIFEST.MF。该文件为一个清单文件,用于记录配置信息。按道理,eclipse导出时,是需要指定launch configuration,不应该出现这个问题。不过后来问题一直没有复现过,所以也无法追查了。这里只是记录下当时的处理过程。

在我的jar包中,包含如下属性

Manifest-Version:用来定义manifest文件的版本

Rsrc-Class-Path:没有查询到具体的含义,但猜测用于设置依赖包的路径

Class-Path:应用程序或者类装载器使用该值来构建内部的类搜索路径

Rsrc-Main-Class:指定入口类,应该是eclipse自定义的参数

Main-Class:原始的指定入口类的参数,一般用eclipse导出时,会被指定为org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

解决这个问题的方法,是在Rsrc-Main-Class添加入口类的class文件,注意不能带.class后缀。

4、sikuli的优势和限制

优势

1)在web测试中,解决了selenium无法操作windows ui的问题,例如下载、上传时选择文件,或者不同frame中用div模拟的弹窗,识别起来麻烦得很。

2)上手非常快,也可以用sikuli的IDE开发,图片化的方式,简单易懂,可读性好。

3)支持java、python等多种语言,可以和selenium无缝对接,只需导入sikuli的脚本jar包即可。

限制

1)成也图片,败也图片。图片匹配区域的大小和样式不能有丝毫变化,所以如果屏幕分辨率、浏览器缩放等,导致图片区域的大小发生变化,就不要想通用,维护起来会相当痛苦。不同的机器执行,可能得维护多套图片。所以,还是慎用。

综上,只有被selenium逼得实在没招了,我才会去用sikuli。或者是为了快速开发测试用例,用于那种短平快的小项目,节约测试用例的开发成本。

免责声明:文章转载自《sikuli实战记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安卓手机无法使用adb导出文件C语言实现简单线程池(转-Newerth)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mac下的UI自动化测试 (二)

下面讲一下Sikuli的重要概念,就是region,所谓region就是Sikuli在进行图像识别的时候的一个区域,默认是整个屏幕。 当然,如果region选得太大的话,并且UI上存在相似的控件,那么就会造成图像识别的错误。而且region选得过大也会使得代码运行速度下降。 我在实际应用中,region选的是屏幕中间的工作区域,也就是除了最上方的globa...

sikuli简介

简介 Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术。它与我们常用的自动化测试技术(工具)有很大的区别。 当你看到上图sikuli的脚本时,一定会惊呼,这样都可以~!脚本加截图~~~ OK ,在惊讶过后,我们一起来大体的了解一下这个技术。 什么是Sikuli? Sikuli脚本自动化,你在屏幕上看到的任何东西。它使用图像识别...