1. 为什么 adb 连接总是先给你一个下马威Windows 上搭 Appium Python Client 夜神模拟器真正卡人的往往不是写脚本而是环境连通。你打开夜神敲下adb devices结果要么列表空空要么蹦出一句adb server version(31) doesnt match this client (36)。这不是你代码写错了而是两个 adb 在打架夜神自带一份 adbAndroid SDK 里又有一份版本号对不上服务端和客户端互相不认。这篇就按“能跑起来”的顺序走一遍先把 adb 版本冲突解决掉让夜神设备被正确识别再启动 Appium Server用 Python Client 建立 session最后跑通第一个测试用例并顺手把包名、Activity、元素定位这些后续要用的东西拿到手。适合刚接触移动端自动化、在 Windows 上用夜神做练习环境的同学。全程命令和配置都可以直接复制遇到报错我也会把排查路径写清楚。需要说明的是Appium 本身是开源测试框架Python Client 只是它的一个客户端库两者配合夜神模拟器就能完成大部分 Android UI 自动化练习。下面所有操作都在 Windows 本机完成不涉及任何网络穿透类工具。2. 前置准备TaoToken 与依赖清单在动手之前先把要装的东西列清楚避免中途缺件。Appium 生态里版本兼容比较敏感建议按下面这套组合来组件作用建议版本/来源Node.jsAppium Server 运行依赖16 LTS 及以上Appium Server提供 WebDriver 接口通过 npm 全局安装Appium-Python-ClientPython 侧调用库pip 安装夜神模拟器Android 运行环境官网最新版Android SDK platform-tools提供 adb、aapt随 SDK 安装Python跑测试脚本3.8 及以上安装 Appium Server 和 Python Client 的命令如下建议在管理员权限的终端里执行npm install -g appium pip install Appium-Python-Client如果你后续要长期跑编码类或 Agent 类任务把模型调用和密钥管理集中起来会省很多事。TaoToken 的 Coding Plan 适合这种长期编码场景模型对话入口可以用来验证接口是否通API Key 则在控制台统一生成管理。这几个入口分别是模型对话https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel_chatCoding Planhttps://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan控制台https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsoleAPI Keyshttps://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi_keys官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基础地址为 https://taotoken.net/api 。这些和 Appium 环境本身不冲突属于你后续写脚本时可能用到的配套能力先知道入口在哪即可。3. 解决 adb 版本冲突并连接夜神3.1 定位两份 adb报错adb server version(31) doesnt match this client (36)的含义很直白夜神目录下的 adb 是 31 版SDK 目录下的是 36 版。谁先启动谁就占了 5037 端口当服务端另一个版本连上来就不认。先确认两个路径SDK 的 platform-tools常见为C:\Program Files (x86)\Android\android-sdk\platform-tools夜神安装目录常见为C:\Program Files (x86)\Nox\bin或D:\Program Files (x86)\Nox\bin3.2 用 SDK 的 adb 替换夜神的操作前先彻底关掉夜神模拟器然后打开任务管理器确认adb.exe和nox_adb.exe两个进程都已经结束。有残留就手动结束否则文件被占用替换会失败。接着做替换把 SDK 目录下的adb.exe复制到夜神bin目录把夜神原本的adb.exe改名为adb_bak.exenox_adb.exe改名为nox_adb_bak.exe把复制过来的adb.exe再复制一份重命名为nox_adb.exe。这样夜神启动时调用的就是 SDK 同版本的 adb版本号一致冲突消失。改完后在终端执行一次adb version确认输出的是同一个版本号即可。3.3 连接夜神设备夜神默认的 adb 端口是 62001不同版本可能略有差异以你本机为准。进入夜神 bin 目录执行连接cd D:\Program Files (x86)\Nox\bin nox_adb.exe connect 127.0.0.1:62001然后回到任意目录验证adb devices看到类似下面的输出就说明设备已识别List of devices attached 127.0.0.1:62001 device如果显示offline先执行adb kill-server再adb start-server然后重新 connect 一次。如果列表为空检查夜神是否真的启动完成以及端口号是否写对。4. 可复制的 Desired Capabilities 与首个脚本4.1 启动 Appium Server安装完成后打开 Appium Desktop默认 host 为0.0.0.0、port 为4723保持默认即可点击 Start Server 启动。终端里也可以用命令行方式启动appium -p 4723服务起来后Python 脚本通过http://localhost:4723/wd/hub建立 session。4.2 获取包名与 launcherActivity在写 capabilities 之前得先知道被测 App 的包名和启动 Activity。把 apk 放到某个目录用 aapt 解析aapt dump badging D:\test\app.apk输出里找这两行package: namecom.taobao.taobao launchable-activity: namecom.taobao.tao.welcome.Welcome前者是appPackage后者是appActivity。这一步很多人会漏导致 session 建不起来却找不到原因。4.3 完整 capabilities 配置下面这份配置可以直接复制按你的设备信息改端口和版本号from appium import webdriver from appium.options.android import UiAutomator2Options import time options UiAutomator2Options() options.platform_name Android options.platform_version 7.1.2 # 夜神设置里查看内核版本 options.device_name 127.0.0.1:62001 # adb devices 里的设备名 options.app_package com.taobao.taobao options.app_activity com.taobao.tao.welcome.Welcome options.automation_name UiAutomator2 options.no_reset True driver webdriver.Remote(http://localhost:4723/wd/hub, optionsoptions) time.sleep(5) print(driver.current_activity) driver.quit()注意新版 Appium-Python-Client 推荐用UiAutomator2Options对象传参老教程里的字典写法在部分版本会提示弃用。no_resetTrue表示不重置应用状态练习时能省去反复登录的麻烦。4.4 元素定位与常用操作session 建立后定位元素是核心。几种方式对照如下定位方式方法对应属性idfind_element(By.ID, ...)resource-idxpathfind_element(By.XPATH, ...)层级路径下标从 1 开始classfind_element(By.CLASS_NAME, ...)classaccessibility idfind_element(By.ACCESSIBILITY_ID, ...)content-descnamefind_element(By.NAME, ...)uiautomator 扫描的 text输入内容与滑动屏幕的写法from selenium.webdriver.common.by import By driver.find_element(By.ID, xxxxx).send_keys(123456) width driver.get_window_size()[width] height driver.get_window_size()[height] driver.swipe(width * 9 / 10, height / 2, width / 1 / 10, height / 2, 1000)滑动参数依次是起点 x、起点 y、终点 x、终点 y、持续时间毫秒。练习时先用 Appium Inspector 抓元素确认定位表达式有效再写进脚本。5. 验证请求与成功结果脚本跑起来后怎么判断真的通了看三个信号。第一终端里 Appium Server 日志出现Creating a new session并返回 session id说明 capabilities 被接受。第二夜神模拟器上目标 App 被拉起界面发生跳转。第三Python 侧打印出driver.current_activity值与你配置的 appActivity 一致。如果只想先验证连通性不拉起具体 App可以把app_package和app_activity去掉只保留平台和设备信息建立 session 后打印driver.get_window_size()能返回宽高就说明 Appium 与设备链路正常。这一步通过后再加 App 参数排障会轻松很多。用 Appium Inspector 时在 Start Inspector Session 里填入同样的 capabilities点击启动左侧就能看到 UI 树点选元素会显示对应的 resource-id、class、content-desc直接拿来写定位表达式。6. 本篇常见报错排查报错一adb server version doesnt match this client回到第 3 节用 SDK 的 adb 替换夜神目录下的 adb 和 nox_adb替换前务必结束相关进程。报错二adb devices列表为空确认夜神已完全启动端口号正确先adb kill-server再adb start-server然后重新 connect。端口不对是高频原因。报错三session 创建失败提示 activity 不存在appActivity 写错或 App 未安装。用aapt dump badging重新确认或先把 apk 拖进夜神安装。报错四UiAutomator2相关初始化超时夜神内核版本较低时UiAutomator2 首次注入会慢适当加大newCommandTimeout并确认模拟器分配的内存足够。报错五元素定位不到优先用 Inspector 抓取确认是 resource-id 还是 content-desc。xpath 下标从 1 开始写 0 会直接失败。排查顺序建议固定为adb 设备是否在线 → Appium Server 是否启动 → capabilities 是否匹配 → 元素表达式是否有效。按这个链路走绝大多数问题都能定位到具体环节。如果你在接入过程中需要集中管理密钥或验证模型接口可以从 API Keys 和接入文档入手验证模型连通性用模型对话长期编码和 Agent 场景则看 Coding Plan。入口都在前面第 2 节列好了按需取用即可。
企业数字化 ERP 产品动态
相关推荐
昨晚,全球 AI 集体宕机:TaoToken 统一 Key 通道的容灾配置骨架 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:37:33
把祖传bug铸成NFT:程序员技术复盘与数字藏品实战 看到这个标题点进来的,多半是跟我一样被bug追着跑的人。先声明一下:“一夜翻身”是段子,真正让我觉得值钱的,是那个晚上我停下修bug的手,回头认真盘了一遍那些祖传问题——然后发现自己手里居然握着不少“限量版”。把… · 2026/9/26 16:37:27
ASP.NET邮件收发系统毕设指南:SMTP发送与POP3接收协议解析 简介:这是一份基于ASP.NET与C#的C/S架构电子邮件简单收发系统毕业设计资源,面向计算机专业毕业生或正在制作邮件客户端课题的开发人员。系统基于SMTP和POP3协议,整体采用C/S分层结构,完整实现用户注册、邮件单个发送与群发、邮件收… · 2026/9/26 17:14:59
Hadoop 3.3.6集群搭建实战:从伪分布式到完全分布式部署 简介:面向大数据开发与运维人员的 Hadoop 3.3.6 二进制安装包,来自 Apache 开源分布式框架,可直接用于搭建存储与计算环境,适合在本地或服务器上快速部署。压缩包体积约 696MB,文件数量约 2000 个,其中 HTM… · 2026/9/26 17:14:59
2026第二十三届华为杯数学建模竞赛ABCDEF题思路代码解析 2026第二十三届华为杯研究生数学建模竞赛ABCDEF题思路代码解析,这篇我写了很多年了。每年赛题一出来,总有人私信问我A题是不是该用物理仿真、B题是不是直接套排队论、C题是不是无脑上机器学习……这些问题其实反映了大多数人根本没有一个系统性的选题和破… · 2026/9/26 17:14:59
昇腾Atlas 300V 24G部署YOLO实战:推理加速卡全流程指南 1. 先回答热搜问题:Atlas 300V 24G到底是不是运算加速卡先说结论:是,而且是一张专门为推理场景设计的加速卡,不是训练卡。这段时间后台私信里频繁出现"atlas部署yolo"和"atlas 300v 24g 是运算加速卡吗"这两个… · 2026/9/26 17:14:52
Flink Watermark机制详解:彻底解决乱序数据处理难题 做实时计算的人,迟早都会撞上乱序数据这堵墙。Kafka里的消息明明是按顺序生产的,到了Flink这边却乱了套;或者源头压根就是无序的,比如手机上报的埋点日志、物联网传感器的上报记录。你要是直接按事件发生时间去开窗口统计… · 2026/9/26 17:14:52
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46