APP测试

  • 掌握基于敏捷开发放的测试流程
  • 掌握app的测试要点, 熟悉各种专项测试的关注点
  • 熟悉GT工具的使用, 能使用GT工具进行对应的性能测试

  1. app测试基础

1. app测试与web测试的区别

  相同点:

1. APP和web使用的后端服务器是相同的

2. 前端后端都是用HTTP进行交互

  不同点:

1. APP是c/s结构, web浏览器是b/s结构

2. app前后端交互的数据格式以json为主, web前后端交互的数据格式以HTML为主

2. app测试理论

  1. app的应用架构

app属于c/s架构, 是通过HTTP协议来传输数据的, 通过json的格式来传送数据的

  2. app项目环境及发布平台

1. app项目环境(后端服务器环境)

  • 开发环境    是给开发人员进行代码联调的, 给开发进行自测的
  • 测试环境    用来给测试人员进行测试用的, 测试环境也可能分为手工测试环境和自动化测试环境
  • 预发布环境    当项目要上线时, 做最后一轮的验收测试时, 预发布环境的数据和生产环境的数据是一致的
  • 镜像环境    当生产环境出现问题时, 把生产环境的相关数据以及代码全部拉到镜像环境, 复现生产上的问题, 然后由测试人员协助开发人员复现问题, 然后由开发人员去进行问题的定位和分析
  • 生产环境    给用户或是客户使用的环境(生产环境测试人员不能随意操作, 由运维人员管理的)

2. 灰度发布

  指在发布生产环境的过程当中, 先发布其中几台服务器, 如果这几台服务器功能运行一段时间后能够正常使用, 再把其他未升级或者为发布的服务器进行生产环境的发布, 如果先发布的服务器存在问题, 那么就要回滚带原来的版本

3. app项目发布平台

  • android   安卓app文件的后缀名是   apk
  • ios    苹果app文件的后缀名是   ioa
  • 获取app安装包文件的方式一:
    • android  可以直接找开发给出对应的安装包
    • IOS   直接将手机给开发人员, 让开发人员安装对应的ipa包
  • 获取aoo安装包文件的方式二:
    • 可以借助内测平台      国内使用的是蒲公英, 国外使用的是fir.im
    • 测试包生成之后会上传到蒲公英平台, 然后生成一个链接地址(二维码), 可以直接通过二维码或者链接地址下载对应的测试包
  • 生产app安装包的获取
    • anroid app安装包    豌豆荚, 应用宝, 360手机助手, 各类手机品牌商城
    • ios     app安装包   appstore

  3. 敏捷开发模式

1. 互联网特点

  • 互联网行业的特点:    追求创新, 以快吃慢, 需求高度不确定性
  • 互联网行业的产品开发的特点: 新需求, 新方向
  • 降低项目风险, 确保正确方向: 快速的反馈机制, 快速试错的流程(针对需求的不确定性)

2. 敏捷开发概念

  以用户需求为核心, 采用迭代, 循序渐进的方法进行软件开发

  在敏捷开发的过程当中, 软件项目在构建初期会被分成不同的子系统以及不同的迭代, 各个子项目的成果经过测试, 具备可视, 可集成和可运行的特征

3. 敏捷框架模型

  1. Lean-Agile
  2. Scrum
  3. XP
  4. DSDM
  5. Kanban
  6. Crystal

4. Scrum框架模型

