怎麼玩轉Appium圖像識別技術OpenCV,這波操作你必須GET!

2021-02-15 檸檬班軟體測試

在我們做 App 自動化測試的時候,會發現很多場景下的元素沒有 id、content-desc、text 等屬性,並且有可能會碰到由於開發採用的是自定義 View,View 中的元素也無法識別到,很多的自動化測試框架對此類場景束手無策。

Appium 在 V1.9.0 中給我們帶來了針對圖像識別的全新圖片元素定位的方法:-image

在 Appium 中用到的圖像識別庫是 OpenCV,因為在 Appium V1.9.0 中-image查找元素方式才被引入進來,所以需要保證你有安裝 V1.9.0 或以上版本的 Appium。

這裡需要注意,Appium 圖像識別的使用只能適用於通過 npm 安裝 Appium 的方式,通過 Appium-desktop 安裝 Appium 的方式是不適用的。Step1:通過 npm 安裝 Appium1. 下載對應系統和位數的node.js安裝包https://nodejs.org/en/download/3. 進入cmd,輸入node-v以及npm-v檢測(npm是node.js自帶的包管理器)4. 指定npm安裝的全局模塊和緩存的路徑,如果不指定默認會安裝到C盤中【C:\Users\用戶名 AppData\Roaming\npm】

■ 在 nodejs 目錄下新建【node_cache】和【node_global】目錄

■ 輸入如下命令指定:

5. 配置 node.js 環境變量

■ 在系統變量中新建【NODE_PATH】變量名,變量值為

【D:\software\nodejs\node_global\node_modules】

【%NODE_PATH%】

■ 將用戶變量【Path】中原來的【C:\Users\用戶名\AppData\Roaming\npm】修改為【D:\software\nodejs\node_global】

/安裝 Appium

2. npm 通過全局的方式安裝 Appium(默認下載安裝最新版本 Appium)

Step2:安裝opencv4nodejs所需要的依賴1. 進入到 https://cmake.org/download/下載對應軟體包,解壓到任意目錄

追加【D:\software\cmake-3.18.1-win64-x64\bin】,其中 cmake-3.18.1-win64-x64 是為 Cmake 解壓之後的目錄名

/安裝 building tools

Step3:Appium 中安裝圖像識別模塊 opencv4nodejs

由於網絡和各種環境問題的影響,通過官方推薦的【npm i -g opencv4nodejs】命令直接安裝 opencv4nodejs 模塊的話,會發現存在很多的問題。

https://www.npmjs.com/package/opencv4nodejs#how-to-install裡面的說明,這裡使用的是手動安裝 OpenCV 的方式

1. 在系統環境變量中添加:【OPENCV4NODEJS_DISABLE_AUTOBUILD】變量名,變量值為【1】

2. 安裝choco(windows上面的軟體管理方案,可以解決部署軟體複雜、容易出錯問題)官網安裝:https://chocolatey.org/install,打不開的同學給大家搬運過來:

■ 使用管理員運行 powershell,檢查執行策略:執行指令【Get-ExecutionPolicy】

■ 如果結果為Restricted,那麼執行指令【Set-ExecutionPolicy AllSigned】或者【Set-ExecutionPolicy Bypass-Scope Process】,直到結果為【RemoteSigned】


3. 通過 choco 安裝 OpenCV,執行下面的安裝指令即可。

完畢後 choco 默認安裝在 C:\tools 目錄中。

5. 安裝opencv4nodejs進入cmd,執行命令

命令執行過程中,會對之前通過 choco 方式下載好的包進入編譯,編譯過程中可能會出現卡住,關掉 cmd 窗口重新再執行命令即可。

Step1:截取所需進行圖像識別的元素


1. 將需要進行圖像識別元素所在頁面截屏

2. 通過 adb pull 命令拉取截屏圖片出來

3. 用畫圖工具打開--劃重點,一定要保證圖片是原大小的,不能放大或者縮小圖片

4. 截取其中的元素保存為圖片

Step2:代碼實現


