界面操作 和 adb 命令

界面操作

click点击

最常见的操作之一,使用 WebElement 对象的 click 方法, 示例代码就讲过,不再赘述

tap点按

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

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

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

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

既然tap是用坐标来点击界面的,我们怎么知道这个元素的坐标呢?

大家还记得用inspect 查看该元素的属性中,有一个 bounds 属性吗?

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

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

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

driver.tap([(850,1080)],300)

它 有 两个参数:

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

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

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

  • 第二个参数 表示 tap点按屏幕后 停留的时间。

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

输入

最常见的操作之一, 使用 WebElement 对象的 send_keys 方法, 示例代码就讲过,不再赘述

获取界面文本信息

可以通过 WebElement 对象的 .text 属性获取该对象的文本信息,示例代码就讲过,不再赘述。

滑动

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

怎么模拟滑动呢? WebDriver对象的 swipe方法,就提供了这个功能

比如

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

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

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

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

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

大家可以先根据我们网站自学。

如果自学速度慢、难点搞不定,欢迎来报 `实战班` 学习。
白月黑羽 1对1 直播讲解答疑,大量练习实战,学习效果是自学没法比的。
课程有:自动化测试、爬虫数据分析、QT图形界面、性能测试、网站开发

咨询微信:18502556834

按键

前面的示例代码中已经使用过 调用 press_keycode 方法,就能模拟 按键动作,包括安卓手机的实体按键和 键盘按钮。

如下代码所示

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

比如,下面就是一个长按的例子

from appium.webdriver.common.touch_action import TouchAction
# ...
actions = TouchAction(driver)
actions.long_press(element)
actions.perform()

查看通知栏

  • 打开通知栏

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

    我们刚刚学过滑动,感兴趣的朋友可以自己试试,关键是要找对滑动的起始点和滑动距离。

    更方便的,我们可以使用如下代码,直接打开通知栏

    driver.open_notifications()
    

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

  • 收起通知栏

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

adb 命令

这里我们给大家 介绍一个android sdk里面的命令行工具 adb

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

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

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

这个adb 在 sdk的 platform-tools 目录下面, 请大家确保路径在path环境变量中。

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


大家想想我们学习了adb命令,对我们的自动化程序有什么用例呢?

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

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

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命令

下面我们列出了一些场景的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命令,比如 ps、netstat、netstat -an|grep 4724、 pwd、 ls 、cd 、rm 等。

执行quit退出 shell


上一页
下一页