基于Sikuli GUI图像识别框架的PC客户端自动化测试实践

news2025/2/27 22:23:54

目录:导读

引言

一、GUI图像识别框架元祖:Sikuli

二、Sikuli运行原理

三、Sikuli安装

四、Sikuli IDE主界面基本使用

五、Sikuli 脚本语法

六、Sikuli 应用示例

七、Sikuli 优势及局限

1.优势

2.局限

Sikuli 使用小结


引言

Sikuli是一种基于Python的GUI图像识别框架,它能够通过匹配屏幕截图上的图像元素来定位和操作目标应用程序的UI元素。这意味着Sikuli可以用于各种不同类型的应用程序,无论是Web应用程序还是桌面应用程序,都可以使用Sikuli进行自动化测试。

同时,它还具有跨平台性和易于学习等优点。因此,在当前市场上,Sikuli自动化测试越来越受到广泛关注和应用。

本文将介绍如何使用Sikuli实现PC客户端自动化测试,并分享实践中遇到的问题和解决方案。希望能够为广大测试工程师提供参考和帮助。

········································

最近两天,公司有个PC客户端的测试任务,除了最基础的功能测试外,还包括稳定性测试和兼容性测试需求。刚好去年接触过Sikuli这款基于GUI图像识别框架的自动化测试工具,于是便应用于测试工作中,辅助测试任务。初步试用下来,总体效果还算差强人意。

一、GUI图像识别框架元祖:Sikuli

Sikuli 创始于 2009 年,是麻省理工学院用户界面设计小组的一个开源研究项目。2012 年由 RaiMan 接管开发和 支持并将其命名为 SikuliX。 它以图像检索技术为基础,提供了一套基于 Jython 的脚本语言以及集成开发环境。使用者可利用屏幕截图直接 引用 GUI 元素进行编程,完成交互操作。 Sikuli 一词取自墨西哥的土著语,意为“上帝之眼”,寓意—— Sikuli 让电脑能像人一样”看”这个”真实世 界”。官网:RaiMan's SikuliX

SikuliX支持作为脚本语言:

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

SikuliX的常见用途:

  • 应用程序或网页的日常自动化任务
  • 玩游戏
  • IT系统和网络的管理

二、Sikuli运行原理

三、Sikuli安装

Sikuli 支持跨平台运行,可以运行在Mac OS X、Windows 和 Linux 系统下。

下载地址:https://launchpad.net/sikuli/+download 或者官网:RaiMan's SikuliX

推荐安装x1.0-rc3(需要依赖JDK1.6版本)

四、Sikuli IDE主界面基本使用

Sikuli1.x版本官方文档:Sikuli Documentation — Sikuli X 1.0 documentation

1.左侧为常用函数,包括查找、鼠标动作、键盘动作等

2.点击元素的图片可以调节识别的偏移度、匹配的精度

3.sikuli脚本首次保存会提示并弹出保存路径,可自定义保存路径

4.脚本也可以导出为exe格式的可执行文件

  • 一个脚本对应一个目录,目录中对应脚本中的图标截图、python脚本,

五、Sikuli 脚本语法

Sikuli 的脚本编写遵循 Python 语法规范,其本身提供了多种自定义类及其自定义方法。由于 Sikuli 基于 Jython,其核心代码由 Java 编写,可在用户自定义的 Java 工程中将其作为 Java 标准类库进行

  • 定位APP窗口:myApp.window()
  • 聚焦到当前APP:myApp.focus()
  • 判断元素是否存在:exists()
  • 点击某个元素或图标:click()
  • 输入文本内容:type("http://www.baidu.com")
  • 按下键盘按键:type(Key.ENTER) 按键名要大写

六、Sikuli 应用示例

PC客户端的自动循环发送消息的脚本示例:

import time
import random

myApp=App("yueyun-im")  # 声明APP实例
if not myApp.window():  # 判断当前是否处于APP窗口
    openApp("D:\\yueyun-im\\yueyun-im.exe")  # 如果不处于APP窗口,则打开指定位置EXE
    myApp.focus()  # 聚焦于APP
if exists("K7iX.png"):  # 判断图标是否存在
    click("K7iX.png")  # 点击指定图标按钮
if not exists("1655945972853.png"):
    click("1655946081065.png")
click("1655945972853.png")
#while 'p' in 'python': 
for i in range(10):
    type("TEST-SIKULI-MSG-"+str(i))
    time.sleep(0.2)  # 休眠3秒
    #click("1655946081065.png")
    type(Key.ENTER)  # 按下键盘的ENTER键,按键名要大写
    type(Key.ENTER)
