Sikuli网站说:


Sikuli是一种视觉技术,可以使用图像(屏幕快照)来自动化和测试图形用户界面(GUI)。


在什么情况下,Sikuli是一种比Selenium或Watir更好的测试自动化技术,它取决于符号标识符或引用UI元素的路径?请不仅考虑测试创建,还考虑测试维护。

评论

虽然我没有使用Sikuli进行测试自动化,但是发现与错误的开发人员相比,运行Sikuli脚本来重现错误的时间要短于Dev遵循一系列步骤来重现相同的bug的时间。当然是YMMV。

@ user867,自您提出此问题以来已经过去了4年。您能否分享使用这些工具的经验?您有什么选择?那是什么原因呢?

我问了这个问题,user867提供了一条评论。我最终没有使用Sikuli。

对于测试Web应用程序,还有Sikuli的替代方法:Kantu Browser-与Sikuli一样,它使用屏幕截图而不是选择器,但是它直接在Google Chromium中运行。

#1 楼

我可以提出一些想法:


您正在测试不知道如何为其元素ID或使用其他API且不会回头修复的开发人员。及时地。这正在积累技术负担-更好地使开发人员正确地进行工作-但是,例如,在设计时没有考虑可测试性的旧版应用中,屏幕截图测试可能是创建UI测试的唯一合理选择。实际上,此工具可能会沿着这些思路为我解决即将出现的问题。 。 。
您正在专门测试以确保UI外观保持合理相似。普通的UI测试并不关心按钮的外观,并且如果使用的图像是意外删除或与旧按钮图像交换的,则无法捕获。我已经在主要应用程序上看到了用于这些目的的其他屏幕截图测试。
如果您可以从PM中获得真正准确的屏幕截图,则可以在将ID分配给元素之前进行UI测试,并确保最终用户界面会自动匹配PM规范。

,只要您可以将屏幕截图分配给变量并重复使用(这样,整个测试套件中只有一个“确定”按钮的屏幕截图),维护海事组织还不错。如果ID仍在更改并且UI处于不断变化的状态,甚至可能会更容易。我曾经在一个项目中工作过,开发人员一直在不小心删除ID,而且我不得不等上几周才能定期获得可靠的标识符。但从定义上讲,UI元素将始终具有图像,这意味着1分钟的测试修复,而不是3周的等待,因为我无法自动运行该测试而需要手动运行该测试,或者15分钟到1一个小时的修复程序,以编码一种变通方法并对其进行测试。

我可以想到的主要困难是,当可能有两个或多个相似的UI(例如,两个“确定”按钮,一个在错误上,一个在标准配置屏幕上)时,但是即使ID也会遇到类似的问题(您是否要使用“ dynamicMenuOption11”或“ dynamicMenuOption12”?),您可能大部分时间都可以通过截取更大的屏幕截图来解决此问题(例如,获取“应用”按钮的边缘或错误对话框以标识右侧按钮) 。与在IMO中编码ID,检查其他值等相比,这是一个更容易的解决方法。该视频声称具有某种“最适合”的匹配方式,但是这种容忍度如何?而且,如果它太宽容,会产生错误的动作和错误的通过吗?

评论


公差是可调的,但默认值为“ 0.7”。我发现这对于我正在测试的应用程序来说有点宽容,但是我一直在测试的应用程序中一个长期存在的错误是它的视觉对比度很差。随您便。

–user867
2012年5月11日在2:05

从带有滚动条的下拉列表中选择随机值怎么办?在滚动条中您只能看到列表元素的10%?使用Selenium,您可以获取项目计数,根据元素数量生成随机值,并按列表中的索引选择项目。那西库利呢?

–伊凡·格拉西缅科(Ivan Gerasimenko)
16年5月5日,9:25

性能如何?在我看来,与在全屏上查找子图像(在Sikuli中)相比,通过xPath(在Selenium中)查找元素所需的计算更少。

–伊凡·格拉西缅科(Ivan Gerasimenko)
16年5月5日在9:35

#2 楼

我实际上已经使用过Sikuli,并相信这是质量保证自动化的未来。图像比较的模糊逻辑是天才。您可以将其调高为完全匹配,或将其调小。我在多个浏览器/操作系统和分辨率上进行了相同的测试,没有太多问题。

比以前的旧的x,y测试要强大得多。我创建了一个image.sikuli脚本来托管我的所有图像,然后重复使用它们。

