如何用Appium、WinAppDriver、VS及C#自动化无支持的桌面应用测试?
针对无自动化支持的桌面应用的WinAppDriver/Appium自动化建议
升级WinAppDriver版本
你当前用的WinAppDriver 0.7版本较老,新版(如1.2+)对无原生自动化支持的应用兼容性更好,优化了元素识别逻辑。卸载旧版后安装最新稳定版,再用inspect.exe重新排查元素。调整inspect.exe的捕获方式
打开inspect.exe后,点击顶部「Options」菜单,勾选「Enable Highlight」和「Show ToolTips」,用「Find Tool」(瞄准图标)点击应用各区域。若仍无元素,切换到「Raw View」模式查看底层UI树,部分无自动化支持的应用会暴露窗口句柄或原始控件信息。另外要确认应用框架:如果是Qt应用,需启用Qt自动化插件;如果是Electron应用,要确保打包时开启了自动化支持。降级到基于坐标和窗口句柄的操作方案
若完全识别不到元素,只能依赖坐标和窗口句柄模拟操作:- 用WinAppDriver的
Driver.Manage().Window获取应用窗口句柄,通过Actions类模拟鼠标、键盘操作,示例代码:// 最大化窗口 var window = Driver.Manage().Window; window.Maximize(); // 模拟点击坐标(100,200) new Actions(Driver).MoveByOffset(100, 200).Click().Perform(); - 结合Windows API(如user32.dll的
SendMessage、mouse_event)补充WinAppDriver的不足,直接向窗口发送消息模拟输入。
- 用WinAppDriver的
检查Appium与WinAppDriver的配置兼容性
确认Appium启动参数正确:app指向应用可执行文件路径,platformName设为Windows,deviceName设为WindowsPC,示例代码:DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.SetCapability("app", @"C:\Path\To\Your\AccountingApp.exe"); capabilities.SetCapability("platformName", "Windows"); capabilities.SetCapability("deviceName", "WindowsPC"); Driver = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), capabilities);启动WinAppDriver时加
--verbose参数查看日志,排查应用启动时的权限不足、进程挂载异常等问题。尝试应用兼容模式
右键应用可执行文件,进入「属性」-「兼容性」,勾选「以管理员身份运行此程序」,或切换到Windows 7/8兼容模式,部分旧应用在兼容模式下会暴露更多自动化接口。
内容的提问来源于stack exchange,提问作者Muhammad Umair Khan
相关产品推荐
相关产品推荐

