展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > c#如何实现API自动化测试_c#API自动化测试项目实例附完整源码

c#如何实现API自动化测试_c#API自动化测试项目实例附完整源码

从窗口句柄“摸进去”:EnumChildWindows 的真实玩法 EnumChildWindows 是 Windows API 里最容易被误用、但又绕不开的黑盒自动化入口点。它不依赖目标程序源码,也不需要 .NET 反射或 UIA,特别适合测试 Win32、MFC、WinForms 甚至部分 WP

本文目录

    从窗口句柄“摸进去”:EnumChildWindows 的真实玩法

    EnumChildWindows 是 Windows API 里最容易被误用、但又绕不开的黑盒自动化入口点。它不依赖目标程序源码,也不需要 .NET 反射或 UIA,特别适合测试 Win32、MFC、WinForms 甚至部分 WPF(启用 Win32 子窗口模式时)的老系统。简单说:你不需要等目标程序暴露接口,只要它有窗口句柄,就能从外层“摸进去”。这一下就打开了自动化的门,但怎么“摸”得准、“摸”得稳,里边门道不少。

    c#如何实现API自动化测试_c#API自动化测试项目实例附完整源码

    怎么用 EnumChildWindows 找到 TextBox 和 Button 的句柄

    关键不是“枚举一次”,而是递归+条件过滤+控件识别组合。很多新手卡在第一步:只调了一次 EnumChildWindows,结果只拿到主窗体的直接子控件(比如菜单栏、状态栏),漏掉了嵌套在 Panel 或 GroupBox 里的真实控件。好比你从大门进去,只在前厅转了一圈,卧室和书房全错过了。

    实际操作要分三步走:

    • 先用 FindWindow 拿到目标进程主窗口句柄(靠 ClassName 或 WindowName,SPY++ 可查)
    • 再用 EnumChildWindows 遍历所有子窗口,回调函数里检查 GetClassName 和 GetWindowText
    • 对每个子窗口继续调 EnumChildWindows,实现深度遍历(别忘了加递归终止条件,比如深度 > 10)

    常见错误是把 TextBox 识别成 EDIT 类,把 Button 识别成 Button 类——没错,Win32 下它们的原生类名就是这些,不是 .NET 的控件名。所以别按控件名去匹配,得按类名。

    示例片段(简化版):

    private List _foundHandles = new();
    private void EnumAllChildren(IntPtr hWndParent, int depth = 0) {
        if (depth > 8) return;
        EnumChildWindows(hWndParent, (hWnd, lParam) => {
            var className = GetClassName(hWnd);
            var text = GetWindowText(hWnd);
            if (className == "EDIT" && text.Contains("test")) {
                _foundHandles.Add(hWnd);
            }
            if (className == "Button" && text == "Submit") {
                _foundHandles.Add(hWnd);
            }
            EnumAllChildren(hWnd, depth + 1); // 继续向下
            return true;
        }, IntPtr.Zero);
    }

    为什么 SendMessage 发文本老是失败

    SendMessage 对 EDIT 控件发 WM_SETTEXT 看似简单,但容易栽在三个地方:

    • 目标控件没就绪:有些 WinForms 程序会在 Load 后延迟初始化控件句柄,直接发消息会静默失败;
    • 线程上下文不对:SendMessage 必须由创建该窗口的线程调用,跨线程发会卡住或返回 0;
    • 字符编码问题:.NET 字符串默认 UTF-16,但某些老程序只认 ANSI,得用 SendMessageA + Marshal.StringToHGlobalAnsi。

    更稳的做法是组合使用:

    • 先用 PostMessage 发 WM_KEYDOWN/WM_CHAR 模拟按键输入(绕过线程限制)
    • 或用 SetForegroundWindow + keybd_event(适合简单场景,但会被用户中断)
    • 对关键步骤加等待:比如发完文本后,SendMessage(hWnd, WM_GETTEXTLENGTH, ...) 检查长度是否匹配

    如何避免被目标程序反自动化检测

    不少工业软件(如 PowerMill、SolidWorks 插件界面)或金融客户端会主动检测鼠标/键盘模拟行为,典型表现是:按钮点了没反应、文本框输不进、甚至弹出“检测到异常操作”提示。这时别急着怀疑自己代码写错了,问题很可能出在目标程序的手段上——它可能在读 GetAsyncKeyState、监控 WH_CALLWNDPROC 钩子、或检查 GetMessagePos 是否为 (0,0)。

    绕过思路很实际:

    • 不用 mouse_event,改用 SendMessage 直接发 BM_CLICK 给按钮句柄(无鼠标移动痕迹)
    • 避免全局钩子,所有操作基于已知句柄,不注入 DLL
    • 关键操作前调 AllowSetForegroundWindow(ASFW_ANY),防止焦点抢占失败导致输入丢失
    • 加随机延时(50–300ms),避开固定节奏检测逻辑

    真正难的不是“能不能点”,而是“点得像不像人”。很多项目败在最后一步:没处理好窗口激活顺序和焦点链,导致 EDIT 控件虽然拿到了句柄,却因没获得输入焦点而丢弃输入。

    完整项目结构里最容易被忽略的一环

    不是 API 调用,也不是句柄查找,而是进程生命周期管理。你写了个自动点击工具,跑一遍成功了;但第二遍失败——因为上一次的 FindWindow 找到了残留的旧进程窗口(比如程序崩溃后没彻底退出),句柄还在,但内部状态已损坏。

    正确做法是:

    • 每次操作前,用 Process.GetProcessesByName 校验目标进程是否存活且只有一个实例
    • 必要时先 Terminate 旧进程(注意权限),再启动新实例
    • 用 WaitForInputIdle 等待主窗口完成初始化,而不是盲目 Thread.Sleep(2000)
    • 所有句柄缓存加时效标记,超 5 秒未刷新就视为失效,重新查找

    这层逻辑不写进 Services 层,而是放在最外层的执行协调器里——它不关心“怎么点”,只负责“什么时候点、点谁、点失败了怎么办”。这才是工业级黑盒自动化能长期跑稳的关键。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 C#
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。