1. 流程

  Scrum是一个敏捷开发框架, 是一个增量的, 迭代的开发过程, 在这个框架中, 整个开发周期包括若干个小的迭代周期, 每个小的迭代周期成为一个Sprint(sprint: 项目开发过程中最小迭代周期), 每个sprint的周期建议为2~4周, 在Scrum中, 将产品Backlog(产品代办列表)an商业价值排除需求列表, 在每个迭代中开发团队从产品Backlog挑选最有价值的需求进行开发, 实现后产品推出市场, 进入下一个迭代

 

 2. Scrum的三种角色

  1. Product owner(产品负责人)

    1. 定义所有的产品功能

    2. 决定产品的发布内容与日期

    3. 根据市场的变化对需要开发的功能排列优先顺序

  2. Scrum Master(项目经理)

    1. 领导团队完成Scrum的实践以及体现其价值

    2. 确保团队的人胜任其工作, 并保持高效的生产率

    3. 保护团队不受外界无端影响

  3. Dev Team(开发团队)

    1. 规模(经典团队一般5-9人)

    2. 成员组成

      1. 程序员

      2. 测试员

      3. 用户体验师

    3. 主要职责

      1. 实现客户的需求

3. 每日立会

  知道每天干了什么, 明天计划干什么, 以及遇到的问题. 一般早上开会, 15分钟左右

3. app测试流程

  • 参与需求评审        评审前一定看需求文档
  • 制定测试计划        一般由测试负责人或测试主管制定
  • 设计编写测试用例        如果人力时间紧张, 可以不用谢用例 需要些测试点, 用例评审
  • 执行用例, 跟踪缺陷        搭建环境, 冒烟测试(有可能不做)
  • 编写提交版本测试报告

  2. app手工测试

1. app测试要点

  • 功能测试
  • 兼容性测试
  • 安装, 卸载, 升级测试
  • 交叉事件测试
  • PUSH测试
  • 性能测试
    • CPU
    • 内存
    • 流量
    • 电量
    • 流畅度
    • 启动速度
  • 用户体验测试
  • 稳定性测试

2. 业务功能测试

根据测试功能去拆分功能点, 再根据功能点去分析测试点

3. 兼容性测试(app专项测试)

  • 系统       1. android   2. ios
  • 手机系统版本       覆盖主流
    • android
    • ios
  • 品牌-机型    覆盖主流
    • android     华为, 小米, vivo
    • IOS   苹果
  • 屏幕分辨率     覆盖主流
  • 软硬件兼容性
    • 与手机硬件兼容
    • home键, 电源键, 音量调节键等
    • 与外部硬件兼容
    • 耳机, 蓝牙
    • 与操作系统软件兼容
    • wlan设置, 系统时间调节, LBS定位等
    • 与其他APP兼容
    • 后台在播放音乐时, 进入动态页面点击动态视频播放, 系统如何处理
  • 网络兼容性
    • 2G\3G\4G\5G\WIFI

注意:

  1. 不可能去做全兼容测试
  2. 可以去做深度兼容测试, 需要借助于第三方云测试平台. testin云测
  3. 步骤: 在云测平台上注册账号, 上传app, 给钱, 获取测试报告

4. 安装卸载和升级(app专项测试)

   只要能想到的, 都可以进行测试, 没有对错之分

1. 安装测试点:

  • 正常场景
    • 在不同的操作系统, 不同的手机版本进行安装
    • 从不同渠道下载app进行测试
    • 不同的安装路径, 安装在手机的内存或SD卡
  • 异常场景
    • 安装时出现异常(关机, 断网), 恢复后能否继续安装
    • 安装时存储空间不够或内存不足
    • 安装之后点击取消再安装
    • 安装之后再次覆盖安装
    • 低版本覆盖安装高版本

2. 卸载测试点

  • 正常场景
    • 长按app图标正常删除卸载
    • 通过第三方工具卸载
  • 异常卸载
    • app正在运行时卸载
    • 卸载过程中取消卸载
    • 卸载过程中关机
    • 卸载之后数据是否保留

3. 升级

  • 正常场景
    • 从低版本升级到高版本
    • 从app内部升级
    • 从app应用商城升级
  • 异常升级
    • 跨版本升级
    • 升级提示
    • 升级时关机
    • 升级时电量不足
  • 升级之后的数据检查

 5. 交叉测试

又称冲突测试或者干扰测试

  1. app运行时接打电话
  2. app运行时收发短信
  3. app运行时接到推送通知
  4. app运行时接到视频通话
  5. app运行时连接蓝牙
  6. app运行时切换网络, 切换应用
  7. app运行时旋转屏幕