我负责测试的应用程序不能在QTP或TestComplete上正常运行,我看不到元素。对于使用嵌入式组件的应用程序,这似乎越来越普遍。 Sikuli弥合了这种鸿沟,我发现它比其他的更易于使用(尽管IDE并不是很好)。它没有其他一些工具所促进的记录和回放,但是这样做再也不会产生可重复的强大自动化。

Selenium也不会进行任何图像比较。尽管测试可以通过,但它看起来像是IE 9上的废话。Sikuli至少可以对元素和按钮进行高层比较,以确保它们正确呈现。

评论


从带有滚动条的下拉列表中选择随机值怎么办?在滚动条中您只能看到列表元素的10%?使用Selenium,您可以获取项目计数,根据元素数量生成随机值,并按列表中的索引选择项目。那西库利呢?

–伊凡·格拉西缅科(Ivan Gerasimenko)
16年5月5日,9:25

性能如何?在我看来,与在全屏上查找子图像(在Sikuli中)相比,通过xPath(在Selenium中)查找元素所需的计算更少。

–伊凡·格拉西缅科(Ivan Gerasimenko)
16年5月5日在9:36

#3 楼

在我看来,没有任何问题!您将构建一个脆弱的测试套件,并将永远更新您使用过的图像。您的测试失败,因此您需要检查测试中是否有其他图像。实际上,这是您可以省去的一项开销。名称,类...),以便您构建可靠的测试套件。

评论


这也是我的印象,但我认为我可能会缺少一些东西。人们使用视觉提示来了解用户界面的组织方式,例如框内的所有文本字段和按钮可能都是同一表单的一部分,而突出显示的字段可能是必填字段。如果Sikuli可以使用视觉线索工作,我认为它可能与Selenium / Watir一样强大。也许这就是项目的方向。

–user246
2011年6月7日14:43



必须同意,我对此没有多大用处。屏幕截图比较众所周知,对于计算机而言比较困难,但对我们人类而言却非常容易。

– Ardesco
2011年6月30日11:20

我认为有些人忽略了如何真正使用Sikuli。您无需截取整个(网页)页面的屏幕截图并使用它。那不是重点。您可以使用一些屏幕截图工具,然后手动比较或运行一些工具将屏幕截图与参考图像进行比较。您使用Sikuli的方式是定义“原子” UI元素(即页面上的按钮,链接,某些文本),通常不依赖其他元素的布局,并将其裁剪的屏幕截图保存为参考图像。然后将它们与您在运行时在屏幕上看到的内容进行比较。因此,您将建立图形UI元素与Web UI定位器的存储库。

–大卫
2012年7月13日在22:49

由于篇幅太长,不得不分拆评论。因此,您可以像在屏幕上单击此按钮一样进行Sikuli测试(它是否存在于屏幕上的任何位置)?而且您可以使其相对于屏幕上的某些其他元素,例如按钮中的这些元素必须位于这些元素旁边,等等。您使它具有多原子性取决于您的需求。完全原子意味着它可以在任何地方,并且与其他元素无关。正确使用这些技术,页面布局的更改不一定会破坏测试。仅当更改元素(例如按钮外观)和页面布局时,才需要使用它们之间的相对性来更新UI元素。

–大卫
2012年7月13日在22:52

当屏幕分辨率改变,桌面主题,颜色数量,甚至是RDP设置时,我已经看到Sikuli测试的问题。如果您运行测试的系统需要更改-操作系统或其他,则需要考虑。我最大的担忧是该项目似乎不再活跃,因此,如果您打算使用它编写新的测试,请考虑该项目如何适合您的整体测试工具。

– jtreser
2012年10月21日16:16

#4 楼

我不敢说Sikuli是比Selenium或Watir更好的测试自动化技术,它只是一个替代方案。

在我当前的项目中,前端测试团队正在努力测试使用flexmonkium的应用程序。他们具有用flexmonkium编写测试的技能和经验,但是我们的应用程序需要与flexmonkium库重新编译,否则测试根本无法挂接到应用程序中。在相当长的一段时间内不可能做到这一点,因此团队需要另一种方法。我们选择Sikuli,因为它不需要进入被测应用程序的任何钩子-它可以轻松处理屏幕上显示的内容。但在某些情况下,这可能是一个不错的选择。您需要下定决心。

