环境升级----appium+robotframework适应A

2018-11-20  本文已影响0人  淡然如夏

前言: 因为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

上一篇下一篇

猜你喜欢

热点阅读