前言: 因为APP端 使用了 Android API25
appium 1.4.6使用的Uiautomator无法正常获取到API25的Android的页面,曾试过修改1.4.6的源码来尝试匹配,但是发现在新增了几个函数后APP登陆页面能搞定,后续页面需要增加更多的自定义函数,所以放弃这个方案,改升级环境
一卸载并重安装高版本node
一、所需环境:
下载 node-v10.3.0-x64.msi 备注:安装前先卸载老的node
二 安装appium server 1.81版(编写文档时所在版本):
1 先在CMD下转到nodejs所在路径
如果不知道安装路径 使用 where node查看
2 安装appium 如果已有以前安装的旧版本需要先卸载
npm install -g appium
-g是全局安装
3 使用以前安装的appium-doctor 查看环境是否准备好
这里报NODE未安装时因为,NODE是10.3.0的最新版本,而已安装的appium-doctor是旧版本无法识别NODE最新版本,用node -v查看确定环境正常,忽略这个报错
备注: 如果CMD 下 以上命令都无法执行,请检查环境变量是否设置
4 安装uiautomator-driver和uiautomator2-driver
npm install appium-uiautomator-driver
npm install appium-uiautomator2-driver
成功后在NODEJS文件夹如下路径 搜索是否存在相关APK
想知道uiautomator2控制android原理的可以参考https://testerhome.com/topics/9240
5 安装完毕后 调用uiautomator2 需要使用到driver的参数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
事实上Appium-Python-Client才是python和Appium的连接库,robotframework-appiumlibrary只是把Appium-Python-Client 针对robot ride又封装了一次
pip install Appium-Python-Client
pip install robotframework-appiumlibrary
如原来有先卸载如pip uninstall Appium-Python-Client,pip -list查看已安装的包
四 在robotframework-appiumlibrary源码添加元素判定函数:
修改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/自动化工具/robotframework-appiumlibrary 下载覆盖在本地python目录下
添加TEXT判定函数:
位置同上
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安装时报乱七八糟的错误, 升级pip
强制安装命令 python -m pip install -U --force-reinstall pip
3 appium 调用的APP超时时间太短 (默认60秒):
红色为改为6000秒,robot中同样
def StartAutomator2(platformName, platformVersion, deviceName):
'''
robotframework 当前版本调用uiautomator2有问题,需要先在PYTHON调用PYclient预先安装uiautomator2-server到目标机上
'''
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 安装中报 VCBuild.exe 问题
npm install--global--production windows-build-tools
5 node 安装中报 node-gyp不是内部命令:
npm install--globalnode-gyp
环境变量中增加C:\Users\Administrator\AppData\Roaming\npm
标蓝的为当前PC上用户目录(可能不是Administrator)
APPIUM本身是用不到gyp的,如果报这个实际是用到reinstall功能,代表着前面有其他错误.
6 appium安装卡在selendroid-standalone-0.17.0-with-dependencies.jar下载:
SVNtool路径里有selendroid-standalone-0.17.0-with-dependencies.jar包,建立一个WWW服务然后从SVN上下载这个包 WWW上顶替掉真实域名具体看
https://download.csdn.net/download/xmlbw/9748944#comment
7 Genymotion无法装载外部文件
ADB 设置成使用GENYmotion自带的
8 最新版本appiumlibrary导入RIDE后报红
查看RIDE日志
pip 安装six(python3.x和2.X的兼容包)
pip install six
也可能是robotframework-seleniumlibrary和selenium2个API与 APPIUM版本不匹配导致 挨个PIP安装
9 如何获取APP的appPackage和appActivity
1,打开APP。
2,执行> adb logcat>D:/log.txt
3, 胡乱的对APP做一些操作。
4, Ctrl+c 结束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下获取系统版本:adb shell getprop ro.build.version.release
获取系统api版本:adb shell getprop ro.build.version.sdk
网友评论