6. push消息推送测试

  • 消息推送的场景
    • 新闻资讯类通知      让用户实时获取到自己感兴趣的新闻, 从而增加用户的粘性
    • 商城类通知        让用户获取到商城的促销活动, 提高用户的成交率
    • 流程类通知        让用户及时获取处理工作的内容
  • 推送原理       是由服务器通过推送的服务器将对应的消息推送到app端, 是一个长连接的状态
  • 推送服务器    使用的是第三方推送服务器(极光或者信鸽)
  • 手机厂商会有自己的推送服务器
  • 中小企业不会自己搭建推送服务器, 一般都是使用第三方推送服务器
  • push消息推送的关注点
    • push消息推送是否按指业务规则发送
    • 当push推送时, 检查是否按特定用户去进行推送
    • 设置不接收消息时, 确认是否正常
    • 推送通知的跳转是否正常
    • 推送消息的打开及展示
    • 包括app是否在运行, 都需要去关注推送消息是否能收到

7. 性能测试

1. 开启手机开发者模式以及超级管理员访问模式

  1. 打开USB调试     点击系统应用->设置        最下方选择"关于平板电脑"        点击版本号       直接提示开发者选项已打开

  2, 返回设置菜单界面        找到'开发者选项'       点击进入        打开USB调试以及指针位置 

  3. 开启超级管理员访问权限

点击'系统应用'->文件管理器        文件管理器上方有三个横线            在弹出的界面中点击左下方齿轮按钮       进入到设置页面后        选择常规设置->访问模式        将访问模式改为超级管理员访问模式

2. 性能工具介绍及安装

  • GT随身调      anroid版是由腾讯公司开发大道性能测试平台, 直接运行在手机上面
  • 可以通过GT工具进行基础的性能测试:   内存, CPU, 电量, 网络流量, 流畅度, 可以绘制图表的形式显示出指标的相关数据
  • GT工具提供了查看日志的功能, 可以通过查看相关日志来分析和定位app功能异常以及crash等问题

3. CPU测试

  1. GT 工具提供了两个CPU监控指标:   CPU和jiffies

  2. CPU指标就是指当前手机中CPU的整体使用率

    用户态:  cpu处于应用程序执行的时间

    系统态: 表示的是系统内核执行的时间

    空闲态: 表示空闲系统进程执行的时间

    cpu使用率 = CPU空闲态/CPU总的执行时间

  3. jiffies:   表示开机以来, 程序消耗的CPU时间片的总数

  4. CPU问题的影响

    1. CPU使用时间长时间处于90%以上(70, 80)

    2. 手机发热, 耗电量增加

    3. 反应变慢, 引起ANR(假死状态)

4. 内存测试

  1. PSS和private dirty

    1. private dirty(私有内存):

      进程独占的内存, 也就是进程销毁时可以回收的内存容量

    2. PSS(实际使用内存):

      将跨进程共享内存也加入进来, 进行按比例计算PSS, 就能够准确的表示进程占用的实际物理内存

  2, 常见问题

    1. 内存泄漏

      内存泄漏(memory leak): 当程序运行申请了对应的内存空间, 而当程序销毁时并没有释放对应的内存空间

    2. 内存溢出

      内存溢出(out of memory): 程序在申请内存空间时, 没有足够的内存空间供其使用

  3. 内存问题产生的影响

    1. 程序实际使用内存PSS会不断的增长

    2. 程序会出现闪退(crash)

  4. 内存的指标根据不同的手机配置, 以及不同的公司, 指标值不一样

3. 流畅度测试

  1. GT工具提供了流畅度的监控指标:   FPS

  2. FPS指的是人肉眼能看到画面每一秒的帧数

  3. 效果:  想要达到流畅的效果, 至少每秒的帧数要达到24帧

  4. 每秒的帧数越高, 流畅度越好

  5. 如果想要达到最佳的流畅度, 需要达到每秒60帧

  6. 当页面静止不动时, FPS的值显示的是0

 4. 流量测试

