【教科书级别】App定位元素与API讲解

大家好,我是阿沐,我来了啊!


本节大纲

Ø AndroidDriver 初始化
Ø UIAutomatorviewer 进行 App 元素定位及操作
Ø Appium 基础操作
Ø Appium 手势操作
Ø Appium 键盘事件
Ø Appium Activity 事件

AndroidDriver初始化

准备工作-模拟器

1 )启动模拟器,连接设备
cmd 输入 adb devices, 查看设备是否连接,获取设备号

准备工作-appium服务

2 )启动 Appium desktop 服务
双击点打开桌面的 appium ,点击 start server v1.13.0

准备工作-获取测试包的信息

步骤:
1 :从 appium 中引入 webdriver
2 :添加配置
• deviceName:设备名称
• platformName:测试平台
• platformVersion:平台版本
• appPackage:测试 app 包名
• appActivity:测试 app 启动入口
adb shell dumpsys window windows | findstr mFocusedApp
adb shell dumpsys activity | find "mFocusedActivity"
3 :创建驱动

 

 Pycharm代码初始化

 

 UIAutomatorviewer进行App元素定位及操作

元素定位

Appium 常用元素定位方法: id 定位, name 定位( text 定位), class_name 定位,
accessibility_id 定位, xpath 定位等
uiautomatorviewer 或者 inspector 工具定位元素

元素定位-uiautomatorviewer

uiautomatorviewer 定位元素

 

 

 

元素定位-uiautomatorviewer

1. id定位 根据元素的 resource-id 属性值 进行定位
2. name定位 根据元素的 text 属性值 进行定位 Appium1.5 之后移除了这种方式
3. class_name定位 根据元素的 class 属性值 进行定位
4. accessibility_id定位 根据元素的 content-desc 属性值 进行定位 Android IOS->label name 属性)
5. xpath定位 uiautomatorview 没有 xpath 路径, inspector 有,可以直接复制
appium 中使用 xpath 定位需要自己去写 xpath 路径
Xpath 用法: find_element_by_xpath("// 标签名 [@ 属性名称 =' 属性值 ']")
• 如:find_element_by_xpath("//android.widget.TextView[@text=' 同意 ']")
• 如:find_element_by_xpath("//*[@text=' 电子邮件 ']") 星号表示模糊匹配

元素定位-code

元素组定位

其中 id 定位, name 定位, accessibility_id xpath 定位都有元素组定位的方式,定位到的多个元素存储
在一个列表中,可以通过下标的方式来操作元素
1. driver.find_elements_by_id()
2. driver.find_elements_by_name()
3. driver.find_elements_by_accessibility_id()
4. driver.find_elements_by_xpath()

 

元素属性操作

text 属性
ele.text
获取元素的文本值
location 属性
ele.location
获取元素的坐标
size 属性
ele.size
获取元素的大小
tag_name 属性
ele.tag_name
获取元素的标签名(元素 class 属性值)

元素组与属性值-code

Appium基础操作 

常用API函数

1. 关闭app driver.close_app()
2. 启动app driver.launch_app
3. 重置应用( 类似删除应用数据 ) driver.reset()
4. 后台运行app driver.background_app(s) s: 后台运行时间,单位秒
5. 检查app 是否有安装: driver.is_app_installed( 包名 ) 返还 True/False
6. 安装app driver.install_app(app_path)
7. 删除app driver.remove_app( 包名 )
8. 打系统通知栏:driver.open_notifications()
9. 截取当前窗口的截图:driver.get_screenshot_as_file('c:/foo.png')
10. 获取屏幕分辨率:driver.get_window_size()
11. 拖动元素:driver.drag_and_drop(ele1,ele2)

常用API函数-code

Appium手势操作

手势基本操作

