SikuliX on Windows-基本介绍(翻译)

本篇内容包括:

  • SikuliX允许自动化可视化工作流程(visual workflow)
  • SikuliX可以用于视觉测试
  • 如何在屏幕上找到图像?
  • sikuli函数、简单事件操作个人总结笔记
      • 未完待续……

以下内容均来译自 SikuliX ,以官网为准,此篇内容为个人学习的记录与分享。

SikuliX允许自动化可视化工作流程(visual workflow)

就像我们每天坐在电脑前做的那样:

  • List item
  • 我们想要实现一些目标
  • 我们使用一个应用程序(例如浏览器访问Web内容)
  • 我们点击一些按钮,链接或其他页面
  • 我们等待应用程序做出反应并在屏幕上显示预期结果
  • 我们在某处填写一些文字并按下一些功能键,如TAB或ENTER
  • 我们再等待一些预期的反应或结果
  • 我们点击…
  • 我们等 …
  • 我们打字/输入…
  • 我们等 …
  • 我们…

  • 我们称之为可视化工作流(visual workflow)
    每个人都或多或少地重复这些工作流中的一些,我们不时地问自己:这可以实现自动化操作吗?
    有很多工具可以用于这样的工作流程自动化,并且曾经在这个领域做过一些实验/探索的人将会获得他的经验,并可能拥有最喜欢的自动化工具。

主要有3类工具:

- 录制(Recorder) 当您手动操作工作流程时,记录器会跟踪您的鼠标和键盘操作。 停止录制后,您可以播放(自动运行您的工作流)。 通常可以使用其他工具对录制内容进行编辑和扩充。
- 界面识别(GUI aware) GUI识别工具允许以编程方式对GUI元素(如按钮)进行操作。这是基于对GUI元素及其特性的内部结构和名称的了解。其中一些工具还具有录制功能。(这里说的比如最流行的Selenium)
- 可视化(Visually) 在视觉上,该工具可以“看到”屏幕上的图像(通常是矩形像素区域),并允许用户使用鼠标和键盘模拟对这些图像进行操作。使用这样的工具可能还会有一些录制功能。

SikuliX属于第3类,目前没有录制功能。 在完成工作流程的同时,您可以捕获一些图像,这些图像是您想要操作的,或者是您希望在操作后显示的图像。 这些图像由单击和输入操作使用,或用于等待屏幕,为下一个操作做好准备。
SikuliX是一个WYSIWYS工具:你看到的就是你的脚本(What You See Is What You Script.)。

所以再次采用上述工作流程,现在使用SikuliX命令:
openApp(someApp) #我们使用某个应用程序
click(imageButton) #我们点击一些按钮
wait(imageExpected1) #我们等待应用程序做出反应并在屏幕上显示预期结果
type(“some text”); type(Key.ENTER) #我们填写一些文字,然后按ENTER键
wait(imageExpected2) # 再次等待一些预期的反应或结果
click(…) #我们点击 …
wait(…) #我们等待 …
type(…) #输入 …
wait(…) #等待 …

使用SikuliX IDE,您可以设置和维护上述这类可视化工作流程,包括捕获和组织所需的图像。 除了解基本命令的选项外,您不需要任何编程或脚本知识。 现在,您若是想优化、重复或扩充增强这样一个基本的线性工作流程,您必须深入了解您选择的脚本语言(在IDE中支持:Python,Ruby,JavaScript)。

SikuliX可以用于视觉测试

在软件测试中,人们使用工具来检查由某些工作流驱动的应用程序是否显示了预期的结果。由于应用程序具有视觉上复杂的GUI,测试人员迟早会想要根据他们的期望检查一些视觉内容。这可能是屏幕上GUI元素的呈现或屏幕某些部分的可视内容。

SikuliX可以以各种方式集成到这样的测试环境中,无论是在脚本级别还是使用基于Java API(实现SikuliX功能的部分)。这种方法的突出例子是RobotFramework或Cucumber。

此外,GUI识别工具和SikuliX的组合已经成为现实(例如,web应用程序的Selenium)。

这里的挑战通常是,SikuliX基于图像的特性在某种意义上是像素感知的,屏幕上的图像完全是像素感知的,或者SikuliX失败了(只要像素的宽度和高度匹配,就会有一些细微的偏差)。这通常导致需要为不同的环境提供不同的图像集。版本2将有更多的特性,这将使处理此类情况更加容易。

对测试人员来说,很重要的方面:

  • SikuliX需要一个真实的屏幕来运行被测试的应用程序或至少一些等效的虚拟解决方案。(需要操作或是识别的图片必须出现在屏幕上,肉眼可见)
  • SikuliX仅适用于运行Windows,Mac或Linux并具有Java 6以上的PC /工作站。

如何在屏幕上找到图像?

SikuliX使用OpenCV包在屏幕上查找图像。
SikuliX特性基于OpenCV的方法matchTemplate(),本例页面对此进行了很好的解释。如果你不熟悉它是如何工作的,你应该看看那里,然后再回到这里进一步阅读。
Sikulix的一个基本功能是等待图像出现在给定的区域:

# 屏幕的左上角
aRegion = Region(0, 0, 500, 500)
# png图像文件
# 这是我们想要在给定区域内寻找的图像
aImage = “someImage.png”
# 搜索并得到结果
aMatch = aRegion.find(aImage)

为了不把它弄得太复杂,我不讨论如何创建aImage—我们只是假设它在那里并且可以访问。
matchTemplate()需要一个指定大小或更大的基础图像(基础),在其中搜索给定的目标图像(目标)。 为此,我们在内部对给定的aRegion定义的屏幕区域进行屏幕截图(使用Java Robot类),这是保存到内存中的基本映像(base image)。目标图像也被创建——从图像文件中读取图像。然后,将这两幅图像转换为所需的OpenCV对象(CVMat)。
现在,我们运行matchTemplate()函数,得到一个基本图像大小的矩阵,其中为每个像素包含一个目标图像的相似度评分,与该像素位置的左上角逐个像素进行比较。如果现在还不清楚,请回到上面的示例并尝试理解。每个像素位置的得分值在0.0到1.0之间变化:值越低,该像素位置左上角开始区域包含目标图像的概率越低。得分值在0.7 - 0.8以上的信号概率很高,说明图像在这里。
在下一步中,我们使用另一个OpenCV方法,从提到的结果矩阵中获取相关的最大值(result score),这意味着我们正在寻找一个像素,最可能的是目标图像在基础图像的左上角。
如果没有其他说明,则只将结果分数> 0.7视为找到。其他值将发出FindFailed异常的信号。根据目标图像的各个方面(主要是目标图像中包含多少对边缘的均匀背景),通常会得到> 0.8甚至0.9的结果。如果按照SikuliX的建议创建目标图像,那么在大多数情况下应该会得到>0.95甚至>0.99的结果分数(从内部来看与1.0完全匹配)。

sikuli函数、简单事件操作个人总结笔记

参照另外一位大神的博客,你会得到更多。
https://blog.csdn.net/airfer/article/details/47726939

未完待续……

你可能感兴趣的:(Sikuli)