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