You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinAppDriver测试FMX/VCL应用时page_source无法识别控件求助

解决Delphi 12 FMX/VCL应用WinAppDriver控件识别问题

针对你遇到的仅能识别应用窗口、无法获取内部控件,且FrameworkId显示异常的问题,给你几个实际可行的解决方向:

  • 启用应用的无障碍支持

    • FMX项目:必须手动引入FMX.Accessibility单元,然后在窗体的OnCreate事件里添加Screen.AccessibilityEnabled := True;。另外要给每个需要识别的控件(TButton、TEdit等)设置AccessibleName属性,比如把按钮的AccessibleName设为"SubmitBtn",这样WinAppDriver才能通过标识定位控件。
    • VCL项目:添加Vcl.Accessibility单元,同样给控件设置AccessibleName,同时检查项目选项里的"Enable Runtime Themes"是否开启——禁用主题会导致无障碍信息无法正常暴露给系统。
  • 匹配WinAppDriver与应用的位数
    你的应用是64位,但FrameworkId显示Win32,大概率是用了32位的WinAppDriver。找到64位版本的WinAppDriver.exe(可从官方安装包的对应路径获取),启动它来测试64位应用,FrameworkId的显示就会恢复正常。

  • 用Inspect.exe验证无障碍信息
    打开Windows SDK里的Inspect.exe(路径一般是C:\Program Files (x86)\Windows Kits\10\bin\<你的SDK版本>\x64\Inspect.exe),用它查看你的Delphi应用控件。如果Inspect也看不到内部控件,那问题肯定出在应用的无障碍配置上,和WinAppDriver无关;只有Inspect能识别到控件,WinAppDriver才能正常获取。

  • 更新Delphi补丁
    Delphi 12初期版本可能存在FMX/VCL无障碍组件的兼容性bug,去Embarcadero官网下载安装最新的12.x补丁(比如12.0.1及以上版本),不少用户反馈补丁能解决这类控件识别问题。

  • 优化测试脚本的等待逻辑
    不要在应用刚启动就调用driver.page_source,用WebDriverWait等待窗体加载完成后再获取控件树,示例代码:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "Form1")))
    print(driver.page_source)
    

内容的提问来源于stack exchange,提问作者bas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:22:38