如何系列 如何使用SikuliX执行自动化任务

news2024/12/23 17:59:24

文章目录

    • 什么是SikuliX?
    • SikuliX的使用场景
    • 安装SikuliX
    • 常用方法
      • 查找
      • 鼠标
      • 键盘
      • 其他
    • 示例脚本
      • 示例一 自动抢票
      • 示例二 自动打开计算器
      • 示例三 自动访问CSDN博客搜索博主并关注
      • 其他
    • SikuliX原理
      • SikuliX脚本
      • Sikuli 源文件夹或压缩文件(.sikuli、.skl)的结构
    • 缺点

官网: http://sikulix.com/

Github:https://github.com/sikuli/sikuli

教程

  • https://sikulix-2014.readthedocs.io/en/latest/toc.html

  • https://sikulix-2014.readthedocs.io/en/latest/genindex.html

什么是SikuliX?

SikuliX(西库里)可自动执行在运行Windows,Mac或某些Linux / Unix的台式计算机屏幕上看到的所有内容。 它使用OpenCV提供的图像识别功能来识别GUI组件。 在无法轻松访问GUI内部或要操作的应用程序或网页的源代码的情况下,这非常方便。

SikuliX支持脚本语言

  • Python语言级别2.7(由Jython支持)
  • 支持运行RobotFramework文本脚本
  • Ruby语言级别1.9和2.0(由JRuby支持)
  • JavaScript(由Java脚本引擎支持)

…,您可以将它用于Java编程和任何Java感知编程/脚本语言(Jython,JRuby,Scala,Clojure等)的编程/脚本中。

除了在屏幕上定位图像之外,SikuliX还可以运行鼠标和键盘来与标识的GUI元素进行交互。它适用于多监视器环境,甚至适用于某些限制的远程系统。

SikuliX带有基本文本识别(OCR),可用于搜索图像中的文本。此功能由Tesseract支持。

SikuliX是一个Java应用程序,可在Windows,macOS和大多数Linux / Unix系统上运行。

SikuliX支持脚本方式编程方式,本文只介绍脚本方式,编程方式的话后面和selenium一起探讨。

最新稳定版本为2.0.5 (当前时间2023.06.19)

SikuliX的使用场景

您想自动化一些重复性任务

  • 应用程序或网页的日常使用
  • 玩游戏
  • IT系统和网络的管理

…而且您手头没有足够的工具。

您想要测试正在开发的应用程序或网页。

您想要创建在指定应用程序或网页上实时运行的使用文档或培训材料。

您已经拥有相应的工具和工作流程,但您希望添加SikuliX的特定功能以增强您的方法并提高效率和结果。

安装SikuliX

1.安装JDK64 位 (版本 8 或更高版本)

2.下载SikuliIDE,不同的操纵系统选择不同的包下载。

  • Windows: Download the ready to use sikulixide-2.0.5-win.jar (SikuliX IDE for Windows)

  • macOS: Download the ready to use sikulixide-2.0.5-mac.jar (SikuliX IDE for macOS)

  • Linux: Download the ready to use sikulixide-2.0.5-lux.jar (SikuliX IDE for Linux)

常用方法

Screen类是Sikuli提供的所有方法的基类。Screen类包含用于屏幕元素上所有常用操作的预定义方法,如单击、双击、向文本框提供输入、悬停等。下面是Screen类提供的常用方法列表。

由于类 Screen 扩展了类Region,因此类 Region 的所有方法都可用于 Screen 对象。

请注意,使用整个屏幕进行查找操作会对性能产生影响。因此,如果可能的话,将查找操作限制在较小的区域对象(例如reg.find())以加快处理速度。

查找

方法描述
find此方法用于在屏幕上查找特定元素。 它接受图像名称作为参数。
findAll在整个屏幕上搜索所有匹配的视觉模式,并返回这些相似模式的位置列表。此功能允许我们获取屏幕上的所有选中项目。
wait等待指定图案加载完成。
wait等待几秒。
waitVanish不断搜索该区域中的指定图案,直到图像消失
exists
sleep让电脑歇一下,不要急于执行下面的语句。单位为秒