#5 楼

每当您要自动化不基于Web的内容时,Sikuli都会很有用。

我真的很喜欢Selenium和Watir,但它们仅限于Web技术,即使它们可能是当今最常见的技术,仍然有很多使用桌面应用程序的公司。对于这些,我发现Sikuli及其模糊匹配非常有用。

请记住,IDE并不是很好-您需要使用它来生成屏幕截图并调整匹配精度和位置。

评论


+1,我只是要对此发表评论。似乎没有人提到Sikuli和类似工具可在台式机和本机移动应用程序(通过仿真器移动)上运行,而Selenium和Watir仅限于Web。

–大卫
2012年7月13日在22:38

另一则评论是,您不仅可以使用Sikuli IDE生成屏幕截图,也可以不设置精度和位置。像Selenium IDE这样的IDE适用于一次性代码/测试,以及初学者。您可以使用强大的Java和Python API来构建测试。您还可以手动创建参考图像屏幕截图,将其保存为PNG格式,或在传递给Sikuli之前调用代码从源格式动态转换为PNG。

–大卫
2012年7月13日在22:40

是的,我相信我的评论对于需要使用IDE进行屏幕截图和调整有点确定性。不过,我仍然发现IDE对于这些调整很有用。

–cbl
2012年7月14日在16:28

#6 楼

我已经使用了1天。
我认为它使用起来更容易,学习起来也更快。
您还可以享受图像比较的好处。 (硒没有这个元素。)
这说,我认为您可以将其用于Flash自动化。 />此外,您无需学习autoIt或用于桌面自动化的其他脚本。

因此它具有一些优点。
但我认为您最好学习硒和自动,也许使用sikuli作为插件。

从头开始,几乎没有编程经验,您需要快速获得结果。 (或用于演示)。您可以使用它,尤其是在需要桌面自动化/脚本编写的情况下。

当您只需要Web脚本编写时,也可以使用imacros,因为它可以很快被使用。

评论


我不认为学习AutoIt会更好。 Sikuli和AutoIt对Web和桌面应用程序的GUI自动化执行相同的操作。唯一的区别是Sikuli基于图像,而AutoIt基于UI组件标识符。但是我已经看到了AutoIt无法识别桌面(而非浏览器)UI元素的情况,因此您不得不求助于Sikuli或商业测试工具,或者利用键盘快捷键或鼠标移动来弥补无法控制一些UI元素。

–大卫
2012年7月13日在22:44

#7 楼

我已经使用Sikuli了好几次,而我最大的收获就是在我无法手动找到的移动应用程序(使用模拟器)上测试内存泄漏。同时与Sikuli一起运行使我们可以绕开预算限制:)此外,我们还定制了应用程序,因此我喜欢使用Sikuli确保在正确的位置使用正确的颜色-相信我,我忘记了哪个客户获得哪个标签或颜色在哪里,所以我喜欢它。

它很容易学习(恕我直言)-我没有编码背景,并且能够使用它。用户论坛令人难以置信-他们将在很短的时间内为您提供帮助并提供答案。

评论


您能解释一下如何使用Sikuli测试内存泄漏吗?

–user246
11年8月30日在19:32

在iOS模拟器中有一个“模拟内存不足警告”,因此我做了一个简单的工作流程,作为在iOS模拟器上运行Sikuli的概念证明,因此我添加了一个函数,然后在整个脚本中对其进行了调用...然后循环它的100倍:)像一个魅力

–qualitycurls
2011年8月30日19:57

#8 楼

我公司拥有Maven,Selenium,Jenkins,blah-blah等标准发行版(至少现在是这样)的自动化流行语堆栈。我用西库利他们花了一周时间才能实现自动化,而我在几个小时内就实现了自动化。 Selenium可以检查视频文件是否存在,但是Sikuli可以播放并“观看”它。我看到,尤其是对于网页,Selenium自动化器不断地与各种等待-等待-等待的页面加载作斗争,使脚本长时间坐在那里无所事事,有时在页面仍加载时失败。 Sikuli具有事件处理程序(onChange(),onVanish()等),如果使用这些处理程序具有任何技巧,它将动态处理模拟连接的测试,从字面上像用户一样等待发生的事情,然后对它们进行操作。 >
与查找正确的对象进行测试相同。几个参数传递到循环中,Sikuli会像用户一样“查找”对象进行测试,同样知道何时放弃。我看到Selenium的人们诉诸于通过数据库黑客来找到相同的对象-几乎没有一个自动的用户接受测试!它们是经理们追逐的当下时髦词汇。 Python与这些语言完全不同。当然,还有图像更改的风险-远没有您想象的那么糟(iOS7实际启动时,我花了半天的时间更新图像)。但是,如果使用得当,我的经验将使我得出结论:西库利抽硒。

