1、adb相关
1、配置adb环境
路径为:C:\Users\fan\AppData\Local\Android\android-sdk\platform-tools
2、安装应用命令
adb install apk_path
3、adb构成
Client端 发送adb命令的电脑
Daemon守护进程,安卓手机中接受adb命令的
Server端 手机中管理通信的
4、工作原理
client发送命令给server
server将命令交给Daemon
daemon执行命令
执行结果返回给server端
执行结果发送给client端
5、常用命令
获取包名,界面名
adb shell dumpsys window windows | grep/findstr mFocusedApp
文件传输
发送数据到手机
adb push 电脑文件路径 手机文件夹路径
从手机获得数据
adb push 手机文件路径 电脑文件路径
获取app启动时间
adb shell am start -w 包名/启动名
转存失败重新上传取消
获取手机日志:用于定位bug ❤️
adb logcat
安装app
adb install 路径/xx.apk
卸载app
adb uninstall 包名
获取电脑连接到的设备
adb devices
进入安卓系统命令行
adb shell
启动 关闭adb服务器
adb start-server
adb kill-server
查看帮助
adb --help
2、APPium自动化测试框架
可以测试原生应用、网页应用、以及混合应用。
环境搭建
安装appium-desktop应用
安装Appium-python-client库
关系:python代码-》Appium-python库-》Appium-》手机
使用方法
from appium import webdriver
from time import sleep
desired_caps = dict()
#平台名字,大小写不敏感
desired_caps[‘platformName’] = ‘Android’
#系统版本
desired_caps[‘platformVersion’] = ‘5.1’
#设备名字
desired_caps[‘deviceName’] = ‘192.168…’
#要打开的app包名
desired_caps[‘appPackage’] = ‘com.android.settings’
#要打开的界面名
desired_caps[‘appActivity’] = ‘.Settings’
driver = webdriver.Remote(‘http://localhost:4723/wd/hub’,desired_caps)
sleep(5)
driver.quit()
功能介绍
基本操作
启动其他app
driver.start_activity(包名,界面名)
获取包名和界面名
driver.current_package
driver.current_activity
关闭app和驱动对象
driver.close_app() #回到桌面,driver还在
driver.quit() #直接退出driver
安装和卸载app
#安装
driver.install_app(app_path)
#卸载
driver.remove_app(“包名”)
#判断是否安装
driver.is_app_installed()
将应用置于后台
#等待一定时间重新打开
driver.background_app(seconds)
3、UIAutomatorViewer
windows:android-sdk tools/bin/uiautomatorviewer.bat
获取页面元素的信息,方便后期定位
转存失败重新上传取消
元素定位
步骤:
打开uiautomotorviewer
打开手机或模拟器
通过ui工具获取元素的note detail信息
通过元素定位api进行定位
对元素进行相关操作
定位一个元素
类比selenium
driver.find_element_by_id(id_value)
driver.find_element_by_class_name(class_name_value)
driver.find_element_by_xpath(id_value)
定位一组元素
driver.find_elements_by_id(id_value)
driver.find_elements_by_class_name(class_name_value)
driver.find_elements_by_xpath(id_value)
注意点
NoSuchElementException
元素等待
元素不能及时出现原因:
网速
服务器错误
电脑配置
隐式等待
所有元素等待时间为同一个值
driver.implicitly_wait(5) #等待一定时间
显示等待
针对所有定位元素的时间设置不同的时间
wait = WebDriverWait(driver,5)
button = wait.until(find_element)
点击、输入、清空
点击
element.click()
输入 清空
element.send_keys()
element.clear()
输入中文
desire_caps[‘unicodeKeyboard’] = True
desire_caps[‘resetKeyboard’] = True
获取元素文本内容
element.text
获取元素位置和大小
element.location #获得字典 [x,y] int类型
element.size
获取元素的属性值
element.get_attribute(value) #value为元素的属性名
滑动和拖拽事件
driver.swipe(start_x,start_y,end_x,end_y,duration=None)
#持续时间越长,惯性越小
滑动时的误差现象(即惯性):cpu相关
scroll滑动事件
driver.drag_and_drop(origin_el,des_el)
#从一个元素滑动到另一个元素,没有惯性
driver.scroll(origin_el,des_el)
#从一个元素滑动到另一个元素,有惯性
4、高级手势
轻敲
1、创建touchAction对象
2、调用对象想执行的手势
3、通过perform()执行
#传入element或者坐标,count表示执行次数,多次点击
TouchAction(driver).tap(element=None,x=None,y=None,count = 1).perform()
wlan_button = driver.find_element_by_xpath(“”)
touch_action = TouchAction(driver)
touch_action = touch_action.tap(wlan_button)
#or touch_action = touch_action.tap(x = ,y = )
touch_action.perform()
按下和抬起
TouchAction(driver).press(el=None,x=None,y=None).perform()
el: 元素
x,y :坐标值
TouchAction(driver).press(“”).perform()
time.sleep(2)
TouchAction(driver).press(“”).release().perform()#释放
等待
模拟手指等待,比如按下等待5秒钟之后再抬起
TouchAction(driver).wait(ms=0).perfrom()
ms: 暂停的毫秒数
TouchAction(driver).press(“”).wait(2000).perform()#释放
长按
模拟手指对元素或者坐标的长按操作,比如按住菜单
TouchAction(driver).long_press(el=None,x=None,y=None,duration=1000).perform()
el: 元素
移动
move_to(x=None,y=None)
连个多个move_to完成画线
5、手机操作API
获取手机分辨率
driver.get_window_size()
截图
driver.get_screenshot_as_file(“路径”)
获取手机网络
driver.network_connection
返回数字 1:飞行模式 2:只开wifi 4:只开流量 6:网络全开
driver.set_network_connection(connection_type)
设置网络
发送键到设备
模拟返回键、home键
driver.press_keycode(keycode,metastate=None)
keycode可以google android keycode
操作通知栏
点击通知消息
driver.open_notifications()
关闭通知栏,可以模拟向上滑动,或者按返回键
————————————————
参考:https://blog.csdn.net/fan_nlnl/article/details/104993188