手机自动化测试常用命令及方法集合
1. 常用adb命令
1.1 获取程序包名及界面名
windows
adb shell dumpsys window windows | findstr mFocusedApp
Mac/Linux
adb shell dumpsys window windows | grep mFocusedApp
1.2 获取app启动时间
adb shell am start -W 包名/启动名
adb shell am start -W com.sxdachun.entrepreneurial_world/.mvp.ui.activity.MainActivity
ThisTime: 3369
TotalTime: 3369
WaitTime: 3406
ThisTime:该界面(activity)启动耗时(毫秒)
TotalTime:应用自身启动耗时 = ThisTime + 应用application等资源启动时间(毫秒)
WaitTime:系统启动耗时 = TotalTime + 系统资源启动时间(毫秒)
1.3 获取当前页面名
adb shell "dumpsys window | grep mCurrentFocus"
1.4 安装应用
adb install apk路径
1.5 卸载应用
adb uninstall 包名
1.6 获取当前电脑已经连接的设备
adb devices
1.7 进入安卓设备内部linux内核
adb shell
1.8 启动adb服务端
adb start-server
1.9 停止adb服务端
adb kill-server
1.10 查看adb帮助
adb --help
2. 手机常用操作
2.1 获取手机分辨率
自动化测试可能会需要根据当前设备的屏幕分辨率来计算一些点击或者滑动的坐标。
方法:
driver.get_window_size()
实例:
输出当前设备的屏幕分辨率。
print(driver.get_window_size())
2.2 手机截图
有些自动化的操作可能没有反应,但并不报错。此时我们就可以将操作过后的关键情况,截图留存。后 期也可以根据图片发现问题。
方法:
get_screenshot_as_file(filename):参数是将截图保存为指定路径下、指定格式的图片。
实例:
打开《设置》界面,截图当前页面保存到当前目录,命名为screen.png。(也可以修改为绝对路径,将图片保存在目标文件夹中。)
driver.get_screenshot_as_file("screen.png")
2.3 获取和设置手机网络
视频应用在使用流量看视频的时候,大部分都会提示用户正在是否继续播放。作为测试人员,我们可能需要用自动化的形式来判断是否有对应的提示。即,用流量的时候应该有提示,使用WIFI的时候应该没有提示。
2.3.1 获取手机网络
方法:
driver.network_connection
实例:
获取当前网络类型,并打印到控制台。
print(driver.network_connection)
打印 0 代表的意思是所有设置全部关闭,即手机流量、WIFI、飞行模式都是关闭状态,
打印 1 代表的意思是手机流量、WIFI关闭,飞行模式打开,
打印 2 代表的意思是WIFI打开,流量,飞行模式关闭
打印4代表的意思是流量打开,WIFI、飞行模式关闭
打印6代表的意思是所有网络全部打开,即手机流量和WIFI都是开启状态的,飞行模式关闭。
2.3.2 设置手机网络
方法:
driver.set_network_connection(connectionType):参数为网络类型。
实例:
设置当前设备为飞行模式。
driver.set_network_connection(1)
又将网络设置为全部打开
driver.set_network_connection(6)
2.4 发送键到设备
模拟按 “返回键” “home键” 等等操作,比如,很多应用有按两次返回键退出应用的功能,如果这个功能 需要我们做自动化,那么一定会用到这个方法。
方法:
driver.press_keycode(keycode, metastate=None):第一个参数是发送给设备的关键代码,第二个是关键代码的元信息,一般是默认值。
按键对应的编码,可查看 https://blog.csdn.net/feizhixuan46789/article/details/16801429
实例:
点击三次音量加,再点击返回,再点击两次音量减
driver.press_keycode(24)
sleep(1)
driver.press_keycode(24)
sleep(1)
driver.press_keycode(24)
sleep(1)
driver.press_keycode(4)
sleep(1)
driver.press_keycode(25)
sleep(1)
driver.press_keycode(25)
2.5 操作手机通知栏
测试即时通信类软件的时候,如果A给B发送一条消息,B的通知栏肯定会显示对应的消息。我们想通过通知栏来判断B是否收到消息,一定要先操作手机的通知栏。
方法:
driver.open_notifications():打开手机通知栏。
appium官方并没有提供关闭通知的api,那么现实生活中怎么关闭,就怎样操作就行,比如,手指从下往上滑动,或者,按返回键。
实例:
打开通知栏,两秒后,关闭通知栏。
driver.open_notifications()
sleep(2)
driver.press_keycode(4)
3. Appium 中driver常用方法:
3.1 获取包名
driver.current_package
3.2 获取界面名
driver.current_activity
3.3 启动app
driver.start_activity("包名", "界面名")
3.4 关闭app
driver.close_app()
3.5 关闭driver驱动
driver.quit()
3.6 安装应用
driver.install_app("安装包路径")
3.7 卸载应用
driver.remove_app("包名")
3.8 判断app是否安装,返回布尔类型
driver.is_app_installed("包名")
3.9 将应用放后台一段时间后再返回前台
driver.background_app("放置时间:秒")
3.10 driver 时间等待
隐式等待
driver.implicitly_wait(超时时间)
针对所有定为元素超时时间为同一个值得时候,在driver对象创建后,调用该方法,设置超时时间,后续所有的定位元素方法都会在这个时间内等待元素出现,如果出现了,直接进行后续操作,没出现就报NoSuchElementException错误
显示等待
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(self.driver, timeout).until(EC.visibility_of(self.find_element(*loc)))
关键类: WebDriverWait类的until方法
针对所有定位元素的超时时间设置为不同值得时候,在设置了等待时间后,可以等待一个超时时间,在这个超时时间内查找,默认每0.5秒找一次,频率是可以设置的,找到这个元素直接进行后续操作,没找到报TimeOutException错误
隐式等待与显示等待的选择
从使用角度上:隐式等待简单,显示等待相对复杂
从灵活角度看:显示等待更灵活,可针对每个元素进行单独设置,隐式等待真对全局的定为元素
3.11 driver点击失效
当遇到webview或者微信小程序driver点击失效时,使用下面方法:
self.driver.execute_script("arguments[0].click();",driver.find_element(*self.shop_page.order_cancel_ok))
总结的不错,下次可以用项目的测试用例为切入点进行介绍。