文章目录

  • 1 adb调试工具
    • 1.1 adb的构成
    • 1.2 adb工作原理
    • 1.3 adb命令
  • 2 Appium基础API
    • 2.1 Appium基础操作
    • 2.2 定位元素
    • 2.3 元素等待
    • 2.4 元素操作
    • 2.5 滑动和拖拽事件
    • 2.6 高级手势TouchAction
    • 2.7 手机操作API
  • 3 pytest
    • 3.1 setup和teardown
    • 3.2 配置文件 pytest.ini
    • 3.3 常用插件
    • 3.4 高级用法
    • 3.5 fixture
    • 3.6 数据驱动 yaml
    • 3.7 Allure
  • 4 webview
  • 5 monkey
  • 思维导图

1 adb调试工具

1.1 adb的构成

  1. client端,负责发送adb命令
  2. daemom守护进程,负责接收和执行adb命令
  3. server端,负责管理client和daemon之间的通信

1.2 adb工作原理

  1. client端将命令发送给server端
  2. server端将命令发送给daemon端
  3. daemon端进行执行,并将执行结果返回给server端
  4. server端将结果再返回给client端

1.3 adb命令

1. 获取包名和界面名:mac/linux: adb shell dumpsys window windows | grep mFocusedApp windows: adb shell dumpsys window windows | findstr mFocusedApp
2. 文件传输 从电脑发送文件到手机:adb push 电脑文件路径  手机文件夹路径
3. 从手机拉取文件到电脑:adb pull 手机的文件路径 电脑的文件夹路径
4. 获取APP启动时间:adb shell am start -W 包名/界面名
5. 获取手机日志:adb  logcat
6. 安装APP到手机:adb install 路径/xx.apk
7. 卸载app:adb uninstall 包名
8. 获取当前电脑已经连接设备和对应的设备号:adb devices
9. 进入到安卓手机内部的linux系统命令行中:adb shell
10.启动adb服务端:adb start-server
11. 关闭adb服务端:adb kill-server
12. 查看adb帮助:adb --help

2 Appium基础API

2.1 Appium基础操作

1. 跳转到其他app通过driver对象调用start_activity()方法:start_activity('包名','界面名')
2. 获取当前APP的包名和界面名 1)通过driver对象调用current_package属性----包名 2)通过driver对象调用current_activity属性 -----界面名
3. 关闭APP和驱动对象 1)通过driver对象调用close_app()方法-----仅关闭当前APP2)通过driver对象调用quit()方法 -----关闭驱动对象,同时关闭驱动对象所关联的app
4. 安装、卸载和检查是否已安装app 1)通过driver对象调用install_app()方法:install_app("apk路径") 2)通过driver对象调用remove_app()方法:remove_app("包名") 3) 通过driver对象调用is_app_install()方法:is_app_install("包名")
5. 模拟按home键,将应用放置到后台中 driver.background_app("放置到后台的时间,单位为秒")      此方法会自动回到前台。 热启动:不关闭电源的情况下,放置到后台一定时间再回到前台

2.2 定位元素

1. 定位一个元素 返回值为一个元素driver.find_element_by_id/class_name/xpath(‘定位策略’)
2. 定位一组元素 返回值为元素列表driver.find_elements_by_id/class_name/xpath('定位策略')

2.3 元素等待

1. 隐式等待driver.implicitly_wait(超时时间,单位为秒) 后续所有元素定位方法都会在这个时间内等待元素出现,若出现则执行后续操作,否则报错:NoSuchElementException
2. 显示等待WebDriverWait(driver, 超时时间, 查找频率--默认为0.5).wait.until(lambda x: x.driver.find_elements_by_xpath('定位策略')) 仅对单个元素有效

2.4 元素操作

1. 点击:element.click()
2. 清空:element.clear()
3. 输入:element.send_keys('要输入的内容')
4. 获取元素的文本内容:element.text
5. 获取元素的位置:element.location     返回值为字典,有两个key,x和y 获取元素的x或y坐标:element.location['x或y']
6. 获取元素的大小:element.size 返回值为字典,有两个key,width和height 获取元素的宽度或高度:element.location['width或height']
7. 根据元素的属性名获取属性值:element.get_attribute('属性名') 注意点: 1)获取resource-id属性值使用resourceId属性名,且必须API≥18 2)获取class属性值使用className属性名,且必须API≥18 3)获取content-desc属性值使用name属性 4)其他属性值,直接参考uiautomatorviewer中的属性名

2.5 滑动和拖拽事件

1. swipe滑动方式方法: driver.swipe(起始x坐标, 起始y坐标, 结束x坐标, 结束y坐标, 持续时间ms)特点: 1)参数是坐标点 2)若持续时间短,惯性就大
2. scroll滑动方式方法: driver.scroll(起始元素,结束元素)特点: 1)参数是元素 2)没有持续时间,有惯性
3. drag_and_drop滑动方式方法: driver.drag_and_drop(起始元素,结束元素)特点: 1)参数是元素 2)没有持续时间,没有惯性

