目录

Appium自动化操作03(界面操作和adb命令)

前言

最好有Selenium的Web自动化的实际经验

运行基础:client库(0.52版本),Appium Server,安卓SDK(含JDK环境),USB调试模式下的手机(开发者模式)

所用apk包(wv.apk)链接:

https://spiritlhl.lanzous.com/icxhm7g


界面操作和adb命令

click点击

最常见的操作之一,使用WebElement对象的click方法。


tap点按

WebElement对象的tap方法和click类似,都是点击界面。

但是最大的区别是,tap是针对坐标而不是针对找到的元素

为了保证自动化代码在所有分辨率的手机上都能正常执行,我们通常应该使用click方法。

但有的时候,我们难以用通常的方法定位元素,可以用这个tap方法,根据坐标来点击

inspect查看该元素的属性中,有一个bounds属性吗?

它就是表示元素的左上角右下角坐标的坐标。

我们还可以使用UIAutomatorviewer直接十字光标移动,看右边的属性提示。

tap方法可以像这样进行调用

1
driver.tap([(1100,1080),],700)

它有两个参数:

第一个参数是个列表,表示点击的坐标。

注意最多可以有5个元素,代表5根手指点击5个坐标。所以是list类型。

如果我们只要模拟一根手指点击屏幕,list中只要一个元素就可以了

第二个参数表示tap点按屏幕后停留的时间(毫秒)。

如果点按时间过长,就变成了长按操作了。


输入

最常见的操作之一,使用WebElement对象的send_keys方法。


获取界面文本信息

可以通过WebElement对象的.text属性获取该对象的文本信息。


滑动

做移动app测试的时候,经常需要滑动界面。

这需要使用WebDriver对象的swipe方法。

1
driver.swipe(start_x=x, start_y=y1, end_x=x, end_y=y2, duration=800)

前面4个参数是滑动起点终点的x、y坐标。

第5个参数duration是滑动从起点到终点坐标所耗费的时间(毫秒)。

注意这个时间非常重要,在屏幕上滑动同样的距离,如果时间设置的很短,就是快速的滑动。

例如:一个翻动新闻的界面,快速的滑动,就会是扫动的动作,会导致内容随惯性滚动很多。


按键

调用press_keycode方法,就能模拟按键动作,包括安卓手机的实体按键和键盘按钮。

具体代码如下:

1
2
3
4
5
from appium.webdriver.extensions.android.nativekey import AndroidKey


# 输入回车键,确定搜索
driver.press_keycode(AndroidKey.ENTER)

按键的定义,可以参考这篇文档https://github.com/appium/python-client/blob/master/appium/webdriver/extensions/android/nativekey.py


长按、双击、移动

Appium的TouchAction类提供了更多的手机操作方法,如:长按、双击、移动

参考源代码中的注释https://github.com/appium/python-client/blob/master/appium/webdriver/common/touch_action.py

下面有一个长按的例子

1
2
3
4
5
from appium.webdriver.common.touch_action import TouchAction

actions = TouchAction(driver)
actions.long_press(element)
actions.perform()

打开通知栏

安卓手机,查看通知栏的动作可以是从屏幕顶端下滑来查看通知。

也可以使用如下代码,直接打开通知栏

1
driver.open_notifications()

通知栏里面的元素,自动化的方法和前面介绍的App界面元素自动化是一样的。


收起通知栏

收起通知栏,可以使用前面介绍的模拟按键,发出返回按键的方法。


adb 命令

android sdk里面有一个命令行工具adb

adb全称Android Debug Bridge,这个adb使用非常广泛。

它可以与Android手机设备进行通信,它可进行各种设备操作。

如:安装应用和调试应用,传输文件,甚至登录到手机设备上shell的进行访问,就像远程登录一样

这个adbsdkplatform-tools目录下面,请大家确保路径在Path环境变量中。

Appium对anroid的自动化非常依赖这个adb工具。执行自动化过程中,有很多内部操作,比如获取设备信息,传送文件到手机,安装apk,启动某些程序等,都是通常这个adb实现的。

adb命令既然是个命令,就可以使用Pythonos.system()或者subprocess来自动化调用它,完成我们的各种自动化需求。

而自动化过程中,可能需要截屏手机,并且下载到指定目录中,可以在Python程序中这样写

1
2
3
4
import os


os.system('adb shell screencap /sdcard/screen3.png && adb pull /sdcard/screen3.png')

特别的,还可以通过adb使用am(activity manager)pm(package manager)两个工具,可以启动Activity、强行停止进程、广播intent、修改设备屏幕属性、列出应用、卸载应用等。

adb命令的官方文档:https://developer.android.google.cn/studio/command-line/adb.html#devicestatus

一些常见的adb命令:

查看连接的设备

adb devices -l

查看文件目录

adb shell ls /sdcard

上传文件

adb push wv.apk /sdcard/wv.apk

下载文件

adb pull /sdcard/new.txt

截屏

adb shell screencap /sdcard/screen.png

截屏后的文件存在手机上,可以使用adb pull下载下来


shell

登录到手机设备上shell的进行访问,就像远程登录一样,可用来在连接的设备上运行各种命令。

输入adb shell然后执行各种安卓支持的Linux命令,比如psnetstatnetstat -an|grep 4724pwdlscdrm等。

执行quit退出shell