前言: 因?yàn)锳PP端 使用了 Android API25?
appium 1.4.6使用的Uiautomator無法正常獲取到API25的Android的頁(yè)面欲侮,曾試過修改1.4.6的源碼來嘗試匹配,但是發(fā)現(xiàn)在新增了幾個(gè)函數(shù)后APP登陸頁(yè)面能搞定谆构,后續(xù)頁(yè)面需要增加更多的自定義函數(shù)愁溜,所以放棄這個(gè)方案逼争,改升級(jí)環(huán)境
一卸載并重安裝高版本node
一搓蚪、所需環(huán)境:
下載 node-v10.3.0-x64.msi? 備注:安裝前先卸載老的node
二 安裝appium server 1.81版(編寫文檔時(shí)所在版本):
?1 先在CMD下轉(zhuǎn)到nodejs所在路徑
如果不知道安裝路徑 使用 where node查看
2 安裝appium 如果已有以前安裝的舊版本需要先卸載
npm install -g appium
-g是全局安裝
3 使用以前安裝的appium-doctor 查看環(huán)境是否準(zhǔn)備好
這里報(bào)NODE未安裝時(shí)因?yàn)椋琋ODE是10.3.0的最新版本疼邀,而已安裝的appium-doctor是舊版本無法識(shí)別NODE最新版本喂江,用node -v查看確定環(huán)境正常,忽略這個(gè)報(bào)錯(cuò)
備注: 如果CMD 下 以上命令都無法執(zhí)行旁振,請(qǐng)檢查環(huán)境變量是否設(shè)置?
4 安裝uiautomator-driver和uiautomator2-driver
npm install appium-uiautomator-driver
npm install appium-uiautomator2-driver
成功后在NODEJS文件夾如下路徑 搜索是否存在相關(guān)APK
想知道uiautomator2控制android原理的可以參考https://testerhome.com/topics/9240
5 安裝完畢后 調(diào)用uiautomator2 需要使用到driver的參數(shù)automationName 下面是示例
def Tap():
desired_caps = {}
desired_caps['platformName'] ='Android'
?desired_caps['platformVersion'] ='7.1.1'
?desired_caps['deviceName'] ='192.168.177.101:5555'
?# desired_caps['appPackage'] = 'com.android.email'
# desired_caps['appActivity'] = '.activity.setup.AccountSetupFinal'
?desired_caps['appPackage'] ='com.newhope.smartpig.test1'
?desired_caps['appActivity'] ='com.newhope.smartpig.module.main.LoginActivity'
?desired_caps['automationName'] ='uiautomator2'
?driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
robotframework上:
open Applicationhttp://localhost:4723/wd/hubplatformName=${Data['platformName']}?? ?platformVersion=${Data['platformVersion']}?? ?deviceName=${Data['deviceName']}?? ?app=${CURDIR}/apk/${Data['app']}?? ?appPackage=com.newhope.smartpig.test1?automationName=uiautomator2?
三 更新robotframework-appiumlibrary 和 Appium-Python-Client
事實(shí)上Appium-Python-Client才是python和Appium的連接庫(kù)获询,robotframework-appiumlibrary只是把Appium-Python-Client 針對(duì)robot ride又封裝了一次
pip install Appium-Python-Client
pip install robotframework-appiumlibrary
如原來有先卸載如pip uninstall? Appium-Python-Client,pip -list查看已安裝的包
四 在robotframework-appiumlibrary源碼添加元素判定函數(shù):
修改D:\Python27\Lib\site-packages\robotframework_appiumlibrary-1.4.6-py2.7.egg\AppiumLibrary\keywords\_element.py(PYTHON安裝路徑)
添加DEF
def is_element_exist(self, locator):
application =self._current_application()
elements =self._element_finder.find(application, locator, None)
return len(elements) >0
用于判斷APP元素是否存在 存在返回True,不存在返回False
或者去http://172.16.10.163:9010/svn/test_code/auto/自動(dòng)化工具/robotframework-appiumlibrary 下載覆蓋在本地python目錄下
添加TEXT判定函數(shù):
位置同上
def is_text_exist(self,text):
text_norm = normalize('NFD', text)
source_norm = normalize('NFD', self.get_source())
return text_normin source_norm
用于判斷TEXT 是否存在 存在返回True,不存在返回False
問題集錦:
1 setuptoolstoo old:
pip install --upgrade setuptools
2 pip安裝時(shí)報(bào)亂七八糟的錯(cuò)誤拐袜, 升級(jí)pip
強(qiáng)制安裝命令 python -m pip install -U --force-reinstall pip
3 appium 調(diào)用的APP超時(shí)時(shí)間太短 (默認(rèn)60秒):
紅色為改為6000秒吉嚣,robot中同樣
def StartAutomator2(platformName, platformVersion, deviceName):
'''
robotframework 當(dāng)前版本調(diào)用uiautomator2有問題蹬铺,需要先在PYTHON調(diào)用PYclient預(yù)先安裝uiautomator2-server到目標(biāo)機(jī)上
'''
?desired_caps = {}
desired_caps['platformName'] =str(platformName)
desired_caps['platformVersion'] =str(platformVersion)
desired_caps['deviceName'] =str(deviceName)
desired_caps['appPackage'] ='com.newhope.smartpig.test1'
?desired_caps['appActivity'] ='com.newhope.smartpig.module.main.LoginActivity'
? desired_caps['automationName'] ='uiautomator2'
? desired_caps['newCommandTimeout'] = '6000'
? driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(3)
driver.close_app()
driver.quit()
robot ride:
open Applicationhttp://localhost:4723/wd/hubplatformName=${Data['platformName']}?? ?platformVersion=${Data['platformVersion']}?? ?deviceName=${Data['deviceName']}?? ?app=${CURDIR}/apk/${Data['app']}?? ?appPackage=com.newhope.smartpig.test1?? ?automationName=uiautomator2?? ?newCommandTimeout=6000
4 node 安裝中報(bào) VCBuild.exe 問題
npm install--global--production windows-build-tools
5 node 安裝中報(bào) node-gyp不是內(nèi)部命令:
npm install--globalnode-gyp
環(huán)境變量中增加C:\Users\Administrator\AppData\Roaming\npm
標(biāo)藍(lán)的為當(dāng)前PC上用戶目錄(可能不是Administrator)
APPIUM本身是用不到gyp的,如果報(bào)這個(gè)實(shí)際是用到reinstall功能甜攀,代表著前面有其他錯(cuò)誤.
6 appium安裝卡在selendroid-standalone-0.17.0-with-dependencies.jar下載:
SVNtool路徑里有selendroid-standalone-0.17.0-with-dependencies.jar包秋泄,建立一個(gè)WWW服務(wù)然后從SVN上下載這個(gè)包 WWW上頂替掉真實(shí)域名具體看
https://download.csdn.net/download/xmlbw/9748944#comment
7 Genymotion無法裝載外部文件
ADB 設(shè)置成使用GENYmotion自帶的
8 最新版本appiumlibrary導(dǎo)入RIDE后報(bào)紅
查看RIDE日志
pip 安裝six(python3.x和2.X的兼容包)
pip install six
也可能是robotframework-seleniumlibrary和selenium2個(gè)API與? APPIUM版本不匹配導(dǎo)致 挨個(gè)PIP安裝
9 如何獲取APP的appPackage和appActivity
1琐馆,打開APP。
2恒序,執(zhí)行> adb logcat>D:/log.txt
3瘦麸, 胡亂的對(duì)APP做一些操作。
4歧胁, Ctrl+c 結(jié)束adb命令滋饲。
5, 打開log.txt文件与帆,搜索:Displayed?
appPackage: ? com.android.messaging
appActivity:.ui.conversationlist.ConversationListActivity
10 ride不打印日志解決
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd0 in position 0: invalid continuation byte
修改RIDE源碼:
Python27\lib\site-packages\robotide\contrib\testrunner\testrunner.py
11 如何查看Android模擬器版本 和API版本:
CMD下獲取系統(tǒng)版本:adb shell getprop ro.build.version.release
獲取系統(tǒng)api版本:adb shell getprop ro.build.version.sdk