GT工具中提供了一个人监控流量的指标: NET

流量: 手机在访问网络过程当中所产生的上传和下载的数据(报文)就称为流量

  • 常用流量测试方法
    • 抓包测试法
      • 通过抓包工具将所有的网络应用数据包, 全部抓取到并保存到某个文件中, 进行分析的过程
      • wireshark所有协议的报文, sniffer也可以抓取所有报文, tcpdump命令可以抓所有报文
    • 统计测试法
      • 获取的是某一个应用程序获取的数据报文, 统计出对应的流量
  • GT工具的测试步骤
    • 打开GT到AUT页面, 选择被测试的app, 勾选NET指标
    • 进入到参数界面, 点击编辑, 拖选NET参数, 勾选并点击录制
    • 进入待日志界面, 选择抓包, 再点击开始
    • 返回到AUT界面, 点击启动, 启动测试app
    • 返回参数界面, 停止录制, 再返回到插件界面, 点击抓包, 再点停止

流量的优化

  • 数据压缩       在HTTP协议中可以通过此字段将数据进行压缩, 减少数据容量.  请求头中: content-encoding: gzip
  • 不同的数据格式采用   json(简便)   xml
  • 控制访问频次       通过一部加载的方式来加载数据
  • 只获取必要数据
  • 缓存机制
  • 懒加载   将多个图片放在同一张图片中, 一起加载

5. 电量测试

GT工具中提供了电量的监控指标: 电流, 电压, 电量跟温度

指移动设备电量消耗快慢的一种测试方法, 一般用平均电流来衡量电量的消耗速度

常见的耗电场景

  • 定位, GPS
  • 网络传输
  • 蓝牙
  • 屏幕的亮度

GT工具只能特定类型的机型进行电量设置

可换其他性能测试工具进行测试, 也可使用对比的方式进行测试(拿同类型的产品, 在同样的手法同样的场景下进行对比测试)

6. 用户体验测试

用户体验测试主要跟app的界面有关

  • UI界面测试      包括界面设计, 界面元素框架, 结构, 颜色, 布局, 图片, 按钮选中的一些特效, 文字的内容
  • 易用性测试      菜单的层次, 完成业务操作的步骤是否过多, 点击按钮的范围是不是合适, 返回键的操作
  • 横竖屏测试      横屏之后, 页面的格式是不是能够正常显示
  • 手机上其他的辅助功能      放大字体

7. 注意点

  • 当app进行了充分的测试后, 可以编写测试报告, 发布app上线
  • app的发布, 打包上传到各大应用商城
  • 测试人员需要关注app线上的bug
  • 运维需要关注app线上的运行环境

  3. app自动化测试

1. 常用自动化框架介绍

  • Robtium
    • 基于android开发的一款开源的自动化框架
    • 支持java语言
    • 不支持跨平台
  • macaca
    • 由阿里巴巴开大的一套开源自动化解决方案'
    • 适用平台: PC端, android, IOS
    • 支持语言: java, python, nodejs
  • Appium
    • 是一款国外开源的自动化测试框架
    • 适用平台: android, IOS
    • 支持的语言: java, js, php, python, C#, ruby
    • 社区活跃, 资源丰富
  • appium特点:
    • 开源
    • 支持Native App(原生代码, 全部由android sdk的java代码生成)     原生的app如果页面有变更, 就得发布一个版本, 提交到应用商城去审核
    • Web app(都是由H5生成的)    访问速度慢, H5代码以及元素信息
    • Hybird App(既有native app也有H5页面)     混合app, 工作中使用最多
    • 支持android, IOS
    • 支持夸平台, 支持windows, linux, macos
    • 支持多语言:  java, js, php, python, C#, ruby

