构建可重复使用的Sikuli屏幕截图库的策略是什么?

时间:2012-03-09 21:35:58

标签: sikuli

我想使用Sikuli在Mac OS X和Windows上自动化浏览器中运行的GUI应用程序和Web应用程序。我目前的目的是用于测试,而对于团队的繁琐,重复性任务的GUI自动化更多,目前不幸的是没有低级别的自动化访问。

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

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

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

我假设在所有这些中我可以像Python模块那样导入库,这在文档中肯定是可行的。

谢谢!

4 个答案:

答案 0 :(得分:17)

有一个名为“Robust GUI Automation Library for Sikuli”的插件。

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

一些建议:

  

我应该捕捉Sikuli之外的屏幕截图,然后切片/切割这些图像以拉出Sikuli内的特定界面元素吗?

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

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

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

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

    命名约定!

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

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

      

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

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

      

    我假设在所有这些中我可以像Python模块那样导入库,这在文档中肯定是可行的。

    是的,你可以import libraries

答案 1 :(得分:5)

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

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

与任何测试行业一样,必须对仪器进行校准。

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

情境:

周一,您决定使用您的Chrome提交按钮截屏,以便在Sikuli动力自动化中使用。

你工作得很快,到了星期二,你的测试套件正如你所期望的那样提供准确的通过/失败。

星期五下午,就在啤酒时间之前,机器自动升级到Chrome的下一个次要版本,修改了取消按钮,足以与Sikuli匹配作为提交按钮。

你在离开办公室周末之前看了一眼你的报告,你的报告似乎一如既往地正常运行,但是你没有意识到他们会在周一因为整个周末事情被打破而感到害怕时才会出现误报(但是,嘿,至少你周末愉快!)。

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

解决方案:

为了缓解上述问题,您可以设置一个您知道与静态库中的屏幕截图交互的特定方式的网页。在每个测试套件/批量自动化项目运行之前,它将调用校准套件并确保一切正常运行,无论是浏览器,文件管理器等等。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

文件:ImageLib.sikuli

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

文件:Execute.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)