Appium学习总结

一、简介

Appium Desktop是一款用于Mac、Windows和Linux的开源应用。它是Appium更为优化的图形界面和appium相关的工具的组合:

Appium-Server的图形界面。可以设置选项、启动/停止服务器、查看日志等功能;且无须提前安装Node / NPM,因为Node运行时直接与Appium Desktop绑定。

可以使用AppiumDesktop自带的Inspector来查看应用程序的元素,并进行基本的交互。

二、环境准备

1.下载并配置安卓SDK环境变量

https://blog.csdn.net/m0_49879527/article/details/128805291?spm=1001.2014.3001.5501

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')```
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