myApp.close()  # 关闭APP 

七、Sikuli 优势及局限

1.优势

① 学习成本低,只需掌握简单的python语法就能快速上手;

② 无需关注元素有哪些属性,所见即所得;

③ 适合非标准控件等自定义界面的定位,如游戏界面;

④ 支持跨平台,支持Windows、Linux、macOS;

2.局限

① 基于图像识别,图片的大小、分辨率、色彩都会对识别造成影响,定位不能百分百准确地识别到元素;

② 只能定位当前正在操作的窗口界面;

③ 若流程过长,则会造成脚本过于臃肿;

④ 图片存在相似度,会对识别造成影响,需要手动一一调整图片的精度;

Sikuli 使用小结

  • 尽管sikuli用来实现复杂的测试场景不太现实,这也是所有GUI自动化测试无法改变的现实。但用来做一些特定场景的测试还是游刃有余,比如:

① 循环、持续发送消息,7*24h运行,以检测程序运行稳定性;

② 持续发送图片或视频文件,以检测程序的连续上传、下载文件的稳定性;

③ 在不同的PC系统版本上运行,以检测程序的兼容性;

  • 对于web自动化、APP自动化主要用该端特定的自动化框架,如selenium、appium,sikuli作为辅助、可以和selenium等结合使用;
  • 对于特定的、复杂的场景,如游戏界面、flash应用等难以识别到元素的应用界面,可以使用sikuli;
  • 今天在测试场景②的过程中也发现了一个bug:【当前聊天窗口,连续下载图片过程中,程序闪退】。虽然硬说是sikuli测出来的bug有些牵强,但本身自动化测试也不是用来发现bug的,sikuli也算是出了很大一份力。只要能合理地利用,任何不起眼的工具都可以发挥它的价值!

这篇文章讲到这里就结束了,喜欢的话可以给作者一个免费的三连哈!你的支持就是我创作的最大动力!

最后这些资料有需要的可以和我留个言【软件测试学习】

 

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

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

相关文章

【Hello Network】网络基础1

作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍网络的基础概念 网络基础1网络基础网络的起源网络在哪里认识协议网络协议协议分层OSI七层模型TCP/IP协议网络传输流程局域网的两台主机通信两…

跟姥爷深度学习3 神经网络的调试实操

