怎么使用Java+Selenium+OpenCV解决自动化测试中的滑块验证问题


这篇文章主要介绍“怎么使用Java+Selenium+OpenCV解决自动化测试中的滑块验证问题”,在日常操作中,相信很多人在怎么使用Java+Selenium+OpenCV解决自动化测试中的滑块验证问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java+Selenium+OpenCV解决自动化测试中的滑块验证问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!被测对象的滑块对象长这个样子。相对而言是比较简单的一种形式,需要将左侧的拼图通过下方的滑块进行拖动,嵌入到右侧空槽中,即完成验证。要自动化完成这个验证过程,关键点就在于确定滑块滑动的距离。根据上面的分析,验证的关键点在于确定滑块滑动的距离。但是看似简单的一个需求,完成起来却并不简单。如果使用自然逻辑来分析这个过程,可以拆解如下:1. 定位到左侧拼图所在的位置,由于拼图的形状和大小固定,那么其实只需要定位其左边边界离背景图片的左侧距离。(实际在本例中,拼图的起始位置也是固定的,节省了不少工夫)2. 定位到右侧凹槽所在位置,同样其形状和大小是固定的,那么只需要定位其左边边界离背景图片的左侧距离。3. 用2中探测到的距离减去1中的距离,既是滑块需要被拖动的距离。要完成上述的探测计算,首先我们想到的是使用元素定位的方法定位到拼图和凹槽的位置。然而这一想法是不可行的,原因在于这个验证模块是使用两个canvas即画布元素实现的:拼图和凹槽都是“画”在画布上的,其本身并不是一个页面元素,不能使用元素定位的方法。因此我们考虑使用图片解析的方法,分析画布图像本身,来确定相应图形的位置。这里我们将引入OpenCV库,来帮我完成图片解析过程:OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。1:下载 OpenCV进入到官网 https://opencv.org/releases/ 下载对应系统的 openCV 软件包后,解压放置到本地。使用Maven依赖并不能引入正确的OpenCV外部依赖,这里需使用外部2:工程中添加 jar 包Intellij 中选择 File -> Project Structure -> Modules -> Dependencies点击 add -> JARS or directories… 选择3. 新建滑块验证工具类,引入OpenCV动态链接库文件:opencv_java450.dll由于本项目的特点,拼图的形状和位置是固定的,首先我们将拼图和凹槽图片下载到本地,方便后续处理。(其它项目可能出现图片形状不固定的情况,可以直接用selenium实时下载图片,这过程比较简单,因此不赘述)。下载完的图片如下:凹槽图片:拼图图片:下面直接上代码再做说明:①什么是Mat类型:Mat 是 OpenCV 中用来存储图像信息的内存对象。Mat 对象中除了存储图像的像素数据外,还包括图像的其它属性:宽、高、类型、维度、大小、深度等。可以认为在OpenCV中,一个Mat对象就定义了一个图像。②对于slide免费云主机域名_blk.png的处理经过了以下过程:灰度化:去黑边:二值化:最终的目的在于将图形转化为黑白分明的图形,便于后续匹配。③本项目中,由于背景凹槽图片,凹槽的位置是动态的,所以需要实时动态获取:(如果遇到拼图也需要动态获取,可以同样处理)④对于slide_bg.png的处理经过了以下过程:灰度化:二值化:这里省略了去黑边这一过程,因为实践发现,经过上述两部后,我们已经能够进行较为准确的图片匹配了。⑤matchTemplate:在模板和输入图像之间寻找匹配,获得匹配结果图像esult:保存匹配的结果矩阵TM_CCOEFF_NORMED标准相关匹配算法minMaxLoc:在给定的结果矩阵中寻找最大和最小值,并给出它们的位置Selenium的滑块处理是库里的标准玩法,使用actions类或者javaScript的方式都可以实现,本例采用的是actions类方法:①这里进行滑动时,首先滑动距离之所以要减去11,是因为本例中拼图的初始位置固定离整体图形的左边距是11.分两次滑行并且中间sleep了一个时间,是为了防止全匀速拖动而被识别为机器人。到此,关于“怎么使用Java+Selenium+OpenCV解决自动化测试中的滑块验证问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: gRPC超时拦截器如何实现

这篇文章主要介绍“gRPC超时拦截器如何实现”,在日常操作中,相信很多人在gRPC超时拦截器如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”gRPC超时拦截器如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!使用 …

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/21 18:42
Next 03/21 18:43

相关推荐