[ 更换 ]
热门城市
北京上海广州深圳成都杭州南京武汉天津西安重庆青岛沈阳长沙大连厦门无锡福州济南宁波昆明苏州郑州长春合肥南昌哈尔滨常州烟台南宁温州石家庄太原珠海南通扬州贵阳东莞徐州大庆佛山威海洛阳淮安呼和浩特镇江潍坊桂林中山临沂咸阳包头嘉兴惠州泉州三亚赣州九江金华泰安榆林许昌新乡舟山慈溪南阳聊城海口东营淄博漳州保定沧州丹东宜兴绍兴唐山湖州揭阳江阴营口衡阳郴州鄂尔多斯泰州义乌汕头宜昌大同鞍山湘潭盐城马鞍山襄樊长治日照常熟安庆吉林乌鲁木齐兰州秦皇岛肇庆西宁介休滨州台州廊坊邢台株洲德阳绵阳双流平顶山龙岩银川芜湖晋江连云港张家港锦州岳阳长沙县济宁邯郸江门齐齐哈尔昆山柳州绍兴县运城齐河衢州太仓张家口湛江眉山常德盘锦枣庄资阳宜宾赤峰余姚清远蚌埠宁德德州宝鸡牡丹江阜阳莆田诸暨黄石吉安延安拉萨海宁通辽黄山长乐安阳增城桐乡上虞辽阳遵义韶关泸州南平滁州温岭南充景德镇抚顺乌海荆门阳江曲靖邵阳宿迁荆州焦作丹阳丽水延吉茂名梅州渭南葫芦岛娄底滕州上饶富阳内江三明淮南孝感溧阳乐山临汾攀枝花阳泉长葛汉中四平六盘水安顺新余晋城自贡三门峡本溪防城港铁岭随州广安广元天水遂宁萍乡西双版纳绥化鹤壁湘西松原阜新酒泉张家界黔西南保山昭通河池来宾玉溪梧州鹰潭钦州云浮佳木斯克拉玛依呼伦贝尔贺州通化朝阳百色毕节贵港丽江安康德宏朔州伊犁文山楚雄嘉峪关凉山雅安西藏四川广东河北山西辽宁黑龙江江苏浙江安徽福建江西山东河南湖北湖南海南贵州云南陕西甘肃青海台湾内蒙古广西宁夏香港澳门
培训资讯网 - 为兴趣爱好者提供专业的职业培训资讯知识

软件测试/测试开发丨App自动化测试学习笔记分享

分享 学习 学习笔记 开发

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:用户端app自动化测试1 - 学习笔记 - 测试人社区

App 自动化测试的价值与体系

  • 提高效率
    • 融入企业迭代流水线,与 CI/CD/DevOps 结合
    • 回归测试、功能测试加速
  • 提高质量:
    • 兼容性测试
    • 专项/非功能测试
    • 自动化探索测试

UI 自动化测试用例如何编写

  • 业务流程不频繁改动
  • UI 元素不频繁改动
  • 需要频繁回归的场景
  • 核心场景等

环境安装与使用

什么是appium

  • Client/Server Architecture:c/s 架构
  • 脚本多语言支持
    • Java、Python、ruby、PHP、JavaScript、C#
  • 生态丰富,社区强大

Android 命令行工具

  • 管理移动端设备上应用程序的安装与卸载,以及查看相关信息
  • adb
    • 安卓系统的命令行控制工具
    • 获取安卓端的各种数据和控制
    • sdk 自带工具
adb devices #显示当前所连接设备的udid

iOS 命令行工具

  • ideviceinstaller
    • iOS 系统的命令行控制工具
    • 获取 iOS 端的各种数据和控制
idevice_id -l #显示当前所连接设备的 udid

Appium Desktop

  • 内嵌了 Appium Server
  • Appium Server GUI
    • Appium 核心工具,命令行工具
  • Appium Inspector
    • 1.22 版本后,和 desktop 分开

Appium Client

  • 各种语言的客户端封装库、用于连接 Appium Server

capability 配置参数解析

简介:

  • 功能:配置 Appium 会话,告诉 Appium 服务器需要自动化的平台的应用程序
  • 形式:键值对的集合,键对应设置的名称,值对应设置的值
  • 主要分为三部分
    • 公共部分
    • ios 部分
    • android 部分

Session:

  • Appium 的客户端和服务端之间进行通信的前提
  • 通过 Desired Capabilities 建立会话

配置优化

  • 添加参数,提高用例的稳定性
{
  "noReset": "true", // 不清空缓存信息
  "dontStopAppOnReset": "true", // 首次启动的时候,不停止app
  "skipDeviceInitialization": "true", // 跳过安装,权限设置等操作
  "unicodeKeyBoard": "true" // 输入中文
}

