SikuliX:基于图像识别的自动化软件
随着科技的不断进步,自动化测试和操作逐渐成为提升工作效率的重要手段。SikuliX,作为一款开源的自动化软件,以其独特的图像识别技术在自动化领域中占据了重要地位。本文将为大家介绍SikuliX软件的核心特点、功能以及应用场景。
什么是SikuliX?
SikuliX是一款开源的图像识别自动化软件,基于视觉进行自动化操作。它通过截图捕捉屏幕上的图像,然后根据这些图像执行一系列操作。SikuliX的核心优势是图像识别,即便没有明确的元素标识,SikuliX也可以识别并与屏幕上的图形进行交互,极大地提升了自动化操作的灵活性。
SikuliX的核心特点
图像识别技术
SikuliX的最大特点是图像识别技术。用户可以通过截图来识别并定位屏幕上的元素,系统通过匹配图像来进行自动化操作。这使得SikuliX能够应对那些传统的UI自动化工具无法处理的应用场景,尤其适用于无法通过标准控件识别的界面。支持跨平台操作
SikuliX支持多种操作系统,包括Windows、macOS和Linux,这让它在不同的工作环境中都能发挥作用。无论是开发还是测试,用户都可以根据需求选择合适的操作系统平台。编程语言支持
SikuliX支持使用Python和Java两种编程语言,这使得开发人员能够通过自己熟悉的语言编写自动化脚本。对于初学者,SikuliX还提供了易于理解的脚本框架和简单的API接口。可扩展性和灵活性
除了支持基本的图像识别和鼠标键盘操作,SikuliX还可以通过扩展库和插件来增加更多的功能。例如,用户可以根据需要定制自己的图像匹配方法,提升自动化任务的精度和效率。
SikuliX的功能和应用场景
桌面应用程序自动化
SikuliX的图像识别能力使得它非常适合用于桌面应用程序的自动化操作。通过捕捉应用界面中的图标、按钮或其他元素的图像,SikuliX能够自动完成点击、输入等操作,极大地减少了人工干预。自动化测试
在软件开发过程中,自动化测试是提高工作效率的重要手段。SikuliX通过图像识别,可以在测试过程中自动操作应用程序,进行UI测试、功能测试等。与传统的自动化测试工具不同,SikuliX能够应对图形化界面中的特殊控件,提供更灵活的测试方案。游戏自动化
SikuliX也广泛应用于游戏自动化领域。游戏中的某些元素无法通过标准的控件识别方式进行自动化操作,而SikuliX的图像识别能力正好解决了这个问题。玩家可以使用SikuliX自动进行一些重复性的游戏操作,提升游戏体验。批量处理和任务自动化
除了图像识别,SikuliX还可以用于批量处理任务。例如,用户可以通过SikuliX实现文件管理、数据输入、文件转换等自动化操作。在日常工作中,很多繁琐且重复的任务可以通过SikuliX来完成,帮助提高工作效率。
SikuliX的使用优势
易于使用
相比于其他需要复杂配置的自动化工具,SikuliX具有较低的入门门槛。用户只需要提供一些截图,就可以进行基本的自动化操作。对于没有编程经验的用户,SikuliX的简易使用方式降低了技术门槛。开源免费
作为一款开源软件,SikuliX完全免费,用户可以根据自己的需求进行二次开发和定制。这对于个人开发者和中小型公司来说,无疑是一个非常大的优势。灵活性和兼容性强
SikuliX可以兼容多种操作系统,并且支持多种编程语言,适应性非常强。无论是桌面应用还是Web应用,SikuliX都能够灵活应对。
总结
SikuliX凭借其图像识别的强大功能,成为了一个非常有用的自动化工具。无论是在自动化测试、桌面应用操作、游戏自动化,还是日常任务的批量处理上,SikuliX都能够提供灵活、简单的解决方案。作为一款开源免费的工具,它的应用前景非常广泛,尤其对于那些需要高度定制化自动化操作的用户,SikuliX无疑是一个值得尝试的选择。
如果你正在寻找一款简单高效的自动化工具,SikuliX无疑是一个值得推荐的好选择。
1 概述
1.1 SikuliX是什么?
1) SikuliX的前身是 Sikuli。Sikuli 一词取自墨西哥 Huichol Indian 土著语,意为“上帝之眼”,Sikuli 让电脑能像人一样“看”这个“真实世界”。
2) Sikuli是由MIT(麻省理工学院)研究团队发布的一种基于OpenCV图像识别技术的自动化工具软件。2009 年在麻省理工学院用户界面设计小组作为一个开源研究项目,负责人是Tsung-Hsiang Chang 和 Tom Yeh。两人在 2012 年离开了 Sikuli-X-1.0rc3 的项目,后续由RaiMan接管开发和支持至今,并将其命名为 SikuliX。
3) SikuliX可对人眼能看到的任意应用软件界面进行自动控制,以实现各种软件操作步骤的自动化。软件界面可以是Windows、Mac或则Linux/Unix系统上的任何可见内容。
4) 提供了SikuliX IDE,用户可通过简单的脚本开发实现屏幕上人眼可见的任何图形界面进行各种操作,如实现自动的操作鼠标点击、拖动事件或则键盘的输入等。
5) 目前最新的稳定版本为 SikuliX 2.05,2.06版本即将发布。目前网络上对SikuliX介绍的大都是1.0x版本。
1.2 SikuliX使用场景
1) 在软件自动测试中,被测软件的组件不能准确识别时,可以使用SikuliX
2) 在 IT 运维中,你希望自动化管理任务开发
3) 在日常学习工作中,你希望控制软件自动的执行重复性的任务
在做自动化测试的时候,我们一般不会单独使用这种基于图像识别的工具来进行测试。但是这些工具可以和其他工具组合使用,如AutoIt、Appium、RobotFrameWork等。掌握这种图像识别的技术后,我们可以将它作为目前主流技术的一个补充。
1.3 SikuliX优点
1) 整体上Sikuli小巧、便捷、容易上手。
2) Sikuli脚本可以不经过API的编译器直接自动化搜索到任何你能在屏幕上看到的东西。
3) 对各种程序都适合,B/S和C/S使用时一样的。
4) 不存在标准控件和非标准控件的问题,都是通过图片来查找。
5) 相对位置概念较小,要求不高(但是对象本身尺寸有影响)。
6) 一次编码,多次运行(基于java的)、jython和java的支持,用编程的方式比较容易扩展。
1.4 SikuliX缺点
1) 图片的分辨率、色彩、尺寸、唯一性对程序的影响 (如果有两个相同的,无法区分具体哪一个)。
2) Sikuli本身还不完善(处于开发、升级阶段)还有不少bug,本文有常见问题的处理方法。
3) 只认识当前活动的图标(只有当前界面有才行),如果有遮挡就找不到元素的异常。
4) 脚本基于截图,存储占用空间较大。
5) 目前还不适合设计成一种测试框架(有用例组织功能、测试报告生成等)。
1.5 SikuliX 2.05 安装
按官网推荐方式安装步骤比较繁琐,笔者制作了一个绿色版安装包,获取安装包解压后即可运行,无需其他配置。
1) 操作系统必须是64位的,推荐Win10或Win7。也支持Linux、MacOS
2) 下载文件 SikuliIDE-2.05_win.zip (247MB)
3) 压缩文件后,如图1所示,双击文件“RunSikuli2.05.bat”即可。
图2 为打开后的IDE界面。
注:解压路径保存在”纯英文“的文件路径下。
1.6 SikuliX官网资料
1) 概述性资料
https://Sikulix.github.io/docs/,适合入门了解
2) 详细资料
https://Sikulix-2014.readthedocs.io/en/latest/#,可查阅类的详细使用一、介绍以及安装
1、Sikuli的介绍
Sikuli是一个利用图片进行可视化检查和自动化图形界面的技术,一个方便通过截图写出可视化脚本的集成开发工具Sikuli IDE,脚本可以不经过api的编辑器直接自动化搜索到任何在你电脑屏幕上可以看见的东西。
你可以利用程序控制一个web的页面,或者在各种操作系统上运行的桌面程序。
2、安装
在官网(http://sikulix.com/)可分别下载MAC OS X 、Windows和Linux操作系统提供的安装文件以及安装方法介绍。
https://launchpad.net/sikuli/sikulix/2.0.5/+download/sikulixide-2.0.5.jar
下载至本地、安装java jdk ,sikulix要求jdk8.0+。
全部安装完毕之后可直接运行
java -jar sikulixide-2.0.5.jar
二、Sikuli常用方法
对工具所能提供的快捷方式都进行了试验,最常用的方法总结如下:
1.键盘操作,输入
type() #输入内容 (不建议使用,可以由于输入法的问题导致不可预知的错误)
paste () #文本输入(建议使用,单纯的指数复制的你的内容并进行粘贴)
2.页面断言,查找数据:
wait() #设置等待时间
exists() #判断等待页面元素是否存在
3.鼠标动作:
click() #点击事件--单点
doubleClick() #点击事件--双击
rightClick("") #点击事件--鼠标右键点击
dragDrop("1606202686079.png", "1606202694506.png") #将第一个元素拖动至第二个元素位置
既然我们进行了测试那么就也需要进行断言
if exists("查看的内容图片"):
click("查看的内容图片")
print"断言的内容"
else:
print("断言的内容")
页面如果不存在该内容那么脚本就自然的会进行跳过的继续执行下一步的操作。
4、键盘操作
记录了SikuliX中按键操作的方法。
控制字符
键名 sikuliX中的命令
Shift type(Key.SHIFT)
Ctrl type(Key.CTRL)
Alt键 type(Key.ALT)
Tab(制表符) type(Key.TAB)
大写锁定 type(Key.CAPSLOCK)
输入 type(Key.ENTER)
删除 type(Key.DELETE)
退格键 type(Key.BACKSPACE)
插入 type(Key.INSERT)
Home type(Key.HOME)
End type(Key.END)
ESC type(Key.ESC)
空格 type(Key.SPACE)
视窗 type(Key.WIN)
换页 type(Key.PAGE_UP)
向下翻页 type(Key.PAGE_DOWN)
列印画面 type(Key.PRINTSCREEN)
数字键盘锁 type(Key.NUM_LOCK)
滚动锁 type(Key.SCROLL_LOCK)
F1 type(Key.F1)
F2 type(Key.F2)
F3 type(Key.F3)
F4 type(Key.F4)
F5 type(Key.F5)
F6 type(Key.F6)
F7 type(Key.F7)
F8 type(Key.F8)
F9 type(Key.F9)
F10 type(Key.F10)
F11 type(Key.F11)
F12 type(Key.F12)
光标键:向上 type(Key.UP)
光标键:向下 type(Key.DOWN)
光标键:左 type(Key.LEFT)
光标键:向右 type(Key.RIGHT)
向上移动光标两次 type(Key.UP * 2)
向下移动光标两次 type(Key.DOWN * 2)
向左移动光标两次 type(Key.LEFT * 2)
向右移动光标两次 type(Key.RIGTH * 2)
按特定键 KeyDown(Key.*) 需要使用Region()进行区域设置。
释放特定键 KeyUp(Key.*) 需要使用Region()设置区域。
快捷键使用
常见操作 快捷键 sikuliX中的命令
复制 Ctrl + C type(“ c”,Key.CTRL)
剪下 Ctrl + X type(“ x”,Key.CTRL)
贴上 Ctrl + V type(“ v”,Key.CTRL)
搜索 Ctrl + F type(“ f”,Key.CTRL)
打印 Ctrl + P type(“ p”,Key.CTRL)
撤消 Ctrl + Z type(“ z”,Key.CTRL)
重做 Ctrl + Y ;Ctrl + Shift + Z type(“ y”,Key.CTRL);type(“ z”,Key.CTRL + Key.SHIFT)
关闭标签 Ctrl + F4 type(Key.F4,Key.CTRL)
还原标签 Ctrl + Shift + T type(“ t”,Key.CTRL + Key.SHIFT)
浏览器缓存刷新(强制刷新) Ctrl + F5 type(Key.F5,Key.CTRL)
关闭窗口 Alt + F4 type(Key.F4,Key.ALT)
最小化所有窗口 Windows + M type(“ m”,Key.WIN)
显示桌面 Windows + D type(“ d”,Key.WIN)
最小化窗口(当窗口为正常大小时)恢复为原始大小(当窗口为最大化时) Windows +光标键:向下,如果最大化,请执行上述两次。 type(Key.DOWN,Key.WIN)
窗口最大化 Windows +光标键:向上 type(Key.UP,Key.WIN)
切换活动窗口 Windows + Tab;Windows + Shift + Tab type(Key.TAB,Key.WIN);type(Key.TAB,Key.WIN + Key.SHIFT)
启动任务管理器 Ctrl + Shift +ESC type(Key.ESC,Key.CTRL + Key.SHIFT)
启动资源管理器 Windows +e type(“ e”,Key.WIN)
运算符
运算 sikuliX中运算符
加法 +
减法 –
乘法 *
除 /
余数计算 %
除数的整数部分 //
A的b次方 A ** B
A的负数 -A
逻辑或 or
逻辑与 and
否认 not
a大于b a> b
a小于b a <b
a小于或等于b a <= b
a大于或等于b a >= b
a等于b a== b
a不等于b a!= b
三、简单使用案例
对近两年接收的邮件提取标题和时间
for x in range(400):
switchApp("Foxmail")
sleep(0.1)
type(Key.UP)
sleep(1.1)
bt_conner=find(Pattern("1579162213451.png").targetOffset(1,1))
bt_point=bt_conner.getTarget().offset(-346, -6)
dragDrop(bt_conner,bt_point)
type("c",KEY_CTRL)
switchApp("4.xlsx")
type(Key.DOWN)
type(Key.RIGHT)
type("v",KEY_CTRL)
switchApp("Foxmail")
rq_conner=find(Pattern("1579162951663.png").targetOffset(-16,-1))
rq_point=rq_conner.getTarget().offset(108, 4)
dragDrop(rq_conner,rq_point)
type("c",KEY_CTRL)
switchApp("4.xlsx")
type(Key.LEFT)
type("v",KEY_CTRL)
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://zblog.hqyman.cn/post/11484.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~