2. adb工具构成及原理

  • ad包含三个部分
    • adb客户端      用来下发adb的指令工具
    • Server服务端      adb.exe执行之后的进程, 表示adb的服务端, 通过服务端与手机上的adb守护进程进行通信
    • adb守护进程      随着android系统的启动而启动, 当android系统关闭之后它才会关闭

    

 3. adb常用命令

1. 常看设备, 启动关闭adb服务

  • adb devices    常看手机的设备名称以及状态
    • emulator-5554   device      emulator-5554表示的是手机设备的名称, device表示的是设备处于在线状态
    • 如果不在线则是offline     如果adb服务没有启动. 下发该命令时, 会自动去启动adb服务
  • adb start-server      启动adb服务
  • adb kill-server      关闭adb服务

2. 获取包名和界面名

  • 包名: app包名, 通过app的包名来区分不同的app, app包名是唯一的
  • 界面名(启动名): 相当于web页面中的链接地址, 在app中, 每个界面都有一个名字
    • 原因: 自动化过程当中, 需要通过app的包名和界面名来启动app
  • 操作步骤  adb命令
    • 在手机或者模拟器上打开app
    • windows命令一: adb shell dumpsys window windows | findstr mFocusedApp
    • window命令二: adb shell dumpsys window | findstr"usedApp"
    • com.android.settings/.Settings com.android.settings是包名 .Setting是界面名, 通过/分割包名和界面名
    • LINUX/MacOS命令一: adb shell dumpsys window windows | grep mFocusedApp
    • LINUX/MacOS命令二: adb shell dumpsys window | grep"usedApp"
  • 通过aapt获取app的包名和界面名
    • aapt dump badging D:\BaiduNetdiskDownload\apptools\apk\xuechebu.apk后面表示的是app安装包路径及名称
    • 包名: package: name='com.bjcsxq.chat.carfriend' #package:name 后面的字符串表示的是app包名
    • 界面名: launchable-activity: name='com.bjcsxq.chat.carfriend.moudle_main.activity.SplashActivity'   launchable-activity: name 后面的字符串是界面

3. 上传文件和下载文件

  • 上传    将电脑上的文件上传至手机
    • adb push 电脑上的路径  手机的路径
    • 例: adb push ./1.txt /sdcard
  • 下载    从手机上下载文件到本地
    • adb pull 手机文件的路径   电脑文件夹的路径
    • 例: adb pull /sdcard/1.txt D:\opt

4. 查看日志信息

1. 为什么要获取日志信息: 用来给开发定位问题

2. 命令: adb logcat    来查看相关的日志信息

3. 保存至文件夹: adb logcat > log.log

5. app启动速度测试(性能测试)

  • 测试app启动速度的命令
    • adb shell am start -W 包名/界面名
    • Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.bjcsxq.chat.carfriend/.module_main.activity.SplashActivity }
      Status: ok
      Activity: com.bjcsxq.chat.carfriend/.module_main.activity.SplashActivity
      ThisTime: 4825
      TotalTime: 4825
      WaitTime: 5587
      Complete

  • 关注TotalTime值, 在实际的测试过程当中, 会进行多次测试, 然后取平均值

6. 稳定性测试

  • monkey 集成在adb工具中主要是用来做稳定性测试的, monkey通过java语言编写的一种稳定性测试工具
    • 主要用来测试app会不会出现crash(崩溃)的情况
    • 相当于让一只猴子来随机操作app, 所有的操作都有可能出现, 长时间操作来测试app会不会出现问题
  • monkey 常用参数
    • -p参数    对指定app进行随机操作
      • adb shell monkey -p com.baidu.homework 100 (100次随机事件)
    • -v参数    表示的是记录信息的级别
      • level 0: adb shell monkey -p com.baidu.homework -v 100 默认级别
      • level 1: adb shell monkey -p com.baidu.homework -v -v 100 打印出来的信息会比较详细, 只打印跟本程序有关的日志信息
      • level 2: adb shell monkey -p com.baidu.homework -v -v -v 100 打印出来的信息会更多, 会显示其他程序运行的信息
    • -s 参数    用于指定伪随机数, 如果两次伪随机数相同, 那么两次的操作步骤, 流程, 操作事件完全一样
      • 主要作用    用来复现上次问题
      • adb shell monkey -p com.baidu.homework -v -v -s 10 100 
      • --throttle    用于指定随机事件的间隔时间, 单位是毫秒
      • adb shell monkey -p com.baidu.homework -v -v --throttle 3000 -s 10 100 
    • 组合使用
      • adb shell monkey -p com.baidu.homework --throttle 500 --pct-touch 10 --pct-motion 50 -v -v -s 100 300 > log.log
      • --pct-touch  10  触摸(10整个随机事件中的百分比)
      • --pct-motion  50    滑屏(50整个随机事件中的百分比)
    • 日志分析
      • 如果事件中出现了ANR(application not responsing), 程序出现假死情况
      • 如果日志中出现了Expection, 可能程序崩溃