app 自动化控制

  • 启动应用
  • 方式一:webdriver.remote("url",desirecapability)
  • 方式二:launch_app() 将应用启动起来
# 方式一:
self.driver = webdriver.Remote\
("http://127.0.0.1:4723/wd/hub", desire_cap)

# 方式二:
self.driver.launch_app()
  • 清空输入框内容 clear()
self.driver.find_element_by_accessibility_id('SomeAccessibilityID').clear()
  • 关闭 quit()
self.driver.quit()

常见控件定位方法

android 基础知识

  • Android 是通过容器的布局属性来管理子控件的位置关系,布局关系就是把界面上的所有的空间,根据他们的间距的大小,摆放在正确的位置
  • Android 七大布局
    • LinerLayout(线性布局)
    • RelativeLayout(相对布局)
    • FrameLayout(帧布局)
    • AboluteLayout(绝对布局)
    • TableLayout(表格布局)
    • GridLayout(网格布局)
    • ConstraintLayout(约束布局)
  • Android 四大组件
    • activity 与用户交互的可视化界面
    • service 实现程序后台运行的解决方案
    • content provider 内容提供者,提供程序所需要的数据
    • broadcast receiver 广播接收器,监听外部事件的到来(比如来电)
  • 常用的控件
    • TextView(文本控件),EditText(可编辑文本控件)
    • Button(按钮),ImageButton(图片按钮),ToggleButton(开关按钮)
    • ImageView(图片控件)
    • CheckBox(复选框控件),RadioButton(单选框控件)
  • 布局
    • 是可用于放置很多控件的容器按照一定的规律调整内部控件的位置由此构成界面。
  • 嵌套布局
    • 布局内部放置布局,多层布局嵌套,可以完成复杂的界面结构

iOS 与 Android dom 结构的区别

  • dom 属性和节点结构类似
  • 名字和属性命名不同
    • android 的 resourceid 和 ios 的 name
    • android 的 content-desc 和 ios 的 accessibility-id

定位方法

  • 测试步骤三要素
    • 定位、交互、断言
  • 定位方式:
    • id 定位
    • accessibilty_id 定位
    • xpath 定位
    • classname 定位(不推荐)

元素定位的写法

  • 返回单个元素 WebElement
  • 返回元素列表 [WebElement, WebElement, WebElement…]
# 返回单个元素 WebElement
driver.find_element(AppiumBy.xxx, "xxx属性值")
# 返回元素列表 [WebElement, WebElement, WebElement...]
driver.find_elements(AppiumBy.xxx, "xxx属性值")

元素定位的写法

driver.find_element(AppiumBy.ID, "ID属性值")
driver.find_element(AppiumBy.XPATH, "xpath表达式")
driver.find_element(AppiumBy.CLASS_NAME, "CLASS属性值")
driver.find_element(AppiumBy.ACCESSIBILITY_ID, "ACCESSIBILITY_ID表达式")
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, "android uiautomator 表达式")
driver.find_element(AppiumBy.IOS_UIAUTOMATION, "ios uiautomation 表达式")
driver.find_element(AppiumBy.ANDROID_VIEWTAG, "ESPRESSO viewtag 表达式")
driver.find_element(AppiumBy.ANDROID_DATA_MATCHER, "ESPRESSO data matcher 表达式")
driver.find_element(AppiumBy.IMAGE, "IMAGE图片")

ID 定位

  • 通过身份标识 id 查找元素
  • 写法:find_element(AppiumBy.ID, "ID属性值")

ACCESSIBILITY_ID 定位

  • 通过 accessibility id 查找元素
  • 写法:find_element(AppiumBy.ACCESSIBILITY_ID, "ACCESSIBILITY_ID属性值")

XPath 单属性定位

  • 基本表达式://*[@属性名='属性值']

XPath 多属性定位

  • 表达式://*[@属性名='属性值' and @属性名='属性值' ]

Android 原生定位

  • 元素属性定位
  • ID 定位
  • 文本定位
  • 文本匹配定位
  • 父子关系定位
  • 兄弟关系定位

Android 原生定位 - 单属性定位

  • 格式 'new UiSelector().属性名("<属性值>")'
    • 比如:'new UiSelector().resourceId("android:id/text1")'
  • 注意外面是单引号,里面是双引号,顺序不能变
  • 可以简写为 属性名("<属性值>")'
    • 比如:·resourceId("android:id/text1")
# ID 定位
def test_android_uiautomator_by_id(self):   
        print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,\
                'new UiSelector().resourceId("android:id/text1")'))
# TEXT 定位
def test_android_uiautomator_by_text(self):
        print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,\
                'new UiSelector().text("App")'))

