13

我想使用 Sikuli 来自动化在 Mac OS X 和 Windows 上的浏览​​器中运行的 GUI 应用程序和 Web 应用程序。我目前的目的不是为了测试,而是为了一个团队的乏味、重复性任务的 GUI 自动化,不幸的是目前没有较低级别的自动化访问权限。

我想我想为 GUI 应用程序和 Web 应用程序构建一个或多个屏幕截图库,以便我可以跨项目重用。我经常为不同的应用程序运行相同的自动化步骤,或者对于 Web 应用程序,在不同的浏览器/平台组合中运行。

构建可重复使用的 Sikuli 屏幕截图库有哪些好的策略?一些想法:

  • 我应该在 Sikuli 之外捕获屏幕截图,然后对这些图像进行切片/切块以提取 Sikuli 中的特定界面元素吗?
  • 如何最好地跟踪类似 GUI 应用程序中等效界面元素的屏幕截图?
  • 如何最好地跟踪在不同浏览器或平台上看到的相同 Web 应用程序的屏幕截图?
  • 我怎样才能最好地组织分层的元素,例如必须选择 1、然后选择 2、然后选择 3 的菜单(但下一个选项仅在选择前一个选项后出现)?
  • 屏幕截图是否应该保存为变量以便能够更通用地引用它们?
  • 我应该构建包含屏幕截图的 Python 列表或字典吗?
  • 我应该根据应用程序/平台将屏幕截图分组到单独的 Sikuli 文件中吗?

我假设在所有这些中我可以像 Python 模块一样导入库,这在文档中似乎是可能的。

谢谢!

4

4 回答 4

18

有一个名为“ Sikuli 强大的 GUI 自动化库”的附加组件。

即使您最终没有使用该库,也可以通过查看他们对问题的实现来学习一些非常好的课程。

几点建议:

我应该在 Sikuli 之外捕获屏幕截图,然后对这些图像进行切片/切块以提取 Sikuli 中的特定界面元素吗?

  1. 比如何获取元素更重要的是这些元素的存储方式。我标准化了我如何命名图形,即: Button_OK.png 而不是 Sikuli 的不可预测的_default_name.png

  2. 您可以在 Sikuli 脚本中“即时”添加图像库。将不同的浏览器和平台图形存储在不同的目录中。

    myImagePath = "M:\\myImageLibrary\\"
    addImagePath(myImagePath)
    

如何最好地跟踪类似 GUI 应用程序中等效界面元素的屏幕截图?

命名约定!

\\firefox\\Button_OK.png
\\IE8\\Button_OK.png

您还可以使用Pattern的“相似性”来获得相同的图形以在 IE 和 Firefox 上命中(但没有误报)。这可能需要一些试验和错误。

我应该构建包含屏幕截图的 Python 列表或字典吗?

这是一个非常好的做法,在某些情况下对我来说效果很好。但有时,文件名比列表偏移量更能说明脚本功能。

我假设在所有这些中我可以像 Python 模块一样导入库,这在文档中似乎是可能的。

是的,您可以导入库

于 2012-03-09T23:56:04.870 回答
5

这看起来像是 spearson 推荐的一个很棒的图书馆。

我会在列表中再添加一个概念,即校准

与任何测试行业一样,您的仪器校准是必须的。

在 SQA/自动化领域,假设可能导致灾难。

设想:

周一,您决定将 Chrome 提交按钮屏幕截图用于 Sikuli 驱动的自动化。

您工作得很快,到周二,您的测试套件将按照您的预期提供准确的通过/失败。

周五下午,就在啤酒点之前,机器会自动升级到 Chrome 的下一个次要版本,它修改了取消按钮,刚好足以被 Sikuli 匹配为提交按钮。

你在周末离开办公室之前看了一眼你的报告,你的报告似乎像往常一样运行良好,但你直到可怕的星期一才意识到它们给出了误报,当时整个周末的事情都被打破了(但是,嘿,至少你度过了一个愉快的周末!)。

完全假设的情况,但希望强调“测试您的测试”或在一次写入、多次运行的自动化环境中校准您的工具的必要性。

解决方案:

为了减轻上述问题的情况,您可以设置一个网页,您知道该网页会以某种方式与静态库中的屏幕截图进行交互。在每个测试套件/批量自动化项目运行之前,它会调用校准套件并确保一切都按预期运行,无论是浏览器、文件管理器等

于 2013-09-20T19:01:01.357 回答
0

作为一名 Java 开发人员(不确定这是否适用于许多 sikuli 用户):我推出了自己的实现。我创建了一个单例 FileDirectory 对象,该对象具有默认目录(资源、模式、屏幕截图)的方法。每当我让 sikuli 截取屏幕截图时,我都会将其保存到这个默认目录(如果它在启动时不存在则创建)。我的应用程序会记录屏幕截图。使用 html 记录器,我可以链接到屏幕截图目录。所以我的 html 日志中嵌入了指向应用程序拍摄的图像的链接。

我知道这起初可能看起来很困难,但它最终提供了所需的用例。

于 2014-10-10T15:38:14.770 回答
0

也许这会给你一些想法。
我有一个文件,其中有多个定义需要查找某个图像。
有时他们需要寻找的图像在不同的浏览器中是不同的。
所以我使用这样的东西:

文件:ImageLib.sikuli

browser_Windows_Firefox = ("windowsFox.png")
browser_Mac_Firefox = ("macFox.png")

文件:执行.sikuli

from ImageLib import *

# Variable you can get set somewhere 
operatingSystem = 'Mac'

image = ()
if (operatingSystem == 'Windows'):
    image = browser_Windows_Firefox
elif (operatingSystem == 'Mac'):
    image = browser_Mac_Firefox
else:
    # Unknow option here.... 
    pass

# Find and highlight it. 
imageLoc = find(image)
imageLoc.highlight(5)
于 2015-08-14T12:47:05.767 回答