2.6 高级手势TouchAction

步骤:
1)创建TouchAction对象
2)通过对象调用要执行的操作
3)通过perform()方法执行操作

1. 轻敲方法:tap(参数)参数: 1)传元素:TouchAction(driver).tap(element).perform() 2)传坐标:TouchAction(driver).tap(x=100,y=100).perform() 3)多次点击:TouchAction(driver).tap(element,count).perform()
2. 按下方法:press参数: 1)元素 2)坐标
3. 抬起方法:release参数: 无
4. 等待方法:wait参数: 等待时间ms
5. 长按方法:long_press参数: 1)元素 2)坐标 3)持续时间ms
6. 移动方法:move_to参数: 1)元素 2)坐标

2.7 手机操作API

1. 获取手机分辨率 方法:driver.get_window_size() 返回值:字典,如{‘width’:1440,'height':2560}
2. 截图: 方法:driver.get_screenshot_as_file(路径/文件名.png)
3. 获取当前网络 根据属性获取:driver.network_connection
4. 设置当前网络: 方法:driver.set_network_connection(网络类型) 注意:网络类型建议使用系统提供的类型 from appium.webdriver.connectiontype import ConnectType
5. 发送键到设备 driver.press_keycode(按键对应编码) https://blog.csdn.net/feizhixuan46789/article/details/16801429
6. 操作通知栏: 打开:driver.open_notifications 关闭:使用返回键   driver.press_keycode(4)

3 pytest

3.1 setup和teardown

  1. 函数级别:setup teardown
  2. 类级别:setup_class teardown_class

3.2 配置文件 pytest.ini

  1. 命令行参数 addopts = -s
  2. 文件搜索路径 testpaths = ./scripts
  3. 文件名称 python_files = test_*.py
  4. 类名称 python_classes = Test*
  5. 方法名称 python_functions = test_*

3.3 常用插件

  1. 测试报告:pytest-html
    使用:在pytest配置文件的命令行参数中增加 --html = 存放路径/report.html
  2. 控制函数执行顺序:pytest-ordering
    使用:在需要控制顺序的函数前加上装饰器:@pytest.mark.run(order=x)
    注意:x 0>正数>空(默认)> 负数
  3. 失败重试:pytest-rerunfailures
    使用:在pytest配置文件的命令行参数中增加 --reruns n(重试次数)

3.4 高级用法

  1. 跳过测试函数 使用装饰器: @pytest.mark.skipif(condtion,reason=“XXX”) condtion为bool类型,若为Ture则跳过
  2. 预期失败 使用装饰器:@pytest.mark.xfail(condtion,reason=“XXX”) condtion为bool类型,若为Ture则表示预期失败
  3. 数据参数化
    1)单个参数:@pytest.mark.parametrize(“参数名”,[“参数值1”,“参数值2”])
    2)多个参数:@pytest.mark.parametrize((“参数名1”,“参数名2”),[(“参数1的值1”,“参数1的值2”),(“参数2的值1”,“参数2的值2”)])

3.5 fixture

@pytest.fixture()

3.6 数据驱动 yaml

with open(“文件路径”, “r(读)/w(写)”) as f: 读 yaml.load(f) 写 yaml.dump(data,f)

3.7 Allure

将xml转成html: allure generate report/ -o report/html --clean

4 webview

  1. 先打印一下所有的上下文环境:print(driver.contexts)
  2. 切到对应的环境中:driver.switch_to.context(“WEBVIEW_com.android.browser”) 定位元素,进行相关操作

5 monkey

  1. adb shell monkey 参数 > 路径/log.txt
    参数:
    1) -p 指定启动的app
    2) -v 日志级别:
    ① -v 仅提示启动和结束信息
    ② -v-v,当前app的详细信息
    ③ -v-v-v,当前APP和其他APP详细信息
    3)-s 随机数种子,如果-s的值一样,那么每次所产生的事件序列也是一样大的
    4)–throttle 事件的时间间隔,单位为毫秒
    5)随机事件出现的百分比:
    ① --pct-touch n 触摸事件的百分比
    ② --pct-motion n 动作事件的百分比
    ③ --pct-pinchzoom n 缩放事件的百分比
    ④ --pct-trackball n 轨迹事件的百分比
    ⑤ --pct-rotation n 旋转事件的百分比
    ⑥ --pct-nav n "基本"导航事件的百分比(来自方向输入:up/down/left/right)
    ⑦ --pct-majornav n "主要"导航事件的百分比(如回退按键,菜单按键)
    ⑧ --pct-syskeys n “系统”按键事件的百分比
  2. 日志分析:
    1)正常情况:最后会打印当前执行事件的次数和所花费的时间
    2)异常情况:
    ① 程序无响应:ANR
    ②崩溃问题:Exception (如空指针异常,NullPointException)

