Java + SikuliX 基于图像实现自动化测试
Java + SikuliX 基于图像实现自动化测试
蔡坨坨转载请注明出处❤️
作者:测试蔡坨坨
原文链接:caituotuo.top/6d2908e8.html
你好,我是测试蔡坨坨。
由于目前大多数GUI工具均需要依赖于程序类型进行特征属性识别,例如:Selenium、Appium、UIAutomator。在进行WebUI自动化测试的时候,有些元素使用传统的Selenium方法(传统方法:使用id等属性定位)很难或无法定位到,比如:object元素;基于Flash、JavaScript或Ajax等技术实现的文件上传功能。
对于非input框的文件上传问题,Python可以使用win32gui库,而Java可以使用AutoIt,但是AutoIt只有Windows版本,又要考虑兼容Windows和macOS。
对于这种情况,推荐一个好玩的东西SikuliX。
本篇就来聊聊SikuliX这个工具,什么是SikuliX,如何使用,以及文件上传功能demo实现。
SikuliX简介
SikuliX是基于PC图像识别的自动化测试工具,由MIT(麻省理工学院)研究团队发布。
与其他UI自动化工具相比,SikuliX的优势在于,它是基于像素实现的元素定位,所以即使页面上的元素没有像id、name这些属性,也可以通过图像识别进行UI的交互操作,无需关注元素有哪些属性,所见即所得;适合非标准控件等自定义界面的定位;支持跨平台,如:Windows、macOS、Linux。
但是,它也有一定的局限性,由于是基于图像识别,因此图片的大小、分辨率、色彩都会对识别造成影响,定位不能百分百准确识别到元素,如果有两个相同或相似的图片,无法区分具体哪一个,需要手动调整精确度,工作量大;只能定位当前正在操作的窗口界面;若流程过长,则会造成脚本过于臃肿;目前还不适合设计成一种测试框架。
尽管SikuliX用来实现复杂的测试场景不太现实,这也是所有GUI自动化测试无法改变的现实,但是用来做一些特定场景的测试还是游刃有余。对于Web自动化主要用该端的自动化框架,如Selenium,SikuliX作为辅助,可以和Selenium结合使用。
使用
导入依赖
方法一(推荐):使用Maven构建工具,导入pom依赖
1 | <!-- https://mvnrepository.com/artifact/com.sikulix/sikulixapi --> |
方法二:手动下载jar包加入到引用库
https://raiman.github.io/SikuliX1/downloads.html
核心类
SikuliX提供两大核心类,Region(界面部分区域识别)和Screen(全屏识别)。
实例化Region:
1 | Region r = new Region(100, 100, 100, 100); |
实例化Screen:
1 | Screen s = new Screen(); |
常用API
等待元素出现:wait()
1 | s.wait(inputImg, 10); |
判断元素是否在屏幕上显示:exists()
1 | s.exists(inputImg); |
在文本输入框输入指定文本内容:type()
1 | s.type(inputImg, "caituotuo"); |
单击元素:click()
1 | s.click(btnImg); |
右键单击元素:rightClick()
1 | s.rightClick(btnImg); |
双击元素:doubleClick()
1 | s.doubleClick(btnImg); |
旋转指定图像:wheel()
1 | s.wheel(btnImg,25,0); |
拖放图片:dragDrop()
1 | s.dragDrop(img,img2); |
鼠标悬停:hover()
1 | s.hover(btnImg); |
粘贴复制的字符串:paste()
由于type()不支持输入中文,所以可以用paste()来在指定的文本框中粘贴文本
1 | s.paste(inputImg,"蔡坨坨"); |
按下键盘键:type()
1 | s.type(Key.ENTER); |
SikuliX实现百度搜索
1 | public static void baiduSearch() throws InterruptedException, FindFailed { |
SikuliX实现文件上传
1 | public static void uploadFileBySikuli() throws InterruptedException, FindFailed { |