當咱們在寫自動化測試腳本的時候,傳統狀況下必定要知道元素的屬性,如id、name、class等。那麼經過AI的方式定位元素可能就不須要知道元素的屬性,評價人對元素的判斷來定位,好比,看到一個搜索框,直接使用ai:search
來定位, 或者我想定位一個關閉按鈕,之直接使用 ai:close
,咱們並不須要知道這搜索框和關閉按鈕的屬性。node
appium 經過插件的方式能夠支持AI定位。爲體驗一個這種定位方式我花了兩週時間。python
首先,須要一些系統依賴項來處理圖像。android
brew install pkg-config cairo pango libpng jpeg giflib
sudo apt-get install pkg-config libcairo2-dev libpango* libpng-dev libjpeg-dev giflib*
暫不支持。git
若是遇到問題,您可能必須單獨安裝每一個包。github
我一開始在Windows試了半天不成功,由於我有現成的appium環境,後來發現壓根不支持,因而,換成了macOS, 因此後面的操做在macOS下完成,固然,若是你有Linux環境,我以爲也是OK的。web
由於我要操做的移動設備是Android, 因此須要安裝Android SDK, 那麼Android Studio集成了Android SDK。shell
下載android studio: https://developer.android.com/studionpm
在安裝Android Studio的過程當中須要設置android SDK的路徑,個人路徑爲:android-studio
/Users/tech/Library/Android/sdk
而後,須要配置環境變量:sudo vi ~/.bash_profile
bash
ANDROID_HOME=/Users/tech/Library/Android/sdk PATH=${PATH}:${ANDROID_HOME}/platform-tools PATH=${PATH}:${ANDROID_HOME}/tools
最後,使配置生效:source ~/.bash_profile
一、不要使用appium-desktop, 經過命令方式安裝appium。
> brew install node # get node.js > npm install -g appium # get appium
二、安裝appium-doctor
> npm install appium-doctor
三、經過appium-doctor
命令檢查環境:
> appium-doctor info AppiumDoctor Appium Doctor v.1.11.0 info AppiumDoctor ### Diagnostic for necessary dependencies starting ### info AppiumDoctor ✔ The Node.js binary was found at: /usr/local/bin/node info AppiumDoctor ✔ Node version is 10.15.1 WARN AppiumDoctor ✖ Xcode is NOT installed! info AppiumDoctor ✔ Xcode Command Line Tools are installed in: /Library/Developer/CommandLineTools info AppiumDoctor ✔ DevToolsSecurity is enabled. info AppiumDoctor ✔ The Authorization DB is set up properly. WARN AppiumDoctor ✖ Carthage was NOT found! info AppiumDoctor ✔ HOME is set to: /Users/tech info AppiumDoctor ✔ ANDROID_HOME is set to: /Users/tech/Library/Android/sdk info AppiumDoctor ✔ JAVA_HOME is set to: /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home info AppiumDoctor ✔ adb exists at: /Users/tech/Library/Android/sdk/platform-tools/adb info AppiumDoctor ✔ android exists at: /Users/tech/Library/Android/sdk/tools/android info AppiumDoctor ✔ emulator exists at: /Users/tech/Library/Android/sdk/tools/emulator info AppiumDoctor ✔ Bin directory of $JAVA_HOME is set ...
GtiHub地址:https://github.com/testdotai/appium-classifier-plugin
使用Appium 1.9.2-beta版以上。另外,必定要使用 XCUITest 驅動程序(用於iOS)或UiAutomator2或Espresso驅動程序(用於Android)。較老的iOS和Android驅動程序不支持所需的Appium在任何狀況下,都不推薦使用。
要使這個插件對Appium可用,只需轉到主appium項目的安裝目錄下面,並運行:
> cd /usr/local/lib/node_modules/appium > npm install test-ai-classifier
將這個插件安裝到Appium的依賴樹中,並使其可用。
我在安裝這個插件的時候各類報錯,你能夠試試下面的命令。
> sudo npm --registry http://registry.npm.taobao.org install test-ai-classifier --unsafe-perm
一、經過命令的方式啓動appium
> appium [Appium] Welcome to Appium v1.14.0 [Appium] Appium REST http interface listener started on 0.0.0.0:4723 ...
二、編寫自動化測試腳本:
from appium import webdriver from time import sleep CAPS = { "deviceName": " MEIZU_E3", "automationName": "UiAutomator2", "platformName": "Android", "platformVersion": "7.1.1", "appPackage": " com.meizu.flyme.flymebbs", "appActivity": ".ui.LoadingActivity", "noReset": True, "unicodeKeyboard": True, "resetKeyboard": True, "customFindModules": {"ai": "test-ai-classifier"}, "testaiConfidenceThreshold": 0.1, "shouldUseCompactResponses": False, } driver = webdriver.Remote('http://localhost:4723/wd/hub', CAPS) sleep(3) # 用 AI 定位到搜索框 driver.find_element_by_custom("ai:search").click() sleep(5) driver.find_element_by_id("com.meizu.flyme.flymebbs:id/kf").send_keys("flyme") driver.find_element_by_id("com.meizu.flyme.flymebbs:id/o7").click() result = driver.find_elements_by_id("com.meizu.flyme.flymebbs:id/a2a")[0].text print(result) driver.quit()
automationName
若是要測試的是Android的話,必需要指爲UiAutomator2
或 Espresso
。
customFindModules
必需要指定爲 {"ai": "test-ai-classifier"}
。
testaiConfidenceThreshold
此功能決定了考慮元素的最低置信度。默認狀況下,值爲0.2。參數介於0和1之間的數字,其中1表示信心必須完美,0表示根本不須要信任。
shouldUseCompactResponses
這指示appium在找到元素時包含有關元素的額外信息,這大大加快了獲取此插件的輸入過程。
最終,我要體驗的代碼就是這一行:
driver.find_element_by_custom("ai:search").click()
經過ai來定位搜索框。
確實定位到了,但是定位的速度特別慢,大概須要10~20秒。
若是,你想知道 appium-classifier-plugin
支持那些類型的元素定位,看這裏:https://github.com/testdotai/appium-classifier-plugin/blob/master/lib/labels.js
目前支持100多種類型。