1. 点击:driver.tap(positions,time)
positions 是列表类型,如: [(x1,y1),(x2,y2)] :两个坐标, x1 y1 为第一个坐标, x2 y2 为第二个坐
标,每个坐标用括号括起来,最多支持 5 个坐标点,这个左边都是放在一个列表中,所以要用 []
起来
time :为点击按钮的延迟时间 , 单位为 ms
2. 滑动:driver.swipe(startx,starty,endx,endy,duration)
3. 封装适合任何app 进行上下左右滑动的方法

手势基本操作-code 

 

TouchAction辅助类:连续性操作

在有些时候,单独的某个方法并不能满足模拟用户的操作,例如模拟用户解锁屏幕,就
需要一系列操作合起来才能实现,此时就要用到 TouchAction 类。
Appium 中, TouchAction 的原理是将一系列的动作放到一个链条中,然后将该链条传递
给服务器,服务器接收后解析各个动作,逐个执行。
TouchAction 的操作:
导入 TouchAction 的包: from appium.webdriver.common.touch_action import TouchAction
TouchAction 支持的方法
1. 短按
press(self, el=None, x=None, y=None)
2. 长按
long_press(self, el=None, x=None, y=None, duration=1000(ms))
3. 释放
release(self)
4. 移动到
move_to(self,el=None,x=None,y=None)
5. 点击
tap(self,el=None,x=None,y=None,count=1)
6. 等待
wait(self,ms=0)
7. 执行
perform(self)

TouchAction辅助类-案例

用代码实现锁屏界面的滑动解锁操作

MultiTouchAction类:多点触摸

多点触摸对象是触摸动作的集合,是 TouchAction 的一个补充模块 , 通常都结合 TouchAction
模拟多根手指滑动效果。
MultiTouchAction 操作:
1. 导入MultiTouchAction 包: from appium.webdriver.common.multi_action import MultiAction
2. MultiTouchAction支持方法:
• 添加触摸操作到多点触摸 add(self, *touch_actions)
• 执行
perform(self)

 

MultiTouchAction-案例

案例:百度地图双指放大和缩小的实现

 

Appium键盘事件 

键盘事件

在进行移动应用自动测试的过程中,经常会碰到一些特殊情况,如打开视频后想要关闭视频,在这
种情况自动化测试脚本中是无法通过在界面中进行元素定位来实现的,此时需要通过手机自带的返
回键来完成操作,而且对于调节音量,锁屏,关机等操作都少不了键盘来完成。
Appium 中提供了专门的函数来实现对系统自身按键的操作
1. driver.keyevent(4)
发送按键码(安卓仅有)
2. driver.press_ keycode(4)
发送按键码(安卓仅有)
3. driver.long_press_keycode(4)
发送一个长按的按键码(长按某键)

按键与按键码对应表

Android adb keyevent 键值大全: https://blog.csdn.net/sinat_27672523/article/details/88748398

 

按键操作

进入开发者头条 app 的登录界面, 输入用户名,点击新浪微博,按返 回键,输入密码,按音量+ -

 

Appium Activity事件 

Activity:android 四大组件之一,简单来说就是一个界面,和用户进行交互,如桌面( Launcher
1. driver.current_activity
获取当前的 activity
2. driver.wait_activity(self, activity, timeout, interval=1)
等待指定的 activity 出现直到超时
• Activity: android 特有的
• timeout - 最大超时时间,单位是 s
• interval - 循环查询时间,间隔 1 秒 即每隔几秒获取一次当前的
3. driver.start_activity(app_package, app_activity) 实现页面跳转(包括 App 内部页面及 App 相互跳转)
• app_package:包名
• app_activity:跳转的页面

事件操作

百度阅读 app ,获取打开页面的事件,等待首页出现,再执行点击知道了的按钮操作

 

app切换及页面切换操作

从百度阅读 app 切换到 58 同城 app首页;
58 同城首页切换到登录页面

 


微信搜一搜【程序员阿沐】关注这个文绉绉的程序员,关注后主页点击【领取资料】有我准备的一线大厂面试资料和简历模板,希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值