Pywinauto 如何获取返回元素的列表
Pywinauto how do I get the list of returned elements
我正在使用具有自定义堆栈面板的 WPF 应用程序,它基本上是一个列表。列表中的项目完全相同,因此我无法 select 特定文本来唯一标识元素。还有一些其他值,例如时间是动态的。
有没有办法让我得到返回的元素列表。我知道这是可能的,因为抛出了错误,ElementAmbiguousError 说明了计数。
如果我能做到这一点,那么我可以从该列表中使用索引并验证我需要的内容。
您可以将 found_index=0
或其他索引添加到 window 规范对象。这是消除搜索歧义的第一种方法。
还有一些方法 .children()
和 .descendants()
带有附加参数,例如 control_type
或 title
(我记得 title
应该可以),但是一些window 这些方法不支持规范参数。
elements = pywinauto.findwindows.find_elements(<args>)
len(elements)
<args>
将需要包含比使用 Application().connect(process=<pid>).window().child_window(<args>)
之类的内容更详细的信息,因为它在链中没有关于您所在的 window 的信息重新搜索。有关详细信息,请参阅 the documentation on this method。
另请注意,有一个警告,不建议直接使用此方法,因为它是低级别 API。
另一种解决方案(已经由vasily提供)是解析当找到多个元素时返回的错误以隔离找到的数字。
除非 pywinauto 开发人员决定提供 higher-level API 来访问找到的元素数量,否则您必须权衡 low-level API 随着解析错误消息的风险而改变,错误消息也可能改变。我也有这个问题,决定使用 find_elements()
我正在使用具有自定义堆栈面板的 WPF 应用程序,它基本上是一个列表。列表中的项目完全相同,因此我无法 select 特定文本来唯一标识元素。还有一些其他值,例如时间是动态的。
有没有办法让我得到返回的元素列表。我知道这是可能的,因为抛出了错误,ElementAmbiguousError 说明了计数。
如果我能做到这一点,那么我可以从该列表中使用索引并验证我需要的内容。
您可以将 found_index=0
或其他索引添加到 window 规范对象。这是消除搜索歧义的第一种方法。
还有一些方法 .children()
和 .descendants()
带有附加参数,例如 control_type
或 title
(我记得 title
应该可以),但是一些window 这些方法不支持规范参数。
elements = pywinauto.findwindows.find_elements(<args>)
len(elements)
<args>
将需要包含比使用 Application().connect(process=<pid>).window().child_window(<args>)
之类的内容更详细的信息,因为它在链中没有关于您所在的 window 的信息重新搜索。有关详细信息,请参阅 the documentation on this method。
另请注意,有一个警告,不建议直接使用此方法,因为它是低级别 API。
另一种解决方案(已经由vasily提供)是解析当找到多个元素时返回的错误以隔离找到的数字。
除非 pywinauto 开发人员决定提供 higher-level API 来访问找到的元素数量,否则您必须权衡 low-level API 随着解析错误消息的风险而改变,错误消息也可能改变。我也有这个问题,决定使用 find_elements()