Appium適配Android7.0以上版本
- 測試機型: 華為榮耀V9
- 安卓版本: Android7.0
- appium版本: 1.65
說明:
公司新采購了一批安卓機器,拿了其中一臺華為榮耀V9跑之前寫的測試用例,發現每次登陸以后進入到MainActivity了之后,==元素就獲取不到了==,試了一下==driver.page_source==也是報了超時。本能反應是==Android7.0==的問題,于是去testerhome搜了巨多安卓7.0的東東。找到了一些頭緒。
感謝一下這位meil000小伙伴的分享~~
可以看到他說的3個關鍵:
- appium版本要高于1.63
- 啟動的時候要聲明automation版本
- 保障5037端口不被占用
解決方案:
- 版本問題
我這里下載的是1.65版本,看版本用以下命令。
如果版本過低,建議去官網下載最新的realease版本,也可以看下我的appium環境搭建里邊的如何安裝appium。
- 5037端口是否被占用
在控制臺輸入, netstat -ano | findstr 5037
這里findstr類似于grep的作用
可以看到listening狀態欄是被PID為13076占用了, 打開任務管理器找到PID為13076的進程。
可以看到是adb.exe占用了這個端口。
==不過這里我沒有遇到這個問題,這一步我跳過了。。。==
- 安裝Uiautomator2
使用npm安裝:
在控制臺輸入: npm install appium-uiautomator2-driver
我用的是cnpm安裝,如果用cnpm安裝的話請務必在你的nodejs目錄安裝,因為cnpm會默認安裝在當前目錄,會導致node找不到你安裝的包。
__author__ = 'Woody'
from appium import webdriver
desired_capabilities = dict(platformName="Android",platformVersion=7.0,
deviceName="6EB0217526007136",
appPackage="net.yitu8.drivier",
appActivity=".modles.WelcomeActivity",
newCommandTimeout=200,
automationName="uiautomator2")
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities)
print(driver.current_activity)
我們先來試試,一起踩坑~
首先我們在配置里邊加入automationName="uiautomator2"此選項適配Android7.0,運行代碼報錯了。。
提示: Command 'D:\Android\android-sdk-windows\build-tools\23.0.1\aapt.exe dump badging ==D:\nodejs\node_modules\_appium-uiautomator2-driver@0.4.0@appium-uiautomator2-driver\uiautomator2\appium-uiautomator2-server-v0.1.6.apk==' exited with code 1
吶,缺了這個apk~~
==前方高能==: 盡管你提示你安裝成功了,但其實并沒有。
比如我這兒就是如下提示:
提示安裝次數太多,失敗了。。。
一句話就想打發我?我不服。。
但是大家可以看到上面提供了下載地址, 我點開下載地址,原來是被墻了。。
沒事,我給大家提供一下這2個文件。
復制剛才提示的報錯信息里的路徑(我本機)D:\nodejs\node_modules_appium-uiautomator2-driver@0.4.0@appium-uiautomator2-driver在資源管理器打開。
然后把你下載的zip解壓到此目錄。
再次運行代碼,OK
==Android7.0環境下,case也可以照常運行了!!!==
溫馨提示: 如果不是我給的下載文件,是自己翻墻去github下的文件,可以看到apk server的版本是0.1.8而和報錯提示的0.1.6不一致,我這里直接改了0.1.8的文件名為0.1.6去適配這個問題,猜測源碼里寫死了,手動滑稽一下~~~
adb.exe的版本也需要注意喔,我一開始版本太低連不上Android7.0的機器。。
關鍵字: UiAutomator2
==有疑惑的同學歡迎大家一起討論~~~==