详解UI自动化测试辅助利器:Sikuli

序言

如果你在UI自动化测试中遇到如下问题,那么本文将会给你带来帮助:

做web自动化测试时,由于个别无法识别的元素而Block自动化测试进度。

苦恼于使用python脚本而无法调用sikuli来完成UI元素识别。

定义

Sikuli是由MIT(麻省理工学院)研究团队发布的一种图形化编程技术,使用Sikuli你只需要会写HelloWorld这种最基本的编程技能即可,用Sikuli不需要去写出一行行复杂的代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。

Sikuli官网:http://www.sikulix.com/

Sikuli是开源的,源码可在Github查看:https://github.com/sikuli/sikuli

优点

可以测试不易识别或无法定位的对象,比如map 、Flash和图表等;可以验证图片;

缺点

图片匹配区域的大小和样式不能有丝毫变化,所以如果屏幕分辨率、浏览器缩放等,导致图片区域的大小发生变化,就会失败

环境配置

WindowsXP    Windows 8 and 10

Mac OSX 10.6 、10.10+

JDK 1.8以上

把sikulixapi.jar引入到Eclipse中

下载地址https://raiman.github.io/SikuliX1/downloads.html

直接下载sikulixapi.jar即可


校验图片是否在当前页面中出现

自动化测试中最常用的场景是判断某图片是否在当前页面中出现,典型的应用场景是校验上传的图片在页面中正常显示。

例如访问百度首页 https://www.baidu.com/


想验证logo是否在首页中出现


思路如下:

1.把图片保存到本地




2.打开https://www.baidu.com/

3.调用sikuli相关方法来判断步骤1中的图片是否在百度首页中展示。核心代码如下

import org.sikuli.script.FindFailed;

import org.sikuli.script.Pattern;

import org.sikuli.script.Screen;

 public boolean isPicExist(String p_iconPath){ //本地图片

               Pattern pattern = newPattern(p_iconPath);

               Screen screen = new Screen();    

               try {

                            screen.find(pattern).getImage();

                            returntrue;


                     }catch (FindFailed e) {

                            // TODO Auto-generated catch block

                            returnfalse;

                     }、

注意:如果是在远程的机器上执行代码,可以用selenium的截屏方法,在远程机器中进行截屏,然后把截屏文件保存到本地,然后判断截屏图片中是否有需要查找的图片。

核心代码如下:

String findedImage = "D:/pic/baidu.png"; //需要查找的图片

String sreenshotImage="D:/pic/baiduhome.png";//截屏图片

Finder objFinder = newFinder(findedImage);

objFinder.find(Image.create(sreenshotImage));

System.out.println(objFinder.hasNext());

点击页面中的图片

有些web页面中的元素无法识别,我们可以通过点击该元素截屏的方法操控元素。在实际工作中我们经常会用到selenium+sikuli联合的方式进行UI自动化测试。由于屏幕分辨率不同、浏览器缩放等原因,都会导致sikuli匹配图片失败,所以项目中仍然不要以sikuli为主,当面对少数selenium难于识别的web元素时,我们可以引入sikuli来确保UI自动化地顺利进行。下面以在百度中搜索关键字的场景为例,使用selenium结合sikuli的方式来完成自动化测试,具体细节实现如下:

1.使用selenium,在百度首页中输入Selenium关键字

2.使用sikuli,点击下图中的“百度一下”图标(前提是已经把该图标保存到本地)


3.使用使用selenium 完成校验工作

代码实现如下:

        driver.get("https://www.baidu.com/");

         driver.manage().window().maximize();

         Thread.sleep(5000);

         driver.findElement(By.id("kw")).clear();

         driver.findElement(By.id("kw")).sendKeys("selenium");

         Thread.sleep(1000);

         Screens = new Screen();

         try{

              s.click("d:/pic/baidu.png");     


           }

         catch(FindFailed e){

                 e.printStackTrace();

         }


         Thread.sleep(3000);

          assertTrue(driver.findElement(By.className("nums_text")).getText().contains("百度为您找到相关结果约"));

在python中调用sikuli

因为sikuli使用java编写的,要是想使其在python中被调用,可以使用第三方工具来实现。

最常用的工具是JPype,它的原理是在java虚拟机和python虚拟机中进行本地级的接口来实现的。注意两个虚拟机的位数必须一致,必须都是64位或者32位的。

官网:http://jpype.sourceforge.net/

安装方式:pip install JPype1pi

核心代码如下:

from jpype import *

# C:\ProgramFiles\Java\jdk1.8.0_181\jre\bin\server\jvm.dll

startJVM(getDefaultJVMPath(),"-ea", "-Djava.class.path=D:\pic\sikulixapi.jar")

java.lang.System.out.println("helloworld") #调用System.out.println

Screen =JClass("org.sikuli.script.Screen") #调用sikuli

screen = Screen()

screen.click("D:/pic/news.png")

shutdownJVM()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容