# classname 定位
def test_android_uiautomator_by_className(self):   
        print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, \
                'new UiSelector().className("android.widget.TextView")'))
Android 原生定位-组合定位
多个属性同时确定元素的(多个属性任意组合 ,不限长度)
driver.find_element_by_android_uiautomator('\
    new UiSelector().resourceId("com.xueqiu.android:id/tab_name").\
    text("我的")')
Android 原生定位-模糊匹配
文字包含
文字以 x 开头
文字正则匹配
# 模糊匹配
def test_android_uiautomator_by_text_contains(self):
    print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textContains("ssi")').text)

def test_android_uiautomator_by_text_start_with(self):
    print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textStartsWith("Ani")').text)

def test_android_uiautomator_by_text_match(self):
    print(self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textMatches("^Pre.*")').text)
Android 原生定位-层级定位
兄弟元素定位 fromParent
父子结点定位 childSelector, 可以传入 resourceId() , description() 等方法
# 查找目标元素Text,先找App ,fromParent() 方法可以查找兄弟结点
new UiSelector().text("App").fromParent(text("Text"))

# 根据父结点查找子结点/ 子孙结点
new UiSelector().className("android.widget.ListView").childSelector(text("Text"))
滑动查找元素
new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("查找的元素文本").instance(0))

Android 原生定位-组合定位

  • 多个属性同时确定元素的(多个属性任意组合 ,不限长度)
driver.find_element_by_android_uiautomator('\
    new UiSelector().resourceId("com.xueqiu.android:id/tab_name").\
    text("我的")')

Android 原生定位-模糊匹配

  • 文字包含
  • 文字以 x 开头
  • 文字正则匹配

Android 原生定位-层级定位

  • 兄弟元素定位 fromParent
  • 父子结点定位 childSelector, 可以传入 resourceId() , description() 等方法

滑动查找元素

new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().t

相关内容

@陕西学生家长:请使用“校外培训家长端”APP保障合法权益

来源:西安市教育局 来源:陕西省教育厅校外教育培训监管处(民办教育处) ···

澳门帮扶贵州从江小学英语教师能力提升培训学习热度高

连日来,在贵州师范大学举办的2021年澳门帮扶贵州省从江县小学英语教师能力提升培训课堂上,授课老师与培训学员积极互动,各小组各显神通,都拿出自己精心设计的教学作品尽情展示,呈现出一片热闹景象。图为参培学员在澳门帮扶从江县小学英语教师能力提升···

中俄中学联盟首届全国中学俄语教师培训在黑龙江举行

中新网哈尔滨8月21日电(王庆利 记者 刘锡菊)“中俄中学联盟·首届中国中学俄语教师培训”21日在中国北疆黑龙江省启幕,来自上海、黑龙江、广东等省份的60余名中国教师参与活动,在接来下的4天时间里,成员们将在语言技法、文化背景及师者内涵等方···

聚焦新课程 实践新理念——娄星区2023年小学英语新课标培训

科教新报·新湖南客户端讯(通讯员 梁彩桃)为更好地领会和贯彻《义务教育英语课程标准》(2022年版),并切实把新课标的教育理念和基本要求落实到课堂中,落实立德树人的根本任务,提升英语教师的专业能力和核心素养,9月20日上午,娄底市娄星区20···

内地人在香港讲普通话会受歧视?真相远没那么简单

一个长期存在的梗,因为内地与香港通关,再次被炒了起来:日前,有个内地自媒体女孩做了期“挑战在香港一天只说普通话”视频,得出结论是不仅会被歧视遭翻白眼,还会受到与当地人不同等的待遇。真相是这样的吗,或者说,真相就这么简单粗暴吗?愿讲还是不会讲···

靠谱的成都托福培训机构怎么选?

托福全称是检定非英语为母语的英语能力考试,是由美国教育测验服务社举办的英语能力测验。一般提升托福的方法有两种:自学或报班,但很多同学都会选择报班。那么靠谱的成都托福培训机构怎么选? 一起来看看吧。1、多对比。想选择合适的托福机构,一定不能怕···

香港将定期举行中小学普通话水平考试

香港考试及评核局5月26日宣布,今年5月起会定期协办中小学普通话水平考试,为香港中小学生提供更多认证普通话能力的选择。这个获国家教育部港澳台事务办公室批准举办的普通话水平考试,2006年第一次在香港举办,至今报考人数超过10万人次。负责主办···

香港小学普通话水平测试今天首度开考!114考生报名参加

香港语言研究中心率先推出香港小学普通话水平等级测试。 (新华社资料图)【点新闻报道】由香港语言研究中心组织研发的标准化专业考试“香港幼稚园及中小学普通话水平等级测试”之HKPSC-P(香港小学普通话水平等级测试)于今日(17日)首度在香港考···