7. 手势操作命令

  • 模拟点击事件
    • adb shell input tap x y        x y表示的是坐标点
  • 模拟滑屏事件
    • adb shell input swipe stratx starty endx endy        stratx starty表示起始点坐标 endx endy表示终点坐标 
  • 模拟键盘操作
    • adb shell input keyevent 键值   (3 表示HOME键     4 表示返回键      66 表示回车键)
  • 模拟输入操作
    • adb shell input text 内容     内容表示要输入的内容, 输入的内容不能是中文
  • 如果计算机上连接了多个模拟器或是手机, 那么需要加上一个参数 -s + device_name
    • adb -s emulator-5554 shell input keyevent 4

4. 弱网测试

  • 弱网测试步骤
    • 打开fiddler, 设置相应的代理窗口(当窗口被占用时序手动更改代理窗口)
    • 在fiddler中设置上传和下载速度
      • 点击;rules->cudtomize rules
      • 修改上传和下载速度
      • 点击performance -> simulate Modem Speeds启动弱网
    • 在手机中设置网络代理
      • 手机中的IP地址必须与fiddler电脑的IP地址是同一个局域网, 也就是同一网段
      • wlan -> 长按连接电脑的无线网 -> 修改网络 -> 配置代理 -> 与连接的计算机在同一局域网

5. appium自动化

1. appium基础操作

1. 通过appium启动app

  • driver.start_activity("包名", "界面名")

2. 获取包名和界面名

  • driver.current_package    获取当前脚本运行中的app包名
  • driver.current_activity    获取当前脚本中的app界面名

3. 关闭app以及关闭驱动

  • 关闭app     driver.close_app()       不需要跟参数
  • 关闭驱动    driver.quit()
  • 区别
    • 关闭app之后, 可以再使用其他代码启动新的app
    • 关闭驱动, 那么代码与appium服务器之间的链接已断开, 不能再进行任何操作

4. 安装卸载app以及判断是否安装app

  • 安装app    driver.install_app(apk路径)
  • 卸载app    driver.remove_app(app包名)
  • 判断手机是否安装app    driver.is_app_installed("包名")
    • 返回值: True 有安装app, False 没有安装app"
  • 将应用置于后台运行
    • driver.background_app(seconds)     seconds表示将app置于后台运行多少秒的时间

5. 单个元素定位

  • 通过ID定位单个元素
    • 通过元素的resource-id来进行元素定位
    • driver.find_elememt_by_id(resource_id的值)
  • 通过class_name定位元素
    • 通过元素的class属性值来进行元素定位
    • app中, class是值始终只有一个
    • driver.find_element_by_class_name(class的值)
  • 通过xpath定位元素
    • 通过xpath的元素属性来进行元素定位
    • driver.find_element_by_path("//*[@text='value']")

6. 定位一组元素

  • driver.find_elements_by_id(resource_id)
  • driver.find_elements_by_class_name(class_name)
  • driver.find_elements_by_xpath(xpath表达式)
  • driver.find_elements(By.ID, value)
  • 返回的值是一个列表, 如果没有找到, 说明列表是空值, 可以通过下标来使用其中的元素对象, 下标从零开始

