传统的移动端自动化并不是对任意UI元素都能轻松识别,对于以下场景很难实现精准的测试:

  • 元素控件是从第三方类库构建出来的,并且没有提供有效的accessibility进行属性识别
  • 元素控件没有使用唯一的标识符ID进行属性设置,并且相似的控件很多
  • 2D或3D游戏的控件,并没有用传统的UI控件开发,而是使用引擎渲染出来的像素

Appium历史版本中并没有尝试解决或支持过这些功能,因为其后端使用XUITests和UiAutomator2框架,如果底层框架无法识别到元素,那么Appium就找不到该元素。在Appium 1.9.0版本之后,支持了一小部分图像识别的检索功能,以提供图像识别的自动化测试能能力。

在本文中,我们将了解如何使用Appium的图像识别功能来完成脚本开发。在本系列的下篇教程中,我们将介绍其他通用的OCR图像识别库来实现图片的定位与操作。

什么是图像元素ImageElement?

图像元素是base64编码的图像文件,用作模板图片,用于与从设备屏幕捕获的图像进行比较。

如果模板图像与屏幕的某个区域匹配,那么我们可以通过调用WebElement方法与找到的图像元素进行交互,例如:

  • click
  • isDisplayed
  • getSize
  • getLocation
  • getElementRect

对于文字的输入操作,可以通过使用键盘图像作为模板,然后点击屏幕区域的某些点来完成,例如使用“getSize”和“getLocation”方法。

使用Appium实现图像识别

Appium没有OpenCV图像比较库,需要使用以下命令手动安装:

Copy to Clipboard

同传统标准控件定位一样,使用Find-by-image语法:

Copy to Clipboard

当获得图像元素后,我们就可以像点击其他元素一样点击它。当然,为了实现这一点,我们必须有一个Base64编码的模板基准文件:

Copy to Clipboard

Appium的图像查找元素同样支持隐式等待策略,也支持显式等待策略,因此测试可以稳定的运行,直到匹配到屏幕中的控件:

Copy to Clipboard

下面是整合的测试代码

Copy to Clipboard