pywinauto无法定位child_window编辑控件问题求助
问题分析与解决方案
错误原因
你的代码定位控件的条件完全错误:
title="File name:"对应的是Static静态文本控件(就是显示“File name:”的标签),而非编辑框控件;- 目标编辑框控件的
title是*.dat,且嵌套在ComboBoxEx32→ComboBox的层级下,直接从主窗口查找会因为层级或条件不匹配找不到。
正确的实现方式
根据你导出的控件树,有以下几种可靠的定位方法:
方法1:使用控件别名直接定位
控件树里已经给出了编辑框的别名File &name:Edit,可以直接通过别名调用:
app = Application().start(exe_path) main_window = app.window(title_re=".*Open.*") main_window["File &name:Edit"].set_text("filename.dat")
方法2:按层级路径定位
通过父控件逐层定位到编辑框:
app = Application().start(exe_path) main_window = app.window(title_re=".*Open.*") # 先找到ComboBoxEx,再找ComboBox,最后定位到内部的Edit控件 combo_ex = main_window.child_window(title="*.dat", class_name="ComboBoxEx32") combo = combo_ex.child_window(class_name="ComboBox") edit = combo.child_window(class_name="Edit") edit.set_text("filename.dat")
方法3:通过title和control_type直接定位
编辑框的title是*.dat,结合control_type="edit"可以直接定位(如果主窗口下没有重名的edit控件):
app = Application().start(exe_path) main_window = app.window(title_re=".*Open.*") main_window.child_window(title="*.dat", control_type="edit").set_text("filename.dat")
补充说明
- 优先使用控件别名(控件树里的
['xxx']列表内容),这是最稳定的定位方式; - 若使用
type_keys,建议先调用set_text("")清空原有内容,或者用type_keys("^a{BACKSPACE}filename.dat")先全选删除再输入,避免原有文本叠加。
内容的提问来源于stack exchange,提问作者user3490605
相关产品推荐
相关产品推荐

