zoukankan      html  css  js  c++  java
  • 移动端测试——App基础操作(2)

    Appium

    1.1 App基础操作 API

    完成app自动化需要一些基础条件的支持:APP初始化API

    1.1.2 基础操作命令

    1. 前置代码

    # 导入driver对象
     from appium import webdriver
    
    import time
    
    # server 启动参数
    desired_caps = {}
    # 设备信息(系统、版本、设备号)
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '9'
    desired_caps['deviceName'] = '192.168.72.103:5555'
    # app信息(包名、启动名)
    desired_caps['appPackage'] = 'com.android.settings'
    desired_caps['appActivity'] = '.Settings'
    
    # 声明driver对象
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    
    time.sleep(5)
    # 关闭驱动对象
    driver.quit()
    

    2. 操作与命令

    操作 命令
    安装APK到手机
    (调用driver)
    driver.install_app(app_path)

    参数:

    app_path(脚本机器中APK文件路径)x:/xxx.apk

    注意:

    必须是绝对路径且是/

    eg:

    driver.install_app('D:/PycharmProjects/test/apk/Greenify.apk')
    安装APK到手机
    (调用adb)
    import os

    os.system("adb install 路径")

    参数:

    app_path(脚本机器中APK文件路径)

    格式:x:/xxx.apkx/xxx.apk

    eg:

    os.system("adb install apk/Greenify.apk")
    手机中移除APP driver.remove_app(app_id)

    参数:

    app_id(需要卸载的app包名)

    提醒:

    包名/启动名获取:

    adb shell dumpsys window windows | grep mFocusedApp | cut -d " " -f 7
    判断APP是否已安装 driver.is_app_installed(bundle_id)

    参数:

    bundle_id

    可以传入app包名,返回结果为True(已安装) / False(未安装)

    发送文件到手机 import base64

    base64编码-encode

    data = str(base64.b64encode(data.encode('utf-8')),'utf-8')

    driver.push_file(path,data)

    参数:

    path:手机设备上的路径(例如:/sdcard/a.txt)

    data:文件内数据,要求base64编码

    Python3.x中字符都为unicode编码,而b64encode函数的参数为byte类型,需要先转码

    生成的数据为byte类型,需要将byte转换回去

    从手机中拉取文件 import base64

    返回数据为base64编码

    data = driver.pull_file(path)

    base64解码-decode

    print(str(base64.b64decode(data),'utf-8'))

    参数:

    path: 手机设备上的路径

    获取当前屏幕内元素结构 driver.page_source

    作用:

    返回当前页面的文档结构,判断特定的元素是否存在

    不包括需要滚动才看到的页面

    参阅:

    3. 应用

    • 判断APP是否安装,存在则卸载,不存在则安装
    # 判断APP是否安装,存在则卸载,不存在则安装
    
    if driver.is_app_installed("com.oasisfeng.greenify"):
         driver.remove_app("com.oasisfeng.greenify")
    else:
         driver.install_app("D:/PycharmProjects/test/apk/Greenify.apk")
    
    • 判断当前设置页面是否有"网络和互联网"和 "电池"
    # 获取当前页面内的元素结构
    current_page_data  = driver.page_source
    
    for i in ("网络和互联网", "电池"):
        if i in current_page_data:
            print("True")
        else:
            print("False")
    

    4. 整理与总结

    • 初始化
      vim initDriver.py
    from appium import webdriver
    import os
    
    
    def init_driver():
        desired_caps = {
            # 系统
            'platformName': 'Android',
            # 版本
            'platformVersion': '9',
            # 设备号
            'deviceName': 'os.system("adb devices")|sed -n "2p"|cut -d " " -f 1',
            # 包名
            'appPackage': 'com.android.settings',
            # 启动名
            'appActivity': '.Settings',
            # 安装的APP
            # 'app': 'apk/xx.apk',
        }
        # 声明手机驱动对象
        driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
        return driver
    
    • 主程序
      vim main.py
    from init_driver.initDriver import init_driver
    import os
    import time
    import base64
    
    
    def push_myfile(tag, pc_path, phone_path, driver=None):
        # 电脑发送文件给手机
        # tag=1调用adb,tag=2调用appium
        if tag == 1:
            os.system("adb push %s %s" % (pc_path, phone_path))
        if tag == 2:
            with open(pc_path, 'r') as f:
                data = str(base64.b64encode(f.read().encode('utf-8')), 'utf-8')
                driver.push_file(phone_path, data)
    
    
    # def install_myapp(tag, path):
    
    if __name__ == '__main__':
        driver = init_driver()
    
        # adb方式校验
        push_myfile(tag=1, pc_path="hello.txt", phone_path="/sdcard/test.txt")
    
        # Appium方式校验
        push_myfile(tag=2, pc_path="hello.txt", phone_path="/sdcard/test.txt", driver=driver)
        driver.quit()
    

    1.2 手机控件查看工具uiautomatorviewer

    用来扫描和分析Android应用程序的UI控件的工具

    1.2.1 uiautomatorviewer使用

    1. 使用工具
    • 确保模拟机打开且没有连接上ADB
      adb kill-server
    • 运行批处理文件

    • 效果

    2. Q&A

    (1) 使用SDK自带的uiautomatorviewer.bat调用uiautomatorviewer.jar打开Ui Aotumator Viewer程序容易产生以下问题:

    产生原因:
    真机或模拟机的安卓系统版本与uiaotumatorviewer.jar的兼容性问题

    解决方法(已成功):

    参阅:

    名称 Windows的说明
    相关工具 https://www.lanzous.com/b944571/5kx9
    uiautomatorviewer.jar 下载后,进入 xxx/android-sdk/tools/lib目录

    先备份原来的jar包,再复制下载的jar包到该目录中

    LvmamaXmlKit.jar 将该文件发送到手机的/data/local/tmp/

    adb push LvmamaXmlKit.jar /data/local/tmp/

    验证:

    adb shell

    ls /data/local/tmp

    ADBKeyBoard.apk 将该文件发送到手机的/sdcard

    adb push ADBKeyBoard.apk /sdcard



    重启手机,运行uiaotumatorviewer.bat即可

    参阅:

    • 更换默认输入法

    参阅:


    更新中......


  • 相关阅读:
    angularjs 学习小结
    .NET 环境中使用RabbitMQ
    .NET 使用 Azure Blob 存储图片或文件
    PL/SQL Developer如何连接64位的Oracle图解
    安装Visual Studio 语言包时出现windows 程序兼容模式已打开.请将其关闭
    .NET Core使用Swagger视图时,出现undefined/swagger/v2/swagger.json的错误
    当gitlab密码修改后,无法拉取代码,提交推送代码。如何在本地修改正确密码
    C#对配置文件的,增,删,改,查
    C#log4net系统日志
    C#工厂模式-工厂方法
  • 原文地址:https://www.cnblogs.com/ricsy/p/11581642.html
Copyright © 2011-2022 走看看