java-client 庫中有提供了「MobileBy.image」以及「findElementByImage」方法,需要注意的是參數類型是 String 類型(以 MobileBy.image 為例)

這裡我們需要先將圖片轉換為 Base64 編碼格式,轉換代碼如下:

測試代碼如下:

Step3:執行

1. 開啟Appium Server,通過appium-a127.0.0.1-p4723命令啟動

2. 啟動設備,通過adb devices檢測設備

3. 執行case

效果如下:

Appium 圖像識別的準確率是跟 Appium 的截圖功能以及我們所提供的元素截圖相關的,有時候我們會發現更換一臺不同解析度的手機之後腳本就會執行失敗。Appium 提供了一些設置可以提高圖像識別的準確率或加快圖像識別的速度。

使用示例:

說明:本文為檸檬班歪歪老師原創,轉載需註明出處


可加多多老師微信

13327216354

或者掃描下方二維碼


相關焦點

  • 畢業設計| 樹莓派3B+與opencv3+PyQt5實現人臉識別門禁系統
    id=9d025059ad0326d9511ea4fc2bea321b&type=note注意:opencv-python庫、opencv-contrib-python庫這兩個庫的版本要一致。opencv-contrib-python庫是opencv-python庫的升級版,人臉識別的算法在裡面。
  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • python 基於opencv 繪製圖像輪廓
    這篇文章主要介紹了python 基於opencv 繪製圖像輪廓的示例,幫助大家更好的利用python的opencv庫處理圖像,感興趣的朋友可以了解下
  • OpenCV人臉識別之一:數據收集和預處理
    本系列人臉識別文章用的是opencv2,最新版的opencv3.2的代碼請參考文章:《OpenCV之識別自己的臉——C++源碼放送》;《人臉識別源碼運行指南》(小編附在文末)前段時間對人臉檢測進行了一些嘗試:人臉檢測(C++/Python)(http://www.jianshu.com/p/504c081d7397)但是檢測和識別是不同的,檢測解決的問題是圖片中有沒有人臉;而識別解決的問題是
  • 測試~python庫介紹(一) opencv
    這個需求如果放在4年前,我的做法是這樣的1、取一款60FPS手機(若粒度精細可使用iPhone的慢動作,最高可達240fps),使用支架固定,打開開發者指針位置;2、取測試機放在鏡頭前,手動點擊app,跳轉完成後清除數據重複操作;3、用KMplayer播放視頻,按F鍵一幀一幀的計算圖像變化,算出啟用加載的總時長。
  • opencv教程-霍夫變換、圖像分割
    opencv示例的圖片和視頻:https://github.com/opencv/opencv/tree/master/samples/data1:模板匹配opencv裡的模板匹配就不說了,也就是從當前圖像提取模板圖像匹配還好,換一個不同圖片的模板就不行了,而且對縮放的模板匹配效果也很差,就說下基本流程如下:圖像灰度化→cv2.matchTemplate→cv2
  • 使用Python+OpenCV+Dlib實現人臉檢測與人臉特徵關鍵點識別
    該映射由67個點(稱為地標點)組成,可識別以下特徵:安裝要求與往常一樣,本文將用代碼演示示例,並將逐步指導你實現一個完整的人臉特徵識別示例。我們只是用imread加載圖像,然後告訴OpenCV在winname中顯示圖像,這將打開窗口並給它一個標題。之後,我們需要暫停執行,因為當腳本停止時,窗口會被破壞,所以我們使用cv2.waitKey來保持窗口,直到按下某個鍵,然後銷毀窗口並退出腳本。
  • OpenCV黑魔法之隱身衣
    歡迎關注 「小白玩轉Python」,發現更多 「有趣」我計劃分享一些有趣的實戰項目
  • 使用OpenCV進行圖像編輯--繪畫和素描
    點擊上方↑↑↑「OpenCV學堂」關注我
  • opencv教程-圖像反向投影
    先回顧下圖像直方圖,接口如下,比如使用灰度圖像:hist = cv.calcHist([img_gray], [0], None, [5], [0,256], accumulate=False)[0]:說明使用的第一個通道,灰度圖的話只能是0了;如果是彩色圖
  • 「python opencv 計算機視覺零基礎實戰」第一節
    opencv的全稱——Open Source Computer Vision Library,翻譯過來為「開源的計算機系統識別庫」。在opencv中,集成了很多方法,可以讓我們開發者很容易的完成某些視覺上的操作,完成某些目標;通過opencv,可以讓我們無需了解太多的算法知識,簡便的進行開發。
  • OpenCV系列(14)|點集凸包
    代碼:#include "opencv2/imgproc.hpp"#include "opencv2/highgui.hpp"#include <iostream>using namespace cv;using namespace
  • 10行代碼實現python人臉識別
    ↑ 關注 + 星標 ~ 有趣的不像個技術號什麼是人臉識別人臉識別,是基於人的臉部特徵信息進行身份識別的一種生物識別技術。用攝像機或攝像頭採集含有人臉的圖像或視頻流,並自動在圖像中檢測和跟蹤人臉,進而對檢測到的人臉進行臉部識別的一系列相關技術,通常也叫做人像識別、面部識別。目前的人臉識別技術已經非常成熟了,還發展成3D人臉識別。
  • OpenCV實現人臉對齊
    OpenCV實現人臉對齊一:人臉對齊介紹在人臉識別中有一個重要的預處理步驟-人臉對齊,該操作可以大幅度提高人臉識別的準確率與穩定性
  • 圖像識別與人工智慧圖像識別和機器視覺有什麼區別
    人工智慧領域發展到現在,ai與人工智慧、圖像識別領域、計算機視覺領域等近年來越來越多的整合和融合。首先,人工智慧在生活工作中將普遍應用;其次,人工智慧在不同的工作場景都有其應用,從金融到醫療,從服務到工廠,應用無處不在;最後,人工智慧正在與自動駕駛技術等聯繫在一起。
  • python利用opencv實現證件照換底
    網上交證件照的時候不同單位對底色的要求不一樣,當你手裡只有一張藍底照片,卻要求交紅底或者白底的證件照時,不免就尷尬了些。此時的你為了避免重拍的麻煩,不得不打開ps一點一點地去摳圖換背景,費時費力。opencv今天就給大家介紹一下python利用opencv庫進行藍底換紅底或者白底照片的操作。
  • 用OpenCV 去除圖片中的水印,騷操作!
    點擊上方 小張Python,加為星標第一時間收到 Python 技術乾貨!作者:Joel G這老哥的思路,總體為五部分1,首先將圖像轉化為灰度圖記為 A;2,利用霍夫圓在 A 中檢測最大的橢圓,然後在新的圖像中創建相同半徑的圓得到 B;
  • Numpy和OpenCV中的圖像幾何變換
    介紹上面的圖像使它不言而喻什麼是幾何變換。它是一種應用廣泛的圖像處理技術。例如,在計算機圖形學中有一個簡單的用例,用於在較小或較大的屏幕上顯示圖形內容時簡單地重新縮放圖形內容。它也可以應用於扭曲一個圖像到另一個圖像平面。例如,與其直視前方的場景,不如自上而下地看。在這個場景中應用透視圖變換來實現這一點。
  • 使用OpenCv和Dlib進行打哈欠檢測
    Dlib: Dlib是一個Python庫,包含了數據挖掘、數據結構、機器學習、圖像處理等工具。打哈欠檢測與應用打哈欠檢測就是使用OpenCV和Dlib來檢測打哈欠(由於疲勞或無聊而張大嘴巴深吸氣)。可廣泛應用於自駕車、駕駛員疲勞檢測、駕駛員睡意檢測、駕駛員意識檢測等領域。
  • Appium Python自動化測試環境搭建
    1、Appium安裝使用Appium,selenium是一定要安裝的,python安裝完成後會自帶pip工具,不過pip工具也需要在環境變量中path路徑配置一下(安裝OK後在CMD中輸入 pip --version查看是否安裝成功);作業系統