一、前言 前面我们做了一次天气预测的模型,训练的结果都还好,网络好歹是“拟合”了,但预测数据不合预期让我一直耿耿于怀。所以我又花了很长时间来研究为什么,我的理论依据明明没有问题(今日*均温度与*一周*均温度具有…

全球6G技术大会总结报告

全球6G技术大会 论坛B:天地融合智能组网技术 论坛D:2030技术发展趋势 论坛E:6G无线空口传输技术 论坛F:6G通感算架构及关键技术 论坛H:6G网络架构及关键技术 论坛B:天地融合智能组网技术 论坛B中包含…

【Java 并发编程】一文了解线程间有哪些通信方式?

一文了解线程间有哪些通信方式?1. synchronized 内置锁2. volatile 关键字3. 等待/通知机制3.1 等待wait()wait(long)wait(long, int)等待方需遵循如下原则3.2 通知notify()notifyAll()通知方需遵循如下原则notify() 和 notifyAll() 应该用谁?4. 管道输入…

第18章_JDK8-17新特性(下)

第18章_JDK8-17新特性(下) 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 6. 新语法结构 新的语法结构,为我们勾勒出了 Java 语法进化的一个趋势&#xff0c…

STM32 库函数 GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit、GPIO_Write 区别

问题:当我使用STM32库函数对 I/O 口进行赋值时,在头文件中发现有四个相关的函数可以做这个操作,那么它们有什么区别呢? 一、GPIO_SetBits //eg: GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);解释:置位(置1)选择的数…

十、市场活动-分页查询

功能需求 ①、当市场活动主页面加载完成之后,显示所有数据的第一页; ②、用户在市场活动主页面填写查询条件,点击"查询"按钮,显示所有符合条件的数据的第一页,保持每页显示条数不变 ③、实现翻页功能. *在市场活动主页面,显示市场活动列表和记录的总条…

Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable(续篇)

目录背景意外发现结论背景 上篇Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable,我把WebMvcConfig 代码加入项目后,会报冲突的问题。如下所示。 requestMappingHandlerMapping: defined by method ‘requestMappingHandlerM…

The 1st Universal Cup Stage 12: ̄Ookayama, April 15-16, 2023 题解

A XOR Tree Path 给一颗树&#xff0c;树上点有黑白两色&#xff0c;每次可以选一个叶子节点&#xff0c;翻转其到根路径上所有点的颜色&#xff0c;问最大黑色点数。 树dp #include<bits/stdc.h> using namespace std; #define MAXN (10000010) #define ll long long…

计及氢能的综合能源优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用国密SSL证书,实现SSL/TLS传输层国密改造

密码是保障网络空间安全可信的核心技术和基础支撑&#xff0c;通过自主可控的国产密码技术保护重要数据的安全&#xff0c;是有效提升我国信息安全保障水平的重要举措。因此&#xff0c;我国高度重视商用密码算法的应用并出台相关政策法规&#xff0c;大力推动国产商用密码算法…

.Net MVC中 视图如何使用路由!!!

配置路由 app.UseEndpoints(endpoints > { endpoints.MapControllerRoute( name: "default", pattern: "{controllerHome}/{actionIndex}/{id?}"); }); 在视图中使用路由 页面跳转常用的路由设置 标签属性 描述 asp-action 指定…

STL容器总结

1.Vector&#xff1a; 本质是动态数组&#xff0c;拥有一段连续的内存空间&#xff0c;并且起始地址不变&#xff0c;能非常好的支持随机存取&#xff0c;即[]操作符&#xff0c;但由于它的内存空间是连续的&#xff0c;所以在中间进行插入和删除会造成内存块的拷贝&#xff0c…

C++之 文件操作(file operation)

目录 引言 一、文本文件 1、写文件 2、读文件 二、二进制文件 1、写文件 2、读文件 引言 程序运行时产生的数据属于临时数据&#xff0c;程序一旦运行结束后&#xff0c;数据也会被释放 通过文件可以将数据保存以持久化 在C中&#xff0c;对文件进行操作要写头文件<f…

图染色问题的NP完全性证明

文章目录1.Overview2.CNF 3-sat3. Gadgets3.1 Concolorous Edges3.2 Starter/Variable Gadget3.3 Splitter Gadget3.4 OR Gadget3.5 Clause Gadget4. To Planar Graph最近在学 6.890&#xff0c;然后 devans 刚好问了我这个问题&#xff0c;然后尝试编了一个证明。 1.Overview…

功能测试面试没人要了!软件自动化测试如何入门?

对于我来说&#xff0c;我做的是web端的测试&#xff0c;做测试也有好几个年头了&#xff0c;每次都是使用手工测试的话&#xff0c;一直是做重复性的工作&#xff0c;既枯燥又繁琐&#xff0c;所以我在两年前自己使用java语言写了一系列的自动化测试脚本&#xff0c;利用的框架…

Java数据结构与算法----动态规划(背包篇)

1. 0/1背包 1.1.算法思路 0/1背包是动态规划、背包问题中最经典的问题啦&#xff01;它主要的问题是&#xff1a; 给定n种物品、这n种物品的重量分别是&#xff0c;价值分别是 &#xff0c;而你有一个容量为C的背包&#xff0c;请问如何求出所能拿的最大价值呢&#xff1f; …

嵌入式开发——串口常见问题和调试手段

1、串口介绍 参考博客&#xff1a;《ARM芯片&#xff08;S5PV210芯片&#xff09;——串口通信详解》、《UART和RS232、RS485的联系和区别、以及对软件编程的影响》&#xff1b; 2、串口常见问题 (1)内核没有开启串口&#xff0c;导致没有产生设备节点&#xff1b; (2)上层应用…

运动想象脑电信号数据集及其预处理方法

脑电信号基础知识 在BCI应用中,获取脑信号的途径包括多种技术方式。其中,EEG是最适合脑机接口应用的技术,主要因为无创性、便携式和高时间分辨率是其的优势。EEG是记录头部表面不同位置之间电位差异的时间记录,它起源于分布在大脑皮层的数百万个神经元的同步电活动的总和。…

我把Solon打包成了native image,速度快的惊人

Solon 一个高效的应用开发框架&#xff1a;更快、更小、更简单。https://solon.noear.org/ 我刚开始对 Solon 感兴趣的原因&#xff0c;就是启动快、包体积小&#xff0c;用了一段时间之后&#xff0c;发现 Solon 使用 GraalVM native iamge 打包有一些问题&#xff0c;我把问题…