鼠标

命令描述
click左键点击元素
rightClick右键点击元素
hover鼠标悬停在指定元素上
dragDrop拖动,dragDrop(“1606202686079.png”, “1606202694506.png”) #将第一个元素拖动至第二个元素位置
paste文本输入(建议使用,单纯的复制的你的内容并进行粘贴)

键盘

按键命令
Shifttype(Key.SHIFT)
Ctrltype(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)
Hometype(Key.HOME)
Endtype(Key.END)
ESCtype(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)
F1type(Key.F1)
F2type(Key.F2)
F3type(Key.F3)
F4type(Key.F4)
F5type(Key.F5)
F6type(Key.F6)
F7type(Key.F7)
F8type(Key.F8)
F9type(Key.F9)
F10type(Key.F10)
F11type(Key.F11)
F12type(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()设置区域。

运算符

运算命令
加成+
减法
乘法*
/
余数计算
除数的整数部分//
A的b次方A ** B
A的负数-A
逻辑或or
逻辑与and
否认not
a大于ba > b
a小于ba < b
a小于或等于ba <= b
a大于或等于ba >= b
a等于ba == b
a不等于ba != b

快捷键

常见操作快捷键命令
复制Ctrl + Ctype(“c” , Key.CTRL)
剪下Ctrl + Xtype(“x” , Key.CTRL)
贴上Ctrl + Vtype(“v” , Key.CTRL)
搜索Ctrl + Ftype(“f” , Key.CTRL)
打印Ctrl + Ptype(“p” , Key.CTRL)
撤消Ctrl + Ztype(“z” , Key.CTRL)
重做Ctrl + Y Ctrl + Shift + Ztype(“y” , Key.CTRL); type(“z” , Key.CTRL + Key.SHIFT)
关闭标签Ctrl + F4type(Key.F4 , Key.CTRL)
还原标签Ctrl + Shift + Ttype(“t” , Key.CTRL + Key.SHIFT)
浏览器缓存刷新(强制刷新)Ctrl + F5type(Key.F5 , Key.CTRL)
关闭窗口Alt + F4type(Key.F4 , Key.ALT)
最小化所有窗口Windows + Mtype(“m” , Key.WIN)
显示桌面Windows + Dtype(“d” , Key.WIN)
最小化窗口(当窗口为正常大小时)恢复为原始大小(当窗口为最大化时)Windows + 光标键:向下,如果最大化,请执行上述两次。type(Key.DOWN , Key.WIN)
窗口最大化Windows +光标键:向上type(Key.UP , Key.WIN)
切换活动窗口Windows + Tab; Windows + Shift + Tabtype(Key.TAB , Key.WIN); type(Key.TAB , Key.WIN + Key.SHIFT)
启动任务管理器Ctrl + Shift + ESCtype(Key.ESC , Key.CTRL + Key.SHIFT)
启动资源管理器Windows + etype(“e” , Key.WIN)

其他

打开应用

#打开应用程序,注意应用程序的路径名里的斜杠“\”要改为双斜杠“\\”。
openApp(应用程序路径名) 
#closeApp
#switchApp

If语句

if 条件 and 条件: #(注意有冒号,‘#’号表示注释)
	语句

循环语句

for x inrange(10): #循环10次,x不用预先定义
	循环体

弹出输入框

# 显示一个输入框,以供输入。要输入中文应该在前面加u,不然会乱码
input(u"字符串")

弹出提示框

popup("Obama has updated his message")

操作文件

#打开 写文件
f=open('c:/wy.txt','a')
t="hello\n"
f.write(t)
f.close()

#打开 读文件
f=open('c:/wy.txt','r')
t=f.read()
popup(t)
#open(路径+文件名,读写模式)
#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式

示例脚本

示例一 自动抢票

流程

1.打开浏览器输入抢票的网址

2.循环点击抢票按钮

这里用登入按钮代替抢票按钮哈。

脚本截图

脚本代码

n = 10
find("1687314581241.png")
for i in range(n):
    click(Pattern("1687314614204.png").targetOffset(116,-4))
    sleep(1)
print "done"    

示例二 自动打开计算器

流程:

1.打开Windows搜索

2.输入calc

3.输入1+1

4.按=进行计算

脚本截图

脚本代码

click("1687331888480.png")
paste("calc")
type(Key.ENTER)
type(Key.ENTER)
wait(2)
paste("1+1")
wait(1)
click("1687332030574.png")
print("done")

示例三 自动访问CSDN博客搜索博主并关注

流程

1.在桌面找到Chome浏览器

2.双击Chome浏览器

3.sleep 2秒

4.等待Chrome浏览器打开

5.敲击回退键

6.敲击https://www.csdn.net/

7.敲击ENTER键

8.敲击ENTER键

9.sleep 4秒等待浏览器加载内容

10.等待csdn加载完成

11.敲击lakernote

12.敲击ENTER键

13.敲击ENTER键

14.等待搜索完成

15.鼠标点击用户

16.鼠标点击关注

17.关闭浏览器

脚本截图

脚本代码

find("1687269549891.png") 
doubleClick(Pattern("1687269549891.png").targetOffset(3,-21))# 点击指定图案的指定位置
sleep(2)
wait(Pattern("1687269907253.png").similar(0.60)) # 指定图案命中相似度为0.6,更容易命中
type(Key.BACKSPACE)
type("https://www.csdn.net/")
type(Key.ENTER)
type(Key.ENTER)
sleep(4)
wait("1687270102974.png")
type("1687270102974.png","lakernote")
type(Key.ENTER)
type(Key.ENTER)
sleep(2)
click("1687270231840.png")
sleep(2)
click("1687270273555.png")
sleep(3)
click("1687270623962.png")

其他

find("png") # 在整个电脑屏幕的范围内去找图标
r = Region("png")
r.find("xx") # 在指定的范围内找图标

if  exists("查看的内容图片"):
    click("查看的内容图片")
    print"断言的内容"
else:
    print("断言的内容")
    
for x in findAll(png):
    click(x)

while exists(png):
    sleep(5)

popup("vgod just logged off")

while not find(png):
    sleep(1)
else:
    print "not found", png    

keyDown((Key.CTRL)  # 一直按着
keyUp(Key.CTRL) # 松开
# 方位
Nearby(number)、above()、below()、left()、right()、getCenter()        

SikuliX原理

https://sikulix-2014.readthedocs.io/en/latest/devs/system-design.html

在这里插入图片描述

SikuliX脚本

Sikuli Script(Sikuli脚本)是一个基于Jython和Java的库,可以使用图像模式来自动化GUI交互,通过图像模式来指定键盘/鼠标事件。Sikuli Script的核心是一个Java库,由两部分组成:

  • java.awt.Robot(用于向适当位置发送键盘和鼠标事件的类)
  • 以及基于OpenCV的C++引擎(用于在屏幕上搜索给定的图像模式)

C++引擎通过JNI与Java连接,并且需要为每个平台进行编译。在Java库的基础上,为最终用户提供了一个简单明了的命令集作为一层薄薄的Jython封装。因此,很容易为在JVM上运行的其他语言(如JRuby、Scala、Javascript等)添加更多薄薄的封装层。

Sikuli 源文件夹或压缩文件(.sikuli、.skl)的结构

Sikuli脚本(.sikuli)是一个目录,其中包含一个表示自动化工作流程或测试用例的Python源文件(.py),以及源文件使用的所有图像文件(.png)。Sikuli脚本中使用的所有图像只是一个指向.sikuli捆绑包中.png文件的路径。因此,Python源文件也可以使用任何文本编辑器进行编辑。

在使用Sikuli IDE保存脚本时,可以选择在.sikuli目录中创建一个额外的HTML文件,以便用户可以轻松地在Web上共享脚本的可视副本。

Sikuli压缩脚本(.skl)只是.sikuli文件夹中所有文件的压缩文件。它适用于通过电子邮件或Web上传进行分发,也可以从命令行运行并在Sikuli IDE中重新打开。(以前称为“Sikuli可执行文件”已被弃用,因为这样命名是误导性的:人们通常会认为它类似于一个自包含和自运行的软件包,类似于Windows的EXE文件,但实际上不是这样的)

缺点

  • 依赖屏幕截图,使其在不同的操作系统上,不同的浏览器中,甚至是不同的显示分辨率下,需要独立维护一套图形源文件,对于其跨平台的能力造成障碍。
  • 由于对于截图的检索依赖于实时的桌面显示,若出现程序逻辑之外的意外界面遮挡或焦点切换(如,弹出窗口等),则会对程序执行造成影响。
  • IDE 处于开发初级阶段,稳定性和易用性存在一定问题。其本身仅支持初级的代码编辑功能,对于规模较大的代码开发和调试工作仍存在不便之处。其在 Windows 平台和 Linux 平台上的运行稳定性也稍逊于在 MacOSX 上的表现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电源纹波测试,居然还能这么玩

开关稳压器因其具有非常高的效率优势&#xff0c;正在各个领域逐渐替代线性稳压器。 但由于开关稳压器通常被认为具有很大的输出纹波(Ripple)&#xff0c;所以很多工程师在高性能和噪声敏感型系统中只考虑使用低压差(LDO)稳压器。 而事实上&#xff0c;现今很多高性能开关稳压…

人机接口回路原理(三)

四、串行通信接口电路 &#xff08;一&#xff09;人机接口与保护CPU之间的串行通信 1&#xff0e;串行通信接口电路及其作用 人机接口与保护CPU之间的串行通信的作用是人机对话和巡检&#xff0c;其电路见图1&#xff0d;33所示。这个串行通信系统是主从分布式的系统&#x…

双向可控硅控制后续篇:过零检测电路、丢波、斩波、定时

概念讲解 当我们在使用AC负载的时候&#xff0c;为了能较好的控制负载工作功率&#xff0c;需要用到继电器、可控硅等对负载进行工作与断开的控制&#xff0c;从而将功率维持在所需的大小上&#xff0c;之前介绍双向可控硅的文章也讲了其控制方式主要有&#xff1a;定时、丢波…

go语言的反射和泛型

反射 反射可以在程序的运行时获取变量的各种信息。Go语言中光反射在reflect包下。 http://c.biancheng.net/view/4407.html 泛型 Go语言中通过断言转化为指定类型。 func main() {arr : []string{"int", "dghjs", "hdk"}printArr(arr)arr1 …

【JavaWeb】servlet实现excel表格数据批量导入到数据库

这是一个教大家使用excel表格&#xff0c;批量将数据导入到数据库的一个教程 通过Javaweb项目 的servlet技术实现&#xff0c;教程详细简单&#xff0c;跟着做就不会报错&#xff01; 1.下载依赖包&#xff1a; tomcat-jdbc的jar包下载&#xff1a;文件上传批量导入数据库依赖…

一篇打通,性能测试与性能测试瓶颈评估,测试之道...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是性能测试&a…

硬件系统工程师宝典(30)-----降压式Buck电路分析

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到DC/DC变换中的开关调节模式有功耗小、效率高并且稳压范围宽的特点以及DC/DC的指标参数和设计要求。今天我们来分析一下DC/DC中的一个典型…

嬴图 | 围绕中心性算法在寄生虫网络的研究

算法在实践中的应用有哪些&#xff1f;中心性算法的特点和应用一文了解。 前言 寄生&#xff08;Parasitism&#xff09;是两种生物之间的一种“消费者—资源”的关系&#xff0c;即寄生虫&#xff08;Parasite&#xff09;和它的宿主&#xff08;Host&#xff09;。 寄生虫…

智芯MCU软件开发环境搭建

智芯MCU软件开发环境搭建 目录 智芯MCU软件开发环境搭建前言1 软件安装2 编译环境3 烧录环境4 新建工程结束语 前言 智芯科技的MCU主要应用于汽车行业&#xff0c;属于车规级的MCU&#xff0c;目前上市的MCU型号较少&#xff0c;相关资料也不多&#xff0c;所以这里出一期开发…

医学影像信息系统(PACS源码)基本概况和工作原理

一、医学影像信息系统&#xff08;PACS&#xff09;基本概况 医学影像信息系统&#xff08;PACS&#xff09;是一种集影像采集、传输、存储、管理、查询、诊断、报告、归档和科研于一体的综合性应用系统。它基于医学影像存储与通信系统&#xff08;Picture Archiving and Comm…

Seata Saga 模式理论学习、生产级使用示例搭建及注意事项(一) | Spring Cloud57

一、前言 通过以下系列章节&#xff1a; docker-compose 实现Seata Server高可用部署 | Spring Cloud 51 Seata AT 模式理论学习、事务隔离及部分源码解析 | Spring Cloud 52 Spring Boot集成Seata利用AT模式分布式事务示例 | Spring Cloud 53 Seata XA 模式理论学习、使用…

当我用AI为开发AntV图表插上想象的翅膀后

前言 做前端图表时&#xff0c;最耗时的就是找配置参数&#xff0c;比如你在使用AntV G2时&#xff0c;为了更加美观&#xff0c;拉大数据之间的差距&#xff0c;需要将y轴设置一个最小值&#xff0c;由于每个图表的参数少说十几个&#xff0c;多达二十多个&#xff0c;一个一…

C# 反射 (Reflection) 的常用功能

目录 一、概述 二、实例化类 三、反射赋值 四、获取字段值 五、获取字段名 六、获取字段类型 七、调用方法 结束 一、概述 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 程序集包含模块&#xff0c;而模块包含类型&#xff0c;类型又包含成员。反射则…

华为认证 | HCIE-Datacom 考试大纲

01 HCIE-Datacom考试概述 02 HCIE-Datacom考试内容 HCIE-Datacom V1.0 考试覆盖数据通信领域&#xff1a;路由交换高阶技术、企业网络架构全景、园区网络典型架构与技术、华为CloudCampus解决方案设计与部署、广域互联网络典型架构与技术、华为SD-WAN解决方案设计与部署、广域…

人机接口回路原理(四)

五、硬件时钟电路 接口插件设置了一个硬件时钟电路&#xff0c;由一片MC146818时钟芯片及辅助元器件组成&#xff0c;如图1&#xff0d;35所示。 MC146818芯片是智能式硬件时钟&#xff0c;其内部由电子时钟和存储器两部分组成。可计年、月、日、时、分、秒、星期&#xff1b;能…

时间序列中的无监督表示学习

自监督学习中&#xff0c;有一个常用的方法是对比学习&#xff1b; 2.  时间序列的表示学习 1.1 采用对比学习的方式 Time-series representation learning via temporal and contextual contrasting(IJCAI’21) 本文采用对比学习的方式进行时间序列表示学习。首先对于同一…

告别原始 UI 样式,拥抱 Fluent Design 风格 PyQt/PySide 组件库

简介 这是一个使用 PyQt/PySide 编写的 Fluent Design 风格的组件库&#xff0c;支持亮暗主题无缝切换和自定义主题色&#xff0c;搭配 QtDesigner 可以快速开发美观的界面。github 仓库地址为 https://github.com/zhiyiYo/PyQt-Fluent-Widgets &#xff0c;演示视频可以在哔哩…

夏至后,这些农事活动要注意管理

夏至过后&#xff0c;温度会进一步攀登&#xff0c;较高的气温和光照会让夏作物生长更加旺盛。接下来就让我们看看在这些夏作物在种植时都需要注意哪些方面吧&#xff01; 一、蔬菜管理 夏白菜、夏甘蓝、夏菜花都是在6月下旬开始育早熟的菜花苗&#xff0c;秋大棚中的芹菜也是…

超强总结,性能测试实战(购物业务板块)真实压测场景...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 购物网站购物流程…

人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型,调通模型的训练与测试

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型&#xff0c;调通模型的训练与测试。RBM(受限玻尔兹曼机)可以在没有人工标注的情况下对数据进行学习。其原理类似于我们人类学习的过程&#xff0c…