前言
我们在自动化测试过程中,可能需要手机相关联的一些操作进行辅助测试,这些我们主要讲解获取手机分辨率、手机截图、获取和设置手机网络、发送手机按键到设备、操作手机通知栏。
获取手机分辨率
自动化测试可能会需要根据当前设备的屏幕分辨率来计算一些点击或者滑动的坐标。
方法:
driver.get_window_size()
实战代码:
- 输出当前设备的屏幕分辨率
# _*_ coding:utf-8 _*_
from appium import webdriver
desc = {
"platformName": "Android",
"platformVersion": "7.1.2",
"deviceName": "127.0.0.1:62001",
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desc)
driver.implicitly_wait(5)
window_size = driver.get_window_size()
print(window_size)
手机截图
在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备操作页面来进行截屏。
方法:
get_screenshot_as_file(filename):参数是将截图保存为指定路径下、指定格式的图片。
实战代码:
- 打开《图形解锁》界面,截图当前页面保存到当前image目录,命名为 touch_action_unlock.png。(也可以修改为绝对路径,将图片保存在目标文件夹中。)
driver.get_screenshot_as_file("./image/touch_action_unlock.png")
获取和设置手机网络
我们在测试视频应用在使用流量看视频的时候,大部分都会提示用户正在是否继续播放。我们可能需要用自动化的形式来判断是否有对应的提示。即用流量的时候应该有提示,使用WIFI的时候应该没有提示。
获取手机网络
方法:
driver.network_connection
实战代码:
- 获取当前手机网络类型并输出。
print(driver.network_connection)
- 这个支架输出一些数字,我们通过查看源码
可以看到6代表的意思是所有网络全部打开,即手机流量和WIFI都是开启状态的。
设置手机网络
方法:
driver.set_network_connection(connectionType) 参数为网络类型。
实战代码:
- 设置当前设备为飞行模式
driver.set_network_connection(1)
发送手机按键到设备
模拟按 “返回键” “home键” 等等操作,很多应用有按两次返回键退出应用的功能,如果这个功能 需要我们做自动化,那么一定会用到这个方法。
方法:
driver.press_keycode(keycode, metastate=None)
第一个参数是发送给设备的关键代码,第二个是关键代码的元信息,一般是默认值。
按键对应的编码,大家可以看appium官网介绍说明:http://developer.android.com/reference/android/view/KeyEvent.html
常用键:
实战代码:
- 点击三次音量加,等待 3S,再点击两次音量减。
# 按音量+ 三次
for _ in range(3):
driver.press_keycode(24)
time.sleep(1)
time.sleep(3)
# 按音量 - 三次
for _ in range(3):
driver.press_keycode(25)
time.sleep(1)
操作手机通知栏
测试即时通信类软件的时候,如果收到其他人发送的一条消息,通知栏肯定会显示对应的消息。我们想通过通知栏来判断是否收到消息,一定要先操作手机的通知栏。
方法:
driver.open_notifications():打开手机通知栏。
appium官方没有为我们提供关闭通知的Api,那么打开通知栏之后再怎么关闭呢,我们可以手指从下往上滑动或者按返回键
实战代码:
- 打开通知栏,三秒后,关闭通知栏。
driver.open_notifications()
time.sleep(3)
driver.press_keycode(4)