命令总览:
adb devices # 列出当前连接的设备sn号 adb kill-server # 停止服务 adb start-server # 启动服务 adb connect [ip:port] # 连接设备,port可以不指定 adb disconnect [ip:port] # 断开设备 adb install -r [app安装包路径] # 通过app安装包安装app adb uninstall [app包名] # 卸载app adb shell pm list packages # 列出手机安装的所有app的包名 adb shell pm list packages -s # 列出系统应用的所有包名 adb shell pm list packages -3 # 列出除了系统应用的第三方应用包名 adb shell am force-stop [app包名] # 强制停止应用 adb shell wm size # 查看屏幕分辨率 adb pull [手机路径] [本地PC路径] # 将文件从手机上拉到电脑上 adb push [本地PC路径] [手机路径] # 将文件从PC上推到手机上 adb shell ping [ip或者域名] # adb ping命令 adb -s [sn号] shell ping [ip或者域名] # 指定sn号的adb ping命令
下载adb工具包
浏览器输入这个链接下载 ADB工具包:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
添加adb环境变量
检查adb是否安装成功
添加完成后,重新打开1个cmd窗口,检查adb的版本信息,判断adb是否安装成功。
adb --version
将手机通过USB线连接到电脑,开启手机的USB调试模式。
开启USB调试模式的方法:
进入手机设置---关于手机,能看到手机的系统信息, 多次点击"版本号"(大概5~6次的样子),会提示 当前处于开发者模式。然后在"开发人员选项" --- "调试" --- "USB调试",将"USB调试"后面的按钮打开。
打开后手机会收到一个"是否允许USB调试"的提示信息, 勾选"始终允许使用这台计算机进行调试", 点击"确定"。
另外将锁屏密码关闭,显示里的"休眠"设置为永不。
执行adb命令检查连接的Android设备sn号
adb devices
注: 如果提示"adb server version (31) doesn‘t match this client (41); killing...",有可能是adb默认端口5037被占用了。可以尝试按照如下方法解决问题:
netstat -ano|findstr 5037
tasklist | findstr [进程ID]
打开任务管理器,关闭对应的进程。
检查是否还有其他进程占用5037端口:
再次执行"adb devices"命令查询连接的设备的sn号。
关闭adb服务:adb kill-server
启动adb服务: adb start-server
进入这个链接下载:https://github.com/Genymobile/scrcpy/releases, 下载scrcpy压缩包,下载完成后,解压缩。
这个时候就能在PC上看到手机的屏幕投屏了。为了打开方便,可以为scrcpy.exe创建快捷方式。
安装uiautomator2
pip install uiautomator2
安装weditor
pip install weditor
检查uiautomator2和weditor版本
pip list
初始化adb设备,这个时候会在手机上安装一个ATX应用。
python -m uiautomator2 init
执行完命令后,手机上会安装1个ATX应用,外形看起来像个小黄车。点击小黄车,点击"启动UIAUTOMATOR"。
如果提示"UIAutomator not starting",如截图所示。则可以通过adb shell启动。
通过adb shell启动手机上的ATX服务。操作如下:
adb shell
chmod 775 /data/local/tmp/atx-agent
/data/local/tmp/atx-agent server -d
uiautomator2连接手机有2种方式:
USB连接和wifi连接
USB连接:主要是通过手机的SN号进行连接,手机的SN号可以通过"adb devices"查询得到。
Wifi连接:主要是通过IP地址进行连接。
启动weditor: python -m weditor
这个时候,浏览器会打开1个页面,这个页面对用的信息可以参照下图。
定位元素的方法
# 启动app d.app_start("com.tencent.qqlive") # 关闭app d.app_stop("com.tencent.qqlive") # 关闭所有的app d.app_stop_all() # 通过text属性定位元素 d(text=‘电影‘).click() # 通过text属性定位元素, instance为第几个元素,不指定的话取默认值0 d(text=‘电影‘, instance=2).click() # 点击text属性值为"电影"的第3个元素 # 通过resourceId定位元素 d(resourceId=‘com.tencent.qqlive:id/fh3‘).click() d(resourceId=‘com.tencent.qqlive:id/fh3‘, instance=1).click() # 使用类名定位元素 d(className=‘android.widget.TextView‘).click() d(className=‘android.widget.TextView‘, instance=3).click() # 通过xpath定位元素 d.xpath(‘//*[@resource-id="com.tencent.qqlive:id/fko"]‘).click() # 滑动操作,通过坐标滑动,可以向上、下、左、右滑动 d.swipe(500, 1000, 500, 500) # 返回 d.press("back") # 返回桌面 d.press("home")
uiautoamtor2实现自动化的简单代码示例:
# coding: utf-8 import time import uiautomator2 as u2 class AutoTestU2(object): """uiautoamtor2自动化测试类""" def __init__(self, sn=None, ip_addr=None, package_name=None): # 手机sn号 self.sn = sn # 手机IP地址 self.ip_addr = ip_addr # app包名 self.package_name = package_name self.u2_driver = None def connect_by_usb(self): """通过usb连接手机""" self.u2_driver = u2.connect_usb(self.sn) def connect_by_wifi(self): """通过wifi连接手机""" self.u2_driver = u2.connect_wifi(self.ip_addr) def start_app(self): """启动APP""" self.u2_driver.app_start(self.package_name) def save_screenshot(self): """保存截图""" # 以当前时间戳命名截图 current_time = time.strftime("%Y-%m-%d %H-%M-%S") file_name = "{}.png".format(current_time) self.u2_driver.screenshot(file_name) def stop_app(self): """关闭app""" self.u2_driver.app_stop(self.package_name) def auto_test_main(self): """自动化测试主函数""" print("===测试开始===") print("开始通过USB连接设备") self.connect_by_usb() print("开启启动app") self.start_app() time.sleep(10) print("开始截图") self.save_screenshot() print("开始停止app") self.stop_app() print("===测试结束===") if __name__ == "__main__": # 传入你手机的sn号和需要操作的app包名 autotest_u2 = AutoTestU2(sn="你手机的sn号", package_name="你需要操作的应用的包名") autotest_u2.auto_test_main()
原文:https://www.cnblogs.com/theshy1103/p/14717786.html