Appium简介及使用,手机自动化adb常用命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Appium简介及adb常用命令


一、Appium简介

1.appium的组成

  • 自动化脚本即client端(通过Java编写的代码,也可以通过其他语言编写)
  • Appium指令服务器
  • sdk通信环境(Android模拟器)或移动端设备

2.appium工作原理

  • Client端发送自动化指令给Appium server,Appium Server接收到client发送的指令后,转换为移动端能够识别的指令,然后发送给移动端设备,并对移动端设备进行操作。
  • 具体原理可查看下面两位大佬的帖子,原理描述的非常详细:
    1.Appium工作原理
    2.Appium工作原理

二、adb常用命令

  1. 设备选择:
    adb -d 指定唯一真机
    adb -e 指定唯一模拟器
    adb -s 指定相应serialNumber号的设备
  2. 查询设备:
    adb devices
  3. 打开谷歌模拟器,连接模拟器:
    emulator @avd_name
    adb connect deviceName
  4. 安装卸载应用:
    adb install path
    adb uninstall appPackage
  5. 设备与电脑互传文件,截图,录屏:
    adb push 电脑路径 设备路径
    adb pull 设备路径 电脑路径
    截图: adb shell screencap 设备路径
    录屏: adb shell screenrecord 设备路径
  6. 调用Activity管理器 am:
    启动应用: adb shell am start -n 包名/Activity名
    强制停止应用: adb shell am force-stop 包名
  7. 调用软件包管理器 pm:
    显示所有应用: adb shell pm list packages
    只显示系统应用: adb shell pm list packages -s
    只显示第三方应用: adb shell pm list packages -3
    列出所用测试软件包:adb shell pm list instrumentation
    删除与软件包关联的所有数据: adb shell pm clear 包名
  8. 调用dumpsys,获取连接设备上的所有系统服务的诊断输出:
    获取前台包名: adb shell dumpsys activity | findstr mFocusedActivity
    检查输入诊断: adb shell dumpsys input
    测试界面性能: adb shell dumpsys gfxinfo 包名
    检查电池诊断: adb shell dumpsys batterystats-charged 包名
    查看CPU信息: adb shell dumpsys cpuinfo
    查看内存信息: adb shell dumpsys meminfo
    获取内存占用情况统计信息: adb shell dumpsys procstats --hours 3
  9. 日志信息:
    屏幕输出日志: adb logcat
    通过标签过滤: adb logcat -s 标签
    显示时间: adb logcat -v time adb shell dumpsys acticity top
    输出所有信息: adb logcat -v long
    输出日志到文件: adb logcat -v time >log.txt
    清除旧日志信息: adb logcat -c
  10. Monkey基本用法:
adb monkey 参数 随机发送事件
参数:
-v: 指定反馈信息级别,总过分3个级别
-s: 指定伪随机数生成器的seed值
-p: 用于约束限制,用此参数指定一个或者多个包
--throttle: 每个事件结束后的间隔时间
--ignore-crashes: 忽略崩溃
--ignore-timeouts: 忽略超时
--ignore-security-exceptions: 忽略安全异常
--ignore-native-crashes: 忽略本地代码导致的崩溃异常
--monitor-native-crashes: 跟踪本地方法的崩溃问题
事件:
--pct-touch: 触摸事件
--pct-motion: 滑动事件
--pct-appswitch: activity之间的切换
--pct-pinchzoom: 缩放事件
--pct-rotation: 屏幕旋转事件
--pct-flip: 键盘事件
--pct-anyevent: 任意事件

adb shell monkey -p appPackage -v -v -v --pct-touch 30 --pct-motion 30 --pct-appswitch 20 --pct-flip 10 --pct-anyevent 10 -s 12345 --throttle 300 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes 100 >monkey_log.txt

日志处理:
程序无响应:ANR
崩溃问题: CRASH
其他问题:Exception
  1. 获取Android手机的屏幕上的空间列表:
    adb shell "uiautomator dump && cat /sdcard/window_dump.xml"

三、appium交互

1.Capability 设置

        caps = {
    
    }
        # 系统名称
        caps['platformName'] = 'Android'
        # 系统版本
        caps['platformVersion'] = '6.0'
        # 设备名称
        caps['deviceName'] = 'deviceName'
        # 设备包名
        caps['appPackage'] = 'appPackage'
        # 设备窗口页面
        caps['appActivity'] = 'appActivity'
        # 是否重置测试的环境
        caps['noReset'] = 'true'
        # 首次启动的时候,不停止 app
        # caps['dontStopAppOnReset'] = 'true'
        # 跳过设备初始化,
        caps['skipDeviceInitialization'] = 'true'
        # 启用 Unicode 输入
        caps['unicodeKeyBoard'] = 'true'
        # 在运行 Unicode 测试后,将键盘重置为其原始状态
        caps['resetKeyBoard'] = 'true'
        # 通过页面检测来增强其 webview 检测
        # caps['ensureWebviewsHavePages'] = 'true'
        # 加载动态页面时间设置为0s
        # caps['settings[waitForIdleTimeout]'] = 0
        # 指定对应版本的webdriver的路径
        # skipDeviceInitialization:true, false 跳过安装,权限设置等操作
        caps['chromedriverExecutable'] = 'chromedriver-path'
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
  1. 详细参数可查看appium官网:
    Desired Capabilities
  2. 元素定位:
    手机界面定位方式与web界面定位方式类似(不能使用css selector方式定位),根据id或者相对路径定位;
    cmd中输入命令uiautomatorviewer打开该工具定位(无法验证定位方式);
    使用appium-desktop的inspector定位(可验证定位方式);
    webview中的元素需要pc端访问:chrome://inspect/#devices,点击Webview里的inspect,即可弹出当前webview的HTML视图
  3. 控件交互:
  • 点击方法:element.click()
  • 输入操作:element.send_keys(“”)
  • 设置元素的值:element.set_value(“”)
  • 清除操作:element.clear()
  • 是否可见:element.is_displayed 返回 true or false
  • 是否可用:element.enabled() 返回 true or false
  • 是否被选中:element.is_selected() 返回 true or false
  • 获取属性值:element.get_attribute(name)
  • 获取元素文本:element.text
  • 获取元素坐标:element.location
    结果:{‘y’:19,‘x’:498}
  • 获取元素尺寸(高和宽):element.size
    结果:{‘width’:500,‘height’:22}
  • 查看上下文: driver.contexts
  • 切换上下文:switch_to.context()
  • 查看窗口句柄:driver.window_handles
  • 切换窗口句柄:driver.switch_to.window()
  • 获取toast属性:toast = driver.find_element(By.XPATH, '//*[@class="toast"]').text
  • 滚动查找:
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiScrollable(new UiSelector().'
                                                               'scrollable(true).instance(0)).'
                                                               'scrollIntoView(new UiSelector().text("带查找文本").'
                                                               'instance(0));').click()

总结

appium的基本使用与adb命令的基本使用

猜你喜欢

转载自blog.csdn.net/qq_45868731/article/details/124197979