【问题标题】:How to uniquely identify a control within a window?如何唯一标识窗口内的控件?
【发布时间】:2015-01-14 13:20:05
【问题描述】:

我写了一些自动化软件。我希望能够向应用程序的特定控件发送消息。我可以找到一个应用程序,但我需要控件的 HWND。例如,我如何告诉我的软件选择此处的编辑或此处的按钮?我用 Spy++ 检查了几个控件,但没有发现独特的持久属性,见下图:

我现在唯一的想法是检查控件位置,但即使这样也不是 100% 可靠,因为选项卡视图的不同选项卡上的多个控件可能具有相同的位置!

我还能做什么? GUI 自动化测试套件如何解决这个任务?

【问题讨论】:

  • @HansPassant 是的,这是 .NET 的有用链接,对我来说会有所帮助。但是一般情况呢?
  • @HansPassant 更重要的是,它和它的现代分支都没有在我的应用程序上工作,尽管它显然是用 Windows 窗体编写的。
  • 嗯,从来没有“一般情况”。 UI 自动化是一次一个窗口的战斗。
  • @HansPassant “一般”是指“非 .NET”

标签: windows user-interface automation


【解决方案1】:

pywinauto 自动化框架能够通过像app.SomeDialog.ChildWindow(class_name='Button', ctrl_index=0).ClickInput() 这样的索引来识别控制,如果测试序列是确定性的,那么它对于每个具体时刻都是持久的。它还允许更复杂的匹配条件:app.SomeDialog.ChildWindow(title='&Next', class_name='Button', parent=SomeViewContol, predicate_func=SomeFunc).ClickInput()

【讨论】:

  • 谢谢,控制索引是个好主意。不过我对这个框架不是很感兴趣,因为我使用的是 C++,而不是 Python。
  • 我看了一下 pywinauto。它太酷了,无论如何我都会使用它,从 C++ 通过 Python 嵌入。非常感谢您的链接!
  • 以防万一...如果您需要 64 位应用程序自动化,64 位 Python 兼容版本在这里:github.com/vasily-v-ryabov/pywinauto-64(对于 32 位应用程序,您仍然需要 32 位 Python)。
  • 很高兴听到这个消息!我现在使用 pywinauto 已经很长时间了,而且效果很好!不幸的是,我发现它不是很健壮。在某些情况下,它无法自发地执行某些操作。
  • Mikhail,如果您有一些经常可重现的测试用例,很高兴在 github 存储库的“问题”列表中看到它们。
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多