简介本资源是一份面向UI自动化测试初学者的AirTestIDE系统入门指南专为测试工程师、开发人员及零基础想快速上手移动端自动化测试的学习者设计。内容覆盖AirTestIDE安装配置、Android模拟器连接、.air脚本创建与运行、Poco UI树解析、断言验证等核心实操环节结构清晰、步骤详实配套PDF文档含完整目录与代码示例便于边学边练。资源为单文件PDF格式共1个文件大小6.98MB轻量易读适合作为桌面常备参考手册。目前已有1074人学习下载涵盖从环境搭建到脚本调试、Poco Inspector使用、冻结模式操作及测试报告查看等全流程要点特别适合需要快速掌握AirTestPoco双框架协同工作的实战新手。1. AirTestIDE 新手入门装对版本比写对脚本更难v1.2.9 是当前 Windows 下最稳的“不翻车”起点刚接手模拟项目X 的 UI 自动化测试时我让 A 同学用最新版 AirTestIDEv1.3.0连雷电模拟器——结果卡在「设备列表空白」整整两小时。最后发现是 v1.3.x 默认启用了新版 ADB 服务而雷电 v4.0.80 内置的 adb server 版本太老握手失败却不报错只在后台静默退出。换回官网明确标注「Windows64-win-1.2.9」的包解压即用5 分钟连上设备。这不是玄学是血泪经验AirTestIDE 不是越新越好而是版本必须和你的模拟器/真机系统、ADB 环境、Python 运行时三者咬合严丝合缝。本文全程基于 v1.2.9 雷电模拟器 v4.0Windows 平台覆盖从零下载、设备直连、脚本录制到断言验证的完整链路。适合两类人一是刚接触 UI 自动化、想绕过 Python 编程门槛直接上手截图写脚本的测试新人二是需要快速验证某 App 页面跳转逻辑、又不想搭整套 pytest allure 环境的开发同学。所有操作均在无额外依赖、不改系统环境变量的前提下完成装完就能跑通「启动 App → 点搜索框 → 输入文本 → 断言按钮存在」这一闭环。2. 安装与设备直连解压即用但 ADB 路径和模拟器设置是隐形关卡2.1 下载与解压只认官网 v1.2.9 的 Windows64 包AirTestIDE 是个绿色免安装工具但「绿色」不等于「随便下」。官网 changelog 页面明确列出 v1.2.9 的 Windows64 包名为AirtestIDE-win64-win-1.2.9.zip注意后缀含-win不是-py38或-py39。其他渠道如某些镜像站或第三方打包可能混入非标 Python 运行时导致 Poco 辅助窗无法加载。务必从 airtest.netease.com/changelog.html 页面找到该链接下载# 下载后校验文件大小官方发布页标注为 287 MB 左右 ls -lh AirtestIDE-win64-win-1.2.9.zip # 正常应输出类似-rw-r--r-- 1 user staff 287M 3 2 15:22 AirtestIDE-win64-win-1.2.9.zip提示不要解压到中文路径或带空格的目录如D:\我的测试工具\AirtestIDE\v1.2.9 的内置 Python 解释器在解析路径含空格时会触发UnicodeDecodeError。推荐解压到C:\AirtestIDE\或D:\airtest\这类纯英文短路径。解压后双击AirtestIDE.exe即可启动。首次运行会弹出初始化窗口全部点「跳过」——此时它会自动捆绑一个精简版 Python 3.8.10位于AirtestIDE\pyscripts\python\足够支撑基础 Airtest Poco 功能无需另行安装 Python。2.2 雷电模拟器配置开启 USB 调试 关闭「增强模式」AirTestIDE 依赖 ADB 与设备通信而雷电模拟器 v4.0 默认启用「增强模式」即 Hyper-V 加速这会导致 ADB 服务端口被占用或权限冲突。必须手动关闭启动雷电模拟器 → 右上角「设置」图标 → 「高级设置」找到「性能设置」→ 将「启用增强模式」开关设为关闭重启模拟器关键仅设置不重启无效接着开启 USB 调试模拟器内进入「设置」→「关于平板电脑」→ 连续点击「版本号」7 次 → 返回上一级出现「开发者选项」→ 进入并开启「USB 调试」验证 ADB 是否就绪打开 Windows 命令提示符CMD输入adb devices正常应返回List of devices attached emulator-5554 device若显示offline或空白说明 ADB 未正确识别。此时不要急着重装先执行adb kill-server adb start-server再运行adb devices。如果仍无设备检查雷电模拟器是否真的运行中任务管理器看dnplayer.exe进程以及 Windows 是否已安装雷电官方驱动官网下载「雷电安卓模拟器驱动」独立安装包非 Windows Update 自动推送的通用驱动。2.3 AirTestIDE 设备连接三步确认法拒绝「设备列表为空」启动 AirTestIDE 后界面右侧默认显示「移动设备连接」面板。此时需按顺序确认三件事确认 ADB 路径绑定菜单栏 →「设置」→「Android 设置」→ 查看「ADB 目录」路径。v1.2.9 默认指向其内置 ADBAirtestIDE\android_sdk\platform-tools\adb.exe切勿手动改成系统全局 ADB 路径。因为内置 ADB 已针对此版本 IDE 做过兼容性 patch外挂 ADB 极易引发device unauthorized弹窗。强制刷新设备列表在「移动设备连接」面板底部点击「刷新 ADB」按钮图标为两个循环箭头。等待 3 秒观察设备序列号是否出现。若仍为空点击右侧「ADB 调试」按钮查看底部控制台输出是否有error: device offline类报错。双击设备触发同步一旦看到emulator-5554或真机序列号必须双击该行。这是关键动作双击后 IDE 会自动向模拟器推送Yosemite.apkAirTest 的专用输入法并在设备窗实时同步屏幕画面。若跳过此步后续所有 touch / wait 操作都将因「无画面反馈」而超时失败。注意Yosemite.apk 安装后会接管系统输入法。测试结束后需手动进入模拟器「设置」→「系统管理」→「语言与输入法」→ 切回「雷电输入法」否则键盘无法唤起。3. 脚本创建与录制.air项目是核心载体截图即代码但模板路径有陷阱3.1 新建.air项目不是新建.py文件而是结构化工程AirTestIDE 的.air项目本质是一个文件夹内部包含script.py主脚本、tpl/截图模板目录、log/日志等子目录。新建时务必走标准流程菜单栏 →「文件」→「新建」→「Airtest 项目」→ 输入项目名如netease_course_test→ 选择保存路径再次强调纯英文路径如D:\airtest\projects\netease_course_test→ 点击「创建」此时 IDE 会自动生成以下结构netease_course_test/ ├── script.py # 主脚本入口 ├── tpl/ # 截图模板存放目录所有 .png 模板必须放这里 │ └── tpl1607324047907.png └── .air # 隐藏配置文件记录设备信息、Poco 设置等提示.air项目与普通 Python 脚本的核心区别在于——所有Template()调用的图片路径IDE 会自动解析为相对于tpl/目录的相对路径。例如touch(Template(tpl1607324047907.png))实际读取的是netease_course_test/tpl/tpl1607324047907.png。若手动新建.py文件并写同样代码路径会解析失败。3.2 录制启动 App 脚本从「点图标」到「输文本」的四步闭环以「网易云课程」App 为例包名com.netease.educloud按顺序操作确保设备窗已同步双击设备列表后右侧设备窗应实时显示模拟器桌面。若黑屏或卡顿点击设备窗右上角「刷新」按钮。截图 App 图标点击顶部工具栏「Airtest 辅助窗」→ 在设备窗中用鼠标左键拖拽圈选「网易云课程」图标 → 松开后自动弹出截图编辑框 → 点「确认」图片将存入tpl/目录并在script.py中插入一行touch(Template(rtpl/tpl1607324047907.png, record_pos(0.32, -0.25), resolution(1080, 1920)))参数说明record_pos是图标在屏幕中的归一化坐标x, yresolution是设备分辨率。这两项由 IDE 自动计算切勿手动修改否则截图匹配率暴跌。等待并截图搜索按钮等待 App 启动完成可肉眼观察点击「Airtest 辅助窗」→ 圈选搜索框右端的放大镜图标 → 确认。此时script.py新增wait(Template(rtpl/tpl1607324055123.png, record_pos(0.85, 0.12), resolution(1080, 1920)), timeout10)点击搜索框并输入文本先圈选搜索框本身输入区域生成touch(...)再点击编辑区在touch()下一行手动添加text(上海悠悠)text()函数会调用 Yosemite 输入法将字符串逐字发送。注意text()前必须确保光标已在输入框内即上一步touch()已成功点击搜索框。最终script.py关键片段如下# -*- encodingutf8 -*- __author__ tester from airtest.core.api import * auto_setup(__file__) # 1. 启动 App touch(Template(rtpl/tpl1607324047907.png, record_pos(0.32, -0.25), resolution(1080, 1920))) # 2. 等待搜索按钮出现超时 10 秒 wait(Template(rtpl/tpl1607324055123.png, record_pos(0.85, 0.12), resolution(1080, 1920)), timeout10) # 3. 点击搜索框 touch(Template(rtpl/tpl1607324062345.png, record_pos(0.5, 0.15), resolution(1080, 1920))) # 4. 输入文本 text(上海悠悠)3.3 执行部分代码调试利器但需警惕「上下文隔离」陷阱AirTestIDE 支持选中任意代码段如只选第 3、4 行→ 右键 →「运行选中代码」或 CtrlR。这极大提升调试效率但新手常踩坑现象选中text(上海悠悠)单独运行报错NameError: name text is not defined原因text()函数需from airtest.core.api import *导入而该语句在文件头部。选中执行时IDE 仅执行所选代码不自动补全导入语句。解决要么选中时包含from airtest.core.api import *行要么在「设置」→「运行设置」中勾选「运行选中代码时自动包含导入语句」v1.2.9 默认未勾选需手动开启。另一个陷阱是「设备上下文丢失」若先运行了touch(...)启动 App再单独运行wait(...)IDE 可能因设备状态缓存未更新而误判超时。最佳实践是每次调试前先点击设备窗右上角「刷新」按钮强制同步最新画面。4. Poco 辅助窗与 UI 树当截图失效时它是救命稻草但 Android 模式要手动选4.1 启用 Poco 辅助窗不是点开就生效必须指定平台并启动服务AirTestIDE 的 Poco 辅助窗UI 渲染树与 Airtest 截图是两套独立引擎。启用前需确认设备已连接且双击激活同 2.3 节左侧工具栏点击「Poco 辅助窗」图标为 在 Poco 辅助窗顶部下拉菜单中手动选择「Android」即使你连的是雷电模拟器也选 Android而非「Auto」或「Unity」此时若 UI 树为空白说明 Poco 服务未在设备端启动。点击 Poco 辅助窗内的「Poco Inspector」按钮图标为十字准星IDE 会自动向设备推送pocoservice.jar并启动服务。首次启动需 5~10 秒期间设备窗右上角会显示「正在启动 Poco 服务...」提示。提示Poco 服务依赖设备端的无障碍服务Accessibility Service。雷电模拟器 v4.0 默认已开启但真机需手动进入「设置」→「辅助功能」→ 开启「AirTestPocoService」。若启动失败控制台会报java.lang.SecurityException: AccessibilityService not enabled此时需去设备设置中授权。4.2 冻结模式精准定位控件的必备操作Poco Inspector 默认为「实时模式」鼠标悬停在设备窗元素上UI 树高亮对应节点点击元素UI 树展开并选中。但问题来了——很多 App 点击后页面跳转你根本来不及看清控件属性。解决方案是启用「冻结模式」点击 Poco 辅助窗右上角「冻结」按钮图标为锁形→ 此时设备窗画面定格UI 树保持当前状态 → 你可从容点击任意位置UI 树会高亮其父级控件 → 查看左侧属性面板中的name、type、text等字段。例如点击搜索框后UI 树可能显示android.widget.EditText ├── name: android:id/search_src_text ├── text: └── enabled: True此时即可在脚本中用 Poco 语法精准操作from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco AndroidUiautomationPoco(use_airtest_inputTrue, screenshot_each_actionFalse) # 点击搜索框用 name 定位比截图稳定 poco(android:id/search_src_text).click() # 输入文本Poco 模式下 text() 仍可用但推荐用 set_text 更可靠 poco(android:id/search_src_text).set_text(上海悠悠)4.3 Poco 与 Airtest 的协同策略什么情况该切模式场景推荐方案原因静态图标App 图标、固定按钮Airtest 截图快速直观无需启动 Poco 服务输入框、列表项、动态 ID 控件Poco 定位text登录比截图容忍度高适配不同分辨率WebView 内 H5 元素Poco WebView 模式需在 Poco 辅助窗切换为「WebView」并确保 App 内webview已启用调试游戏 Unity 界面Poco Unity 模式需 App 集成 Poco-SDKv1.2.9 对 Unity 支持较成熟注意同一脚本中可混用两种方式但需注意初始化。Airtest 脚本默认已from airtest.core.api import *若要用 Poco需额外from poco.drivers.android.uiautomation import AndroidUiautomationPoco并实例化poco对象。不要在.air项目中混用poco(...)和touch(Template(...))而不加注释后期维护极易混乱。5. 断言与报告assert_exists 是第一道防线但超时时间必须亲手调5.1 四类断言的实战用法从「存在」到「相等」的渐进验证AirTestIDE 内置四种断言函数全部位于airtest.core.api模块无需额外导入。它们是自动化脚本的「质量守门员」assert_exists(v, msg)断言屏幕上存在某张截图v 为 Template 对象assert_not_exists(v, msg)断言屏幕上不存在某张截图assert_equal(first, second, msg)断言两个值相等常用于poco(...).attr(text)返回值比对assert_not_equal(first, second, msg)断言两个值不相等典型用例验证「我的」页面是否成功登录# 截图「我的」页面顶部的「登录/注册」按钮未登录态 login_btn Template(rtpl/tpl1621832250338.png) # 断言该按钮存在即未登录 assert_exists(login_btn, 我的页面存在登录/注册按钮) # 点击登录后再次截图「我的」页面顶部的用户名已登录态 username_txt Template(rtpl/tpl1621832261444.png) # 断言用户名存在即已登录 assert_exists(username_txt, 我的页面存在用户名) # 进一步断言用户名文本为「上海悠悠」 actual_name poco(com.netease.educloud:id/tv_username).get_text() assert_equal(actual_name, 上海悠悠, 用户名应为上海悠悠)提示assert_equal的first和second参数类型需严格一致。若poco(...).get_text()返回None直接与字符串比较会抛TypeError。安全写法是先用assert_not_equal(actual_name, None)再比对内容。5.2 断言失败的真相不是脚本错了而是超时参数没调对新手最常问「明明截图就在屏幕上为什么assert_exists总报does not exist in screen」答案十有八九是超时时间timeout太短。assert_exists()默认 timeout 为 3 秒但实际场景中模拟器冷启动 App 需 5~8 秒网络请求加载头像需 2~3 秒动画过渡帧延迟导致截图匹配失败必须显式传入 timeout# 错误依赖默认 3 秒大概率失败 assert_exists(Template(tpl/login_btn.png)) # 正确根据场景设为 10 秒给足加载时间 assert_exists(Template(tpl/login_btn.png), timeout10)更精细的做法是结合wait()预热# 先等待元素出现最长 15 秒再断言此时几乎必成功 wait(Template(tpl/login_btn.png), timeout15) assert_exists(Template(tpl/login_btn.png), msg登录按钮必须存在)5.3 报告生成与快照HTML 报告不是终点而是调试起点每次点击「运行」按钮AirTestIDE 会在项目根目录下生成log/文件夹内含log.txt纯文本日志含每步耗时、ADB 命令report/HTML 报告目录含index.htmlsnapshot/每步操作的截图命名含时间戳查看报告的正确姿势运行结束后按CtrlL或菜单栏「查看」→「查看报告」IDE 会自动用默认浏览器打开log/report/index.html。报告亮点在于每行代码旁嵌入对应操作的截图如touch(...)行旁是点击前的屏幕快照红色高亮失败步骤并显示AssertionError堆栈底部「Log」标签页可查看原始 ADB 输出定位INSTALL_FAILED_UPDATE_INCOMPATIBLE类错误提示若报告中截图显示「黑屏」或「模糊」说明设备窗未同步成功。此时需检查「移动设备连接」面板中设备状态是否为device以及是否双击过设备序列号。黑屏报告毫无调试价值务必先解决设备连接问题。6. 命令行运行与环境定制脱离 IDE 不是梦但 Python 路径必须亲手指定6.1 命令行运行.air脚本用airtest run替代 IDE 点击当需要集成到 CI/CD 流水线或批量运行多个脚本时必须脱离 IDE。v1.2.9 自带命令行工具airtest位于AirtestIDE\pyscripts\目录下。基础命令格式# 进入 AirtestIDE 安装目录 cd C:\AirtestIDE\ # 运行指定 .air 项目注意路径用正斜杠 / 或双反斜杠 \\ pyscripts\airtest run D:/airtest/projects/netease_course_test --device Android://127.0.0.1:5037/emulator-5554 --log D:/airtest/projects/netease_course_test/log参数说明--device指定设备 URI格式为Android://host:port/serial。127.0.0.1:5037是 ADB 默认地址emulator-5554是设备序列号adb devices查看--log指定日志输出目录必须存在且可写--recording添加此参数可同时录制操作视频需设备支持screenrecord生成 HTML 报告命令行运行后log/目录已生成原始日志但 HTML 报告需额外命令生成pyscripts\airtest report D:/airtest/projects/netease_course_test/log --output_root D:/airtest/projects/netease_course_test/report --static_root pyscripts/static/注意--static_root必须指向pyscripts/static/这是 v1.2.9 内置的报告模板资源目录。若指向错误报告页面将无样式、无 JS 交互。6.2 自定义 Python.exe 路径当内置 Python 不够用时v1.2.9 内置 Python 3.8.10 足够跑通 Airtest Poco但若需使用requests等第三方库发 HTTP 请求集成pytest做参数化测试调用cv2做图像预处理则必须替换为完整 Python 环境。操作路径菜单栏 →「设置」→「Airtest 设置」→「自定义 Python.exe 路径」→ 点击「浏览」选择你本地安装的python.exe如C:\Python39\python.exe关键验证步骤替换后重启 AirTestIDE新建一个.py脚本非.air写import sys print(sys.executable) # 应输出你指定的路径 print(sys.version) # 应输出对应版本号运行该脚本确认输出无误注意自定义 Python 后.air项目仍使用内置 Python只有.py脚本才走自定义路径。若想让.air也用自定义 Python需手动修改项目.air配置文件不推荐易破坏 IDE 兼容性。6.3 常见问题排查三类高频翻车现场与后悔药现象 1命令行运行报错ModuleNotFoundError: No module named airtest原因airtest命令未在 PATH 中或当前 shell 未激活 AirTestIDE 的 Python 环境解决绝对不要用pip install airtest。直接使用AirtestIDE\pyscripts\airtest.batWindows或airtest.shMac/Linux它会自动注入内置 Python 路径。或者 cd 到pyscripts/目录下执行cd C:\AirtestIDE\pyscripts\ airtest run D:/project --device Android://...现象 2Poco 辅助窗显示Connection refused原因设备端 Poco 服务崩溃或 ADB 端口被占用解决在设备上进入「设置」→「应用管理」→ 找到「PocoService」→ 强制停止CMD 中执行adb shell am force-stop com.netease.open.pocoservice重启 AirTestIDE重新点击「Poco Inspector」现象 3text()输入中文乱码或不显示原因Yosemite 输入法未设为默认或模拟器输入法切换异常解决模拟器内「设置」→「语言与输入法」→ 确保「Yosemite」排在第一位若仍无效卸载设备上的Yosemite.apkadb uninstall com.netease.open.yosemite重启 IDE 后重连设备自动重装从那以后我每次新装 AirTestIDE都强制走一遍「下载 v1.2.9 → 解压到英文路径 → 启动后跳过初始化 → 连雷电模拟器 → 双击设备 → 截图录第一行 touch」这个最小闭环。只要这五步通后面所有功能都是水到渠成。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
Unity光照贴图与动态物体光照协同优化方案 1. 光照贴图技术背景与核心挑战在Unity引擎中,光照贴图(Lightmapping)是提升场景真实感的关键技术。它通过预计算静态物体表面的光照信息,将阴影、间接光照等效果烘焙到纹理中,从而在运行时大幅降低实时计算开销。这项… · 2026/11/3 3:08:31
Godot引擎可视化编程:GraphEdit与GraphNode入门指南 1. Godot中的GraphEdit与GraphNode基础认知第一次接触Godot引擎的视觉化编程工具时,GraphEdit和GraphNode这对组合给我的感觉就像乐高积木——通过连接不同功能的节点块来构建逻辑流。GraphEdit是承载节点编辑的画布容器,而GraphNode则是画布上可拖拽、连… · 2026/11/3 3:08:31
简单电网系统构建与优化实践指南 1. 项目概述:什么是"简单电网"?在能源领域,电网是指由发电站、输电线路、变电站和配电网络组成的电力供应系统。而"简单电网"通常指小规模、模块化的电力系统,常用于教学演示、科研实验或偏远地区的微电网应用… · 2026/11/3 3:08:31
高通平台LCD与TP驱动Porting:设备树、时序与联调排错 1. 先把 Porting 拆成两条线:整体设计与思路高通平台上的 TP 和 LCD 驱动 Porting,说白了就是让一块陌生的屏幕亮起来、让一层陌生的触摸膜准起来。在手机、平板、POS 机、车机这类整机项目里,这两件事几乎永远绑在一起做:屏不亮&… · 2026/11/3 3:32:35
Android面试题及答案:四大组件、Handler机制与内存泄露考点梳理 简介:这份文档面向准备Android开发岗位面试的初中级工程师与求职者,围绕常见面试考点整理试题及参考答案,可用于系统复习、查漏补缺和面试前自测。内容覆盖Activity生命周期与状态保存、五种常用布局、SharedPreferences与SQLite等数据存储方… · 2026/11/3 3:32:35
琴语言虚拟机架构:融合代数计算与符号执行的技术解析 1. 项目背景与核心概念解析"云藏山鹰代数信息系统"是一个融合了形式化方法与程序语言理论的实验性项目,其核心组件"神游思想之琴语言"(以下简称琴语言)采用了一种独特的虚拟机架构来实现代数计算与符号推理。从代码段编号… · 2026/11/3 3:32:35
Hadoop+Spark+Hive构建旅游推荐系统实践 1. 项目概述:大数据技术在旅游推荐系统中的应用实践这个基于HadoopSparkHive的旅游推荐系统是我去年指导的一个本科毕业设计项目,也是目前旅游行业数字化转型的典型应用场景。系统通过爬虫采集多源旅游数据,利用大数据技术栈实现景点推荐、用… · 2026/11/3 3:32:35
Hadoop+Spark构建旅游推荐系统的实践与优化 1. 项目概述:大数据技术在旅游推荐系统中的应用实践这个基于HadoopSparkHive的旅游推荐系统是我去年指导的一个本科毕业设计项目,也是我在旅游科技领域的一次完整技术实践。系统整合了从数据采集、存储处理到智能推荐的完整链路,特别适合想要… · 2026/11/3 3:32:35
构建持续进化的个人知识系统:方法与工具 1. 为什么学习后的持续进化如此重要?我们都有过这样的经历:花几个月时间学完某个课程或掌握某项技能后,很快发现学到的知识开始变得陈旧。技术迭代的速度远超我们的想象——根据Stack Overflow的年度开发者调查,主流编程框架的平均… · 2026/11/3 3:31:34
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18