Appium学习总结
文章目录
- Appium学习总结
- 一、简介
- 二、环境准备
- 1.下载并配置安卓SDK环境变量
- 2.下载及安装AppiumDesktop
- 3.安装AppiumDesktop
- 4. 启动AppiumDesktop
- 5.安装Python3.x环境
- 6.安装Appium的Python客户端
- 7.安装安卓模拟器
- 8.安装被测APP:
- 9.连接安卓设备
- 三、运行Python脚本
- 四、定位元素方式
- 1、简介
- 2、元素定位方式
- 2.1accessibility_id
- 2.2xpath
- 五、按键表
- 六、常用操作总结
一、简介
Appium Desktop是一款用于Mac、Windows和Linux的开源应用。它是Appium更为优化的图形界面和appium相关的工具的组合:
Appium-Server的图形界面。可以设置选项、启动/停止服务器、查看日志等功能;且无须提前安装Node / NPM,因为Node运行时直接与Appium Desktop绑定。
可以使用AppiumDesktop自带的Inspector来查看应用程序的元素,并进行基本的交互。
二、环境准备
1.下载并配置安卓SDK环境变量
https://www.jianshu.com/p/4e00f725bf75
2.下载及安装AppiumDesktop
根据自己的系统版本来下载 (点我查看系统版本)
64位:链接: https://pan.baidu.com/s/1JGuIbIv1JpKPqox0_nz3Cw 提取码: 1234
32位:链接: https://pan.baidu.com/s/1FtWhm3AFXLslk7YFOG3w6g 提取码: 1234
3.安装AppiumDesktop
4. 启动AppiumDesktop
5.安装Python3.x环境
若已经装了python环境则忽略这一步
教程传送门:http://www.runoob.com/python/python-install.html
6.安装Appium的Python客户端
在cmd里面运行下面的代码:
pip3 install Appium-Python-Client -i https://pypi.tuna.tsinghua.edu.cn/simple
7.安装安卓模拟器
1.下载并安装雷电模拟器:http://www.ldmnq.com/
2.打开雷电模拟器
8.安装被测APP:
链接:https://pan.baidu.com/s/1M6pcs1sI4hsEvAQOTv8KfQ
提取码:1234
9.连接安卓设备
使用的是手机:打开安卓手机的USB调试,用数据线连接手机和电脑
使用的是模拟器:直接去执行adb devices
在windows命令提示符中输入:adb devices,能看到手机连上电脑既可
三、运行Python脚本
在VSCode中新建Python文件,并且输入对应代码运行查看效果
根据自己的手机来修改代码中对应的参数
# 1.导入appium的webdriver
from appium import webdriver
def get_driver():
"""
获取设备driver
"""
desired_caps = {}
desired_caps['platformName'] = 'Android' # 打开什么平台的app,固定的 > 启动安卓平台
desired_caps['platformVersion'] = '5.1.1' # 安卓系统的版本号:adb shell getprop ro.build.version.release
desired_caps['deviceName'] = 'vivo x6plus d' # 手机/模拟器的型号:adb shell getprop ro.product.model
desired_caps['appPackage'] = 'io.appium.android.apis' # app的名字:
# 安卓8.1之前:adb shell dumpsys activity | findstr "mFocusedActivity"
# 安卓8.1之后:adb shell dumpsys activity | findstr "mResume"
desired_caps['appActivity'] = '.ApiDemos' # 同上↑
desired_caps['unicodeKeyboard'] = True # 为了支持中文
desired_caps['resetKeyboard'] = True # 设置成appium自带的键盘
# 去打开app,并且返回当前app的操作对象
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
return driver
def test():
"""
查找单个元素
"""
# 获取driver
driver = get_driver()
# 通过id获取元素:最准确
app = driver.find_element_by_id("android:id/text1")
app.click()
# 返回键
driver.back()
# 通过text获取元素
Animation = driver.find_element_by_android_uiautomator('new UiSelector().text("Animation")')
Animation.click()
# 返回键
driver.back()
# 通过content-desc来获取元素
app = driver.find_element_by_accessibility_id("App")
app.click()
# 返回键
driver.back()
# 通过xpath获取:使用最多
media = driver.find_element_by_xpath("//android.widget.TextView[@text='Media' and @content-desc='Media']")
media.click()
if __name__ == "__main__":
test()
四、定位元素方式
1、简介
由于AppiumDesktop版本已经屏蔽掉AppiumServer的一些定位方式,导致以往AppiumServer的一些定位方式在AppiumDesktop中不能使用。
2、元素定位方式
首先,在AppiumDesktop中,可以直接使用自带的inspector进行元素定位,可以弃用安卓自带的uiautomatorviewer,不得不说,这样子效率大大提高。
AppiumDesktop V1.6以后仅支持以下定位方式:
2.1accessibility_id
driver.find_element_by_accessibility_id(“Accessibility”)
2.2xpath
driver.find_element_by_xpath()
五、按键表
电话键
KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减小键 25
控制键
KEYCODE_ENTER 回车键 66
KEYCODE_ESCAPE ESC键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169
组合键
KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right
基本
KEYCODE_0 按键'0' 7
KEYCODE_1 按键'1' 8
KEYCODE_2 按键'2' 9
KEYCODE_3 按键'3' 10
KEYCODE_4 按键'4' 11
KEYCODE_5 按键'5' 12
KEYCODE_6 按键'6' 13
KEYCODE_7 按键'7' 14
KEYCODE_8 按键'8' 15
KEYCODE_9 按键'9' 16
KEYCODE_A 按键'A' 29
KEYCODE_B 按键'B' 30
KEYCODE_C 按键'C' 31
KEYCODE_D 按键'D' 32
KEYCODE_E 按键'E' 33
KEYCODE_F 按键'F' 34
KEYCODE_G 按键'G' 35
KEYCODE_H 按键'H' 36
KEYCODE_I 按键'I' 37
KEYCODE_J 按键'J' 38
KEYCODE_K 按键'K' 39
KEYCODE_L 按键'L' 40
KEYCODE_M 按键'M' 41
KEYCODE_N 按键'N' 42
KEYCODE_O 按键'O' 43
KEYCODE_P 按键'P' 44
KEYCODE_Q 按键'Q' 45
KEYCODE_R 按键'R' 46
KEYCODE_S 按键'S' 47
KEYCODE_T 按键'T' 48
KEYCODE_U 按键'U' 49
KEYCODE_V 按键'V' 50
KEYCODE_W 按键'W' 51
KEYCODE_X 按键'X' 52
KEYCODE_Y 按键'Y' 53
KEYCODE_Z 按键'Z' 54
六、常用操作总结
1、appium启动任意的Activity
在手机上启动任意的Activty用driver.start_activity方法,
如果启动的Activity不是测试应用程序的一部分,它也将启动该活动的应用程序。
具体的方法如下:
driver.start_activity('com.foo.app', '.MyActivity')
2、检索应用程序字符串
driver.app_strings方法返回应用程序的字符串
strings = driver.app_strings()
3、向安卓设备发送一个按键事件
driver.press_keycode(3)
详细代码见附录
4、查看当前的Avtivty
activity = driver.current_activity assertEquals('.ApiDemos', activity)
5、锁定屏幕
driver.lock(5)
6、将 app 置于后台,把当前应用放到后台去
driver.background_app(5)
7、收起键盘
driver.hide_keyboard()
8、启动 Activity
在当前应用中打开一个 activity 或者启动一个新应用并打开一个 activity。
只能在 Android 上使用。
driver.start_activity('com.example.android.apis', '.Foo')
9、打开通知栏 (Notifications),打开下拉通知栏 只能在 Android 上使用
driver.open_notifications()
10、检查应用是否已经安装
driver.is_app_installed('com.example.android.apis')
11、安装应用
driver.install_app('path/to/my.apk')
12、删除应用
driver.remove_app('com.example.android.apis')
13、模拟设备摇晃
driver.shake()
14、关闭应用
driver.close_app()
15、启动 (Launch)
根据服务关键字 (desired capabilities) 启动会话 (session) 。
请注意这必须在设定 autoLaunch=false 关键字时才能生效。
这不是用于启动指定的 app/activities ,
你可以使用 start_activity 做到这个效果,
这是用来继续进行使用了 autoLaunch=false
关键字时的初始化 (Launch) 流程的。
driver.launch_app()
16、重置 (Reset)
driver.reset()
17、可用上下文 (context)
列出所有的可用上下文
翻译备注:context可以理解为 可进入的窗口 。
例如,对于原生应用,可用的context和默认context均为NATIVE_APP
driver.contexts
18、当前上下文 (context)
driver.current_context
19、切换到默认的上下文 (context)
将上下文切换到默认上下文
driver.switch_to.context(None)
20、应用的字符串 (App Strings)
获取应用的字符串
driver.app_strings
21、按键事件 (Key Event)
给设备发送一个按键事件
driver.keyevent(176)
22、触摸动作(TouchAction) / 多点触摸动作(MultiTouchAction)
生成触摸动作的接口。这部分文档很快将会补充更多的内容进来。
action = TouchAction(driver)
action.press(element=el, x=10, y=10).release().perform()
23、滑动(Swipe)
模拟用户滑动
driver.swipe(start=75, starty=500, endx=75, endy=0, duration=800)
24、捏 (Pinch)
捏屏幕 (双指往内移动来缩小屏幕)
driver.pinch(element=el)
25、放大 (Zoom)
放大屏幕 (双指往外移动来放大屏幕)
driver.zoom(element=el)
26、滑动到 (Scroll To)
滑动到某个元素。
todo: python
27、拉出文件 (Pull File)
从设备中拉出文件
driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')
28、推送文件(Push file)
推送文件到设备中去
driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')```