《sikuli入门教程学习.ppt》由会员分享,可在线阅读,更多相关《sikuli入门教程学习.ppt(35页珍藏版)》请在三一办公上搜索。
1、Sikuli调研分享,李俊薇,索引,1、简介2、下载和安装3、示例4、疑问5、在java程序中使用sikuli6、优缺点7、技巧和附录,简介,Sikuli(在墨西哥维乔印第安人的语言里是”上帝之眼”的意思)是由美国麻省理工学院开发的一种最新编程技术,使得编程人员可以使用截图替代代码,从而简化代码的编写流程。从它研究方向上看,是一种编程技术,但是该技术还可以用于进行大规模的程序测试,脚本程序编写使用的是python语言。编程而非录制 一般的工具是录制脚本,而sikuli不存在录制的问题,它需要自己手动编写程序来完成测试。资料来源:,Sikuli脚本示例图(创建新账户的一个流程),如果存在创建账户
2、按钮入口 则点击该按钮入口否则 点击菜单“邮箱”点击“新建邮箱账户”选项点击输入邮箱地址编辑区输入邮箱地址点击输入密码编辑区输入密码点击下一步点击创建。,下载和安装,下载:(最新版本是)安装(要有java环境)启动直接使用安装目录下的Sikuli-IDE.exe启动。使用过程中,遇到过直接用exe启动后可能无法正常使用的现象(在vista和win7下面遇到过,可能某些包无法加载,具体原因不知),网上开发人员的建议是使用安装目录下的Sikuli-IDE.bat,双击后也会启动sikuli的IDE界面,然后可以正常使用。使用详细资料参考地址(全英文):http:/sikuli.org/trac/w
3、iki/reference-0.10#Howtousethisdocument,主界面,程序保存,编写完程序后,用save as保存,会生成一个.sikuli的文件夹。,其中:.py是phthon脚本.png是编写脚本过程中执行的截图.html能让脚本在网络上实现共享,注意:此处程序本身好像有bug,保存路径不能含有中文字符,否则会报错,几个例子函数,1、click(对象截图)点击某个对象2、type(可输入对象截图,字符串)像某个可输入对象输入字符串3、rightClick(对象截图)在某个对象上点击右键4、快捷键ctrl+shift+2启动抓图,右键取消5、wait(时间s)等待多少s,一
4、个例子程序,用例:闪电邮中创建一个用户名和密码均正确的账户流程:找到创建入口,点击输入用户名和密码,点击下一步选择账户模式,点下一步,点创建按钮等待同步通讯录和收信完成检查是否创建成功(判断依据是左边账户列表是否有该账户),Sikuli程序,account=psw=ljwtestelse:type(account)type(psw)print(the account is create ok!),保存后的.py程序脚本,疑问:靠图像识别可靠吗?,靠图像来对对象进行识别,必然有很多不足之处,但是sikuli里面提供了similarity的调整,在一定程度上弥补了这个缺点(但也不是绝对的)实际调研
5、情况:脚本01是在xp下录制的一段脚本,调整相似度和识别对象个数后,在默认、国风、虎年三套皮肤下均可运行通过。增加wait()等待后,在vista下的默认、国风、虎年三套皮肤下也可以使用。酷黑皮肤差异较大,无法识别。需要研究的是:1、相似度调整到多少比较合适2、识别对象个数调整到多少比较合适3、等待时间设置为多少比较合适,相似度非常小的时候能匹配出较多对象,注意颜色(红色表示最匹配的),相似度调高一些的时候能匹配个数减少,相似度较高时匹配出最相似(想要的)对象,疑问:如何知道我点击的是哪里?,在java程序中也可以使用sikuli,Sikuli script的核心是用java编写的,所以在ja
6、va代码中可以引用sikuli script包然后编写自己的测试程序。,继续查看如何在java程序中使用,跳过,看sikuli优缺点,Java中使用sikuli-script的步骤,1、获取sikuli-script.jar 在sikuli的安装目录下面有一个sikuli-script.jar包。2、安装OpenCV Sikuli script使用OpenCV作为图形识别引擎。如果是windows系统,可以直接配置环境变量,在path路径中加入“sikuli安装路径/tmplib”,windows系统能自动的找到OpenCV的dll。在mac和linux下比较复杂,需要自己安装OpenCV(没
7、有研究),Java中使用sikuli-script的步骤,3、在java项目中引入sikuli-script包 在eclipse中新建一个java项目,然后引入4.1中获取的sikuli-script.jar包。项目建立成功后,可以在项目目录中看到这个包。,Java中使用sikuli-script的步骤,4、引用引入的包 在自己的程序中引入需要的sikuli classes,用“import edu.mit.csail.uid.*”,或者引入一些自己需要的类,可能会用到一些Regin、Screen、SikuliScript类。5、程序编写,import edu.mit.csail.uid.*;
8、import edu.mit.csail.uid.Win32Util;public class TestSikuli public static void main(String args)Screen s=new Screen(100);Win32Util app=new Win32Util();/启动程序需要用到此类 int openapp=app.openApp(D:Program FilesNetease网易闪电邮Start.exe);/(小bug)此句不能正确执行,貌似对含有汉字的路径支持不好 int openapp=app.openApp(D:Program FileseMulee
9、mule.exe);/此句可以正常执行,需要全英文字符的路径 if(openapp=0)System.out.print(app starts ok!);else System.out.print(app starts failed!);trys.click(img/02.png,0);/点击增加账户的加号按钮s.click(img/05.png,0);/点击输入用户名的编辑框s.type(null,0);/输入用户名s.click(img/06.png,0);/点击输入密码的编辑框s.type(null,ljwtest,0);/输入密码/trycatch(Exception e)e.prin
10、tStackTrace();/catch以上的.png图片都是保存在项目工程的img下的图片(可以用sikuli截取的图复制过去,然后自己可重命名),优点,1、整体上sikuli小巧、便捷、容易上手。2、sikuli脚本可以不经过API的编译器直接自动化搜索到任何你能在屏幕上看到的东西3、对各种程序都适合4、不存在标准控件和非标准控件的问题5、相对位置概念较小,要求不高(但是对象本身尺寸有影响)6、一次编码,多次运行(基于java的)7、jython和java的支持,用编程的方式比较容易扩展,缺点,1、图片的分辨率、色彩、尺寸、唯一性对程序的影响(如果有两个相同的,无法区分具体哪一个)2、si
11、kuli本身还不完善(处于开发、升级阶段)还有很多程序bug,能否继续发展还是未知数3、只认识当前活动的图标(只有当前桌面有才行)4、用例组织方面有提供但是目前有bug,还未调研尝试便利性5、截图的话,脚本存储占用空间较大6、相似度调整需要手动一个个的调整,工作量大7、ljw200901t和ljw200902t的区别(不太容易区别出来,可能需要调整到similarity=1.0才行,但这样的话可移植性就差了)8、目前还不适合设计成一种测试框架(有用例组织功能,但是目前有bug,暂时没有用过)9、测试报告的生成,直接用message的话比较弱,需要用jython编程实现可能会强大一些(还未调研)
12、,增加图片识别时间,wait()的使用 新建一个自定义邮件夹后输入“test”,有wait()后,才能正常表现。程序代码:,程序移植 点击查看原始代码01 在xp下写的一个脚本,移植到vista下后,设置的皮肤都一样,但是可能会抛出无法识别图像的异常,某些时候可能是因为等待时间不够久,程序来不及识别,可以用wait()增加程序查找对象的时间。代码01是在xp下录制的一段脚本,闪电邮的默认、国风、虎年三套皮肤均能够正常运行。移植到vista下的默认皮肤下后,抛出一些无法识别图像的异常,但是在每个动作后增加了wait(1)等待1秒后,脚本可以正常执行了。(等待时间可根据实际情况自由设定)个人感觉应
13、该是移植到vista下后,某些图片属性需要时间识别确认,如果没有等待时间,可能没有足够时间识别。,附录参考资料,Sikuli官方网站Sikuli详细的documentationhttp:/sikuli.org/trac/wiki/reference-0.10#HowtousethisdocumentPython学习地址(英文):更多sikuli类、函数使用可以参考java doc http:/sikuli.org/documentation.shtml#/trac/wiki/How%20to%20use%20Sikuli%20Script%20in%20your%20JAVA%20progra
14、ms?(如果要在java program中使用,就要详细看这个java doc文档了),Sikuli的系统设计架构,参考地址:http:/sikuli.org/documentation.shtml#/trac/wiki/SystemDesign,其他示例,1、获取popo表情和动漫表情增加wait()等待时间后,能判断到图片是否存在。疑问:是否是根据某个时间内判断到的某一帧来识别的?不确定Wait(2)程序运行结果,弹出“did not get the img”Wait(4)程序运行结果,弹出“get img”,2、动漫表情 和exits()之间不能wait(),否则识别不到。,3、选择文件(单选、和ctrl、shift组合多选)mouseDown(button)mouseUp(button)keyDown(key)keyUp(key),结束语,部分内容是根据网络的英文翻译而来,可能有不准确的地方,如有错误,可告之!更多函数功能需要阅读技术手册和java的结合使用要阅读java doc Thanks!,