#9 楼

在这里,我发现了有关sikuli的一些要点:


Sikuli无法100%匹配文本。因此,在金融应用程序中使用它非常困难,因为没有太多不同的GUI元素,但是有许多类似的按钮,列表,表格...所以,如何在具有1000+的表格中选择特定的字符串(按其内容)行(仅25个在可见区域,即有关列表和表的问题)中的文本识别工具。即使您找到了滚动到所需项目的方式,这里也会出现区分“西非国家经济共同体”行与“东非国家经济共同体”行的问题。最高识别强度为0.99时,它们仍然相同。
Sikuli无法预测。某些GUI元素可以更改其外观,颜色,图像(这是Windows GUI中透明性的示例,因此,自动测试由于背景更改而被破坏):

>
Sikuli快速学习。创建第一个测试只需半天(通过多个窗口导航,在下拉列表中选择值,生成报告)。
Sikuli测试看起来像comix。在本机Sikuli IDE测试中看起来像comix,有人可以喜欢,但我更喜欢文字说明:)在可用性上。例如。移动应用程序,简单的Web应用程序,其中的图标应易于区分,易于查找。如果Sikuli(具有默认识别强度)在查找图标,字段等时犯了一个错误,这意味着它们(最有可能)的设计不是那么好(因此,甚至用户可能会错配GUI项)。

当Sikuli(图像识别)优于Selenium(对象描述)


需要检查界面的变化
使用图形界面(图标,带有图像的按钮... ),对用户来说应该很清楚
无法轻松访问对象属性(例如,远程桌面。在这种情况下,我正在使用它)


#10 楼

我使用过Sikuli,发现它对测试WPF.NET GUI应用程序(它不像其他Window应用程序那样包含具有窗口句柄的标准窗口实例)有很大帮助,否则很难进行测试。我认为Watir和Selenium主要用于测试基于浏览器的应用程序,而Sikuli也可以用于测试非浏览器GUI应用程序。

#11 楼

我认为,只要将网站的外观/布局更改,就将所有资金投入仅用于图像识别的测试,可能会使您陷入麻烦,并且您没有或无法使屏幕截图集合足够聪明以至于无法正常工作-在这种情况下,您的测试用例需要修复。
我会尝试两者的组合-Sikuli和Selenium都可以作为Java库使用-将其与JUnit结合使用即可。
(对Web设计了解不多,但是在带有某些测试软件的Java软件中,只有Sikuli这样的工具才能正确地进行拖放)

评论


这个。测试自动化与效率息息相关,使用每种工具最适合自己的工具可能比尝试找到一种千篇一律的解决方案更为有效。

–user867
2012年10月24日下午4:55

#12 楼

我在项目中使用Selenium进行功能测试,因为Selenium不支持GUI测试,因此我正在使用Sikuli来捕获GUI缺陷,因此如果使用得当,我和我都会互相补充。西库利和硒都有其缺点。这取决于您要测试的Web应用程序类型以及测试的目标。 Sikuli的局限性在于它无法在多浏览器测试中捕获功能定义,因为所有浏览器的渲染方式都不同。 Selenium没有捕获GUI缺陷的任何功能。我们只需要捕获屏幕快照并手动检查GUI缺陷即可。因此,我在我们的项目中使用了sikuli,而不是手动地咀嚼。由于需要测试多语言,多浏览器测试,因此我将在Eclipse IDE中使用Java语言使用Selenium讨论所有功能。并捕获快照,然后使用Sikuli查找GUI缺陷。而且它易于将Sikuli与Java集成,因为Sikuli本身是一个JAR文件,我们可以在Eclipse buid路径中轻松设置它。

#13 楼

我只是看了他们的视频,并根据我做出的特定假设回答了此问题,当-

测试仅在一种浏览器,一种操作系统,一种分辨率,一种(所有其他方法都可以)下,Sikuli会更好考虑一下),或者如果您准备为每种配置开发不同的Sikuli脚本。