7. 获取元素的信息

  • 获取元素的文本内容(获取的是元素text属性的内容)
    • element.text
  • 获取元素的位置
    • element.location  返回值是一个字典, 字典中包含x和y, x和y表示的是元素在手机屏幕左上角的点的坐标
  • 获取元素的大小
    • element.size  返回值是一个字典, 字典中会包含width和height, width表示宽度, height表示高度
  • 获取元素的属性值
    • element,get_attribute('attribute')   #attribute表示的是属性的名称
    • 获取ID时, attribute  = 'resourceId'
    • 获取到的是class的值, attribute = 'className'

8. 初始化: 输入中文的处理

  • 在初始化中增加两个参数
    • 'resetKeyboard': True,           # 重置设备的输入键盘
    • 'unicodeKeyboard': True       # 采用unicide编码输入

9. 初始化: 区分手册打开还是非首次打开

  • 'noReset': True    # 用来记住app的session, 如果有登录或者做过初始化的操作, 为True时, 后面不需要再操作

2. 手机操作

1. 获取手机分辨率

  • 目的: 保证在不同机型上都能实现滑屏操作
    • driver.get_window_size()    返回的值是字典类型, 包含height和width高度和宽度的值

2. 获取手机截图

  • driver.get_screenshot_as_file(filename)
    • 注意事项: 1. 路径必须手动创建    2. 文件名必须是以PNG结尾

3. 获取设置手机网络

主要是为了实现视频类的app中, 视频播放过程中网络切换时会有提示信息操作

1. 获取手机网络

  • driver.network_connection

2. 设置手机网络

  • driver.set_network_connection(connectionType)      # connectionType   网络类型的值

4. 模拟键盘操作

  • 常用的三个键值:    3 HOME键     4   返回键      66  回车键
  • driver.press_keycode(键值)

5. 手机通知栏操作

  • driver.open_notifications()

6. 滑屏和拖拽事件

1. swipe滑动事件

  • driver.swipe(startx, starty, endx, endy, duration=None)
    • duration是用来降低滑屏的速度及惯性, 单位是ms

7. scroll滑动事件

  • scroll是通过元素来进行滑动的
  • driver.scroll(source_element, target_element)
  • scroll无法设置滑动持续时间, 带有一定的惯性. 主要用于IOS中, android高版本系统可以使用

8. drag_and_drop拖拽事件

  • 从一个元素滑到另一个元素的位置, 同时也能实现将一个元素拖动到另一个元素当中
    • driver.drag_and_drop(source_element, target_element)
    • source_element  表示的是被拖动的元素对象
    • target_element  表示的是目标元素对象

3. 高级手势操作

步骤:

  1. 创建TouchAction对象
  2. 调用手势方法
  3. 调用perform()执行操作

1. 轻敲操作

  • action = TouchAction   # 创建手势对象
  • action.tap(element=None, x=None, y=None, count=1)  # 调用轻敲手势方法, 传入的是一个元素对象或是一个坐标点, count表示的是轻敲的次数, 默认是1
  • action.perform()   # 调用perform执行轻敲操作

2. 按下和抬起操作

  • 按下:
    • press(element, x,y)
  • 抬起:
    • release()

3. 等待操作

  • 模拟手指等待, wait(ms=0)  ms表示的是等待毫秒数

4. 长按操作

  • long_press(element, x=None, y=None, duration=1000)
    • element表示的是元素对象
    • x, y 表示的是坐标点
    • duration表示的是长按时长, 单位是毫秒

5. 移动操作

  • 模拟手指在手机屏幕上移动的过程
  • move_to(element, x=x, y=y) ele表示的是元素对象, x和y表示的是坐标点, 二选其一
  • 移动的操作是需要结合press和release一起使用

4. toast操作

  • 获取toast消息, 在初始化配置中需要增加一个配置项, 否则定位不到
    • "automationName": "Uiautomator2"