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"是否开启——禁用主题会导致无障碍信息无法正常暴露给系统。
- FMX项目:必须手动引入
匹配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
相关产品推荐
相关产品推荐