思维导图

appium知识体系(思维导图/脑图)相关推荐

  1. 个人知识体系思维导图_“知识体系”打得好,学霸孩子跑不了,巧用“思维导图”来帮忙...

    文章纯属原创,版权归本作者所有,欢迎个人转发分享. 相信很多妈妈都会看见孩子学习学不进去的苦恼,孩子看着很用功,每天按时完成作业.做练习题,但是成绩就是一直上不去,还会出现成绩不升反降的情况.这成了许 ...

  2. 前端知识体系思维导图

    前端知识体系思维导图 前言 hello大家好,我是"风不识途",本文是想分享一下,笔者在自学前端时所学到的知识,总结的思维导图(并不包含前端所有知识点),很多都是结合自己的笔记来进 ...

  3. Java-并发知识体系-思维导图

    Java-并发学习知识体系 文章目录 Java-并发学习知识体系 最近在学习Java并发相关知识.所以抽时间画了一个知识体系思维导图,如果想要下载xmind文件的可以点击此处去下载

  4. 个人知识体系思维导图_高中数学知识点思维导图

    这个逻辑,高考数学真就突破130了. 因为平时课太多,优先公众号更新! (暖阳老师带你30分钟掌握高中数学体系,形成数学框架,学习.复习.考试必备的方向. 整个数学体系的学习其实没有想象的那么难,首先 ...

  5. C语言知识体系思维导图

    C语言是基础,如果想要更好的发展,基础还是要打扎实,需要积累.不积跬步无以至千里.所以为了读者们的架构师之路(不想成为架构师的程序员不是合格程序员),本人讲C语言的知识整理下,给大家建立一个知识体系. ...

  6. 大数据和后端学习知识体系思维导图

  7. MindMaster思维导图国内版更名“亿图脑图MindMaster”国产软件加速崛起!

    近日,知名思维导图软件MindMaster思维导图将国内版正式更名为"亿图脑图MindMaster".越来越多国产软件的转变可以看出--国产软件发展势头正猛,未来国产软件或将成中国 ...

  8. 多元函数概念思维导图_高等数学 多元函数微分学 知识技巧思维导图 [21考研上岸之旅]...

    Hello World,我的朋友,这里是一颗小白蛋,大千世界,很高兴以这样的方式与你相遇 前言 好久不见,这一次给大家带来考研高数的中多元函数微分学的相关内容. 2021张宇基础30讲 +2020汤家 ...

  9. spring体系思维导图

    spring体系思维导图 1. spring 思维导图 2. springboot 思维导图 3. springcloud 思维导图 之前整理的,后续持续更新中 1. spring 思维导图 2. s ...

  10. 四元数插值方法Slerp/Squad/Spicv/Sping知识总结思维导图

    四元数插值方法Slerp/Squad/Spicv/Sping知识总结思维导图 最近在学习思维导图,闲来无事,就把之前写过的博客,四元数插值方法Slerp.Squad.Spicv和Sping知识点总结整 ...

最新文章

  1. 从GPT-3到DETR,一起来盘点2020有哪些突破?
  2. 前端各种类型文件的转换
  3. css 水珠动图,CSS3逼真水珠特效
  4. 【CyberSecurityLearning 58】PHP代码注入
  5. 怎样让友情链接更加有效果
  6. 红帽linux5.5序列号,Redhat 5 安装序列号及版本说明
  7. 【转】HashSet的用法
  8. UICollectionViewDelegateFlowLayout 使用
  9. ansible常用ad hoc操作
  10. SQL Server 2012 T-SQL 新特性
  11. python设计模式
  12. .NET BackgroundWorker
  13. java class查看器_java class文件查看工具
  14. 2021-02-15 大数据课程笔记 day26
  15. Win10以太网网络电缆被拔出,没有WLAN选项
  16. 超简单,用Python Pyecharts制作可视化大屏
  17. 赛后复盘 - DataCastle 科大讯飞AI营销算法大赛
  18. 好记性不如烂笔头The palest ink is better than the best memory
  19. 5 款让开发效率倍增的 VS Code 插件
  20. am335x硬件定时器使用

热门文章

  1. 使用bootstrap中的toolTip插件时 最上方提示会被遮挡问题
  2. 考社工证可以从事什么工作
  3. 潍坊刘洁新东方计算机学校,美本申请,最强访校攻略来了
  4. C# MessageBox用法实例 (附效果图)
  5. python 句子相似度 库_句子相似度
  6. CUDA:cudaMalloc vs cudaMallocHost
  7. Writing a Scientific Research Report (IMRaD)学习笔记
  8. Benchmarksql 使用
  9. 某肠派对过模拟器检测(已过期)
  10. DevOps免费学,还有证书