当用户界面操作与屏幕坐标绑定时,Sikuli系统使我想起旧的自动化工具。然后,出于充分的理由,我们开始使用更好的元素定位器。

评论


它并不像您说的那么糟糕。当然,这取决于您要测试的应用程序,但是大多数时候Sikuli只会尝试匹配屏幕的一小部分,因此分辨率很少成为问题,并且可以补偿浏览器和操作系统的不同外观具有足够强大的测试脚本。

–user867
2012年5月11日,2:10

同意机智用户867。仅当您要针对浏览器窗口和1024x768的页面呈现进行特定测试时,屏幕分辨率才起作用。如果要对按钮或其他图形元素进行匹配/测试,则无论屏幕大小如何,它的大小将始终是固定的,除非有人更改了桌面的缩放级别等。并且与元素在屏幕上的位置无关,Sikuli知道如何在屏幕上的任何地方找到它。

–大卫
2012年7月13日在22:36

#14 楼

如果无法轻松访问GUI的内部或源代码,则Sikuli很有用。 Selenium或Watir通过ID,Name,XPath等来标识Web元素。相反,Sikuli可以通过图像/屏幕快照找到元素,这更容易。

#15 楼

我更喜欢Sikuli进行特定功能/缺陷的快速测试,然后选择Selenium进行回归/捕获所有E2E测试。

我的一些用法示例

Selenium:


问卷的功能。检查基于id的UI文本,然后遍历问卷的所有排列以检查所有行为和页面重定向是否均符合预期。该应用程序。它快速且可在后台运行,并且可以同时在多个浏览器中进行测试。
编码是在Protractor中完成的,这对我们的AngularJS应用程序起到了补充作用。
要点很重要,但是显示用Javascript完成的“实际”工作比使用Sikuli代码风格要容易得多。开发人员和更高级别的人将其视为完成了更多实际的工程。我可以非常迅速地编写一个脚本,该脚本将使用Python跟踪脚本在不同点运行多长时间,然后像真正的人一样接管鼠标并使应用程序通过。不像Selenium这样的毫秒。
Sikuli不仅用于截图!在上一个项目中,当我为经理执行上述操作时,我使用区域而不是屏幕截图。这很有帮助,因为我们需要单击的列表是从api中提取的,并且源经常更改。使该脚本有用,而不管它选择的是什么(我只是让它选择了列表中的第一个)
如果已经准备好前端,但是标识符还没有/根本没有,Sikuli不在乎然后去上班您根本不需要访问代码,如果您与开发人员之间的距离很远,那么效果很好。
我们曾经有一个容易复制的缺陷,但是它引起的唯一问题是我们的网格重叠并且看起来很不正确。 Sikuli使查找重叠的模糊图像变得更加容易,并检查每个构建是否仍在进行。您的测试可以是--suite=all和Python的混合体,以具有广泛的功能。另外,Sikuli可以更好地模拟用户如何浏览应用程序,因为它可以接管鼠标而不是在后台运行。对于更大的工作和专业的环境,硒对我的打击更好。我想两者都有时间和地方。

评论


Selenium也有一个Python API。

–user246
15年5月18日在19:47

#16 楼

我使用Selenium(通过CodeCeption),并且当我可以定位某些ID或CSS规则时,它也可以很好地工作。唯一的界面是GUI!

这些游戏具有“事件”,我的测试必须正确响应这些事件才能恢复主要的“游戏”(是的,DEV并未想到可测试性! )

为此,我使用Sikuli。它使用Python编写脚本,可以禁用图像显示,并让他为每个截取的屏幕截图询问一个名字。

为了处理“事件”,我使用了简单的“ try catch”结构,因此进行了测试可以愉快地运行游戏。

最长的部分是反向工程,因为当然,没有记录游戏。

我在CodeCeption中的速度脚本与Sikuli相同,如果在Sikuli中花费更多的时间,这仅是因为我不能强迫这些开发人员提供用于测试等的接口。元素,任何可插入的元素,输出,...)

如果我解雇Sikuli,有人做错了什么:-D

如果您没有注意上述情况:


Flash / HTML5 canvas
移动不易识别的HTML片段(结构模式,ID属性,CSS选择器,...)

附加功能是自动生成HTML文件desc加筋的程序。项目经理了解他们! (其中有很多图像...)