美文网首页
环境升级----appium+robotframework适应A

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

作者: 淡然如夏 | 来源:发表于2018-11-20 15:38 被阅读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

    相关文章

      网友评论

          本文标题:环境升级----appium+robotframework适应A

          本文链接:https://www.haomeiwen.com/subject/lllxqqtx.html