zoukankan      html  css  js  c++  java
  • sikuli实战记录

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

    1、安装

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

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

         如果没有设置,在运行时,会出现如下提示:Getting the VisionProxy.dll: Can not find dependent libraries

    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无所谓,只是个人习惯了而已。

    2)配置依赖包

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

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

    4)开发脚本

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

    public class App 
    {
        private final static String SIKULI_PIC_PATH = "C:\Users\shifeng\Documents\博客图片\";
        private final static String SEARCH_PIC = "search.png";
        
        public static void main( String[] args )
        {
            Screen s = new Screen();
            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函数的,所以选择导出为Runnable JAR file,并选择launch configuration;Library handling中,选择第二个。

    2)运行jar包

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

           C:jre1.7.0_21injava -Dfile.encoding=utf-8 -jar test.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。或者是为了快速开发测试用例,用于那种短平快的小项目,节约测试用例的开发成本。

  • 相关阅读:
    Mac上的USB存储设备使用痕迹在新版操作系统有所变化
    Beware of the encrypted VM
    A barrier for Mobile Forensics
    Second Space could let suspect play two different roles easily
    Take advantage of Checkra1n to Jailbreak iDevice for App analysis
    Find out "Who" and "Where"
    Where is the clone one and how to extract it?
    Downgrade extraction on phones running Android 7/8/9
    高版本安卓手机的取证未来
    How to extract WeChat chat messages from a smartphone running Android 7.x or above
  • 原文地址:https://www.cnblogs.com/Flint/p/4951703.html
Copyright © 2011-2022 走看看