如何结合使用Sikuli与Selenium:一种实践指南
其实很多人在使用selenium 做自动化的时候都会遇到这样子的一个问题,就是要进行文件的上传。对于简单一些的元素 如 这种可能可以通过直接的sendkey进行赋值,但是对于flash的这种 selenium就无能为力了。并且还得操作windows的文件上传框。
其实这个解决办法在解决 Selenium文件上传框无法识别的问题 这篇文章里面已经提及过了, 可以使用autoIt以及python的pywin32库来解决这个问题。
不足
autoit 编译以后实际上是一个可执行的exe文件,相当于我们要在脚本中去调用另外一个应用程序,这样子调试起来就相当的不方便了,一旦有问题需要重新修改脚本,重新生成一个exe文件出来。
pywin32当然只能够支持python的语言啦,所以如果想要java语言来解决这个问题的话,只能够另辟途径啦, 所以就考虑到sikuli了。
Sikuli
使用图像识别方法来识别GUI元素,将你在屏幕上看到的一切自动化
如何使用
sikuli 有提供IDE的方式进行使用的,但是我们这里主要是讲如何结合selenium进行测试。
1. 我们需要下载sikuli对应的api jar包,在pom.xml中进行如下的配置。
```
<dependency>
<groupId>com.sikulix</groupId>
<artifactId>sikulixapi</artifactId>
<version>1.1.0</version>
</dependency>
```
2. 通过查看对应的API, 我们发现想要做到对象的操作如 点击、拖拽等 都是需要依赖于Screen这个类。具体可以查看 Screen的API 。所以我们就可以简单的通过如下方式进行一个元素的点击了。
``` java
Screen screen = new Screen();
screen.click("./res/sikuli/1471679512789.png");
```
但是这样子总感觉缺少了什么,对比sikuli的IDE 我们发现还可以设置图片查找的相似度以及点击位置的偏移 。
以上是IDE 设置了相似度80% 以及 x轴偏移2以后的结果提示。
再来我们再来看下screen.click()
方法的参数
public int click(PFRML target) PFRML - to search: Pattern, Filename, Text, Region, Match or Location
所以click的参数 实际上我们可以传一个Pattern的类型。所以参照Pattern的用法,我们就可以写出一个前面IDE中的情况了。
Pattern resPath = new Pattern("./res/sikuli/res_path.png").targetOffset(-2,0).similar(0.8f);
screen.click(resPath);
推荐阅读
-
如何结合使用Sikuli与Selenium:一种实践指南
-
如何在Python中轻松操作Sikuli:入门与实践指南
-
如何在Java中使用Sikuli与Selenium WebDriver实现文件上传功能
-
如何在Jenkins中使用Sikuli与Selenium进行测试:让浏览器像在本地开发环境那样以前台模式启动?
-
使用Selenium与Java结合sikuliX进行Flash网页的操作指南
-
理解域名层次:一级域、二级域与三级域的区别与应用" "*域名、主域名、子域名详解:对SEO的影响及使用决策" "搭建网站时:二级域名与子目录的选择指南" "详解如何在*域下设置Apache的二级域名" "初学者必读:挑选理想域名的五大关键建议" "构建网站时,一级域名与二级域名的实践配置教程
-
如何使用JMX和jmx_exporter将Prometheus应用于监控:一种实践指南