工行湖南分行举办全省EAP员工关怀课程培训班

为进一步提升全行员工幸福感和获得感,促进员工心理健康,为员工减负减压,8月31日下午,工商银行湖南省分行以现场加视频会议形式在长沙举办了一期全省EAP员工关怀课程培训班。省分行本部的员工在现场,全省14个地市分行的200余名一线员工通过视频···

香港电脑学会IT领袖培训平台iLEAP参访新华三杭州总部

9月4日,香港电脑学会IT领袖培训平台iLEAP一行到访紫光股份旗下新华三集团杭州总部,进行深入地交流学习。在新华三集团副总裁,首席品牌营销官杨玺和新华三港澳区总经理于飞的陪同下,他们先后抵达新华三杭州创新体验中心及新华三未来工厂,体验了新···

赴港升学必备——粤语培训班来袭!|精通粤语,横行香港

要想真正了解香港,更好地在香港学习和生活,听得懂并且能说基本的粤语是大有裨益的。赴港必备——粤语培训班来袭!! 赴港升学——粤语语言的重要性特殊的历史背景,造就了香港独特的语言环境。一般香港人日常交流以粤语为主,学好粤语不仅能够帮助各位同学···

贵州省民族地区、农村地区教师普通话培训班在贵州民族大学举行

来源:【未来网】6月21日上午,由贵州省教育厅(省语委)、贵州民族大学“国家语言文字推广基地”共同举办的贵州省民族地区、农村地区教师普通话培训班开班仪式在贵州民族大学举行。参加本次培训班的学员共100名,分别来自铜仁市、遵义市和安顺市边远民···

备战亚运 浙江金华铁路部门加强外语等相关培训

杭州亚运会将于9月23日至10月8日举行。浙江金华是本届亚运会协办城市之一,将承办足球和藤球两个项目,近期,铁路金华车务段在辖区内开展外语等相关方面的培训,提升服务能力。在义乌高铁站多功能厅里,也门留学生王迪正在为车站工作人员培训阿拉伯语,···

港人英语能力亚洲排第四?香港教育局:公众须小心解读有关数字及排名

来源:环球时报【环球时报综合报道】私人英语教育机构英孚教育(EF)发表最新一份《EF EPI英语能力指标》,调查覆盖112个国家和地区,分析约200万名非英语母语人士在英语阅读和聆听测试方面的数据,结果香港在亚洲排名第四。资料图 图源:视觉···

香港教育局局长访京:将安排教师到北师大培训,鼓励学好普通话

北京日报客户端 | 记者 孟紫薇香港特区行政长官李家超本周在北京拜访不同中央部委和机构,多位特区政府政策局局长也来京访问。教育局局长蔡若莲昨天(3月15日)先后到访教育部语言文字应用研究所(下称“语用所”)、北京师范大学等,共商香港新入职教···

齐鲁师范学院承办的山东省2023年小学英语骨干教师培训圆满结束

9月14日—17日,由齐鲁师范学院外国语学院承办的山东省2023年小学英语骨干教师培训在济南举行。全省各地教育局遴选的51名小学英语骨干教师参加此次培训。齐鲁师范学院外国语学院院长、项目负责人宋秀葵,项目首席专家、外国语学院教授梁承锋及学院···

香港小学普通话水平考级,开考

参考消息网6月20日报道据香港“橙新闻”网站6月19日报道,由香港语言研究中心组织研发的“香港小学普通话水平等级测试”,17日首度在香港考试及评核局进行,测试地点位于考评局新蒲岗评核中心。据报道,此次测试共有来自全港30所小学的114名小一···

早安海峡 蔡英文南太“寻亲”遭嘲讽 南非警察汉语学习班受欢迎

台海时事部魅力中国,早安海峡!各位早上好,今天是10月19日,星期四,迎收听中国台湾网《早安,海峡》。首先来关注新闻头条【头条】习近平强调,坚持“一国两制”,推进祖国统一(图片来源:中国台湾网)习近平同志在十九大报告中强调,坚持“一国两制”···

全球首批!GE Apex CT培训基地落户江西省人民医院

2023年6月10日下午江西省人民医院(南昌医学院第一附属医院)GE Apex CT培训基地授牌仪式在江西省人民医院爱国路院区裙楼举行,陈志平院长出席并代表医院接受授牌。GE公司256排512层Revolution Apex CT,这是江西···

云南省中药材新版GAP培训班在昆举办

来源:【云南日报】为进一步落实《云南省中药材产业高质量发展三年行动工作方案(2022-2024年)》,8月21日,由云南省农业农村厅、云南省农业科学院药用植物研究所联合举办的中药材新版GAP培训班在昆明举办。全省14个州市的中药材推广技术人···