【问题标题】:pywinauto does not find Win32 elements in mixed backend applications under virtualboxpywinauto在virtualbox下的混合后端应用程序中找不到Win32元素
【发布时间】:2019-07-10 13:12:23
【问题描述】:

如果脚本在 virtualbox 中运行,pywinauto 找不到作为 aui 后端元素子级的 win32 后端元素

我们有一个WinForm ComboBox,它正在调用弹出一个Win32 ComboLBox,其中包含ListItems。在本地机器上使用 pywinauto 默认方法时 如果脚本在 virtualbox 中运行,pywinauto 找不到作为 aui 后端元素子级的 win32 后端元素

我们有一个WinForm ComboBox,它正在调用弹出一个Win32 ComboLBox,其中包含ListItems。在本地机器上使用 pywinauto 默认方法时

app.Dialog.ComboLBox.select('myitem')

效果很好。在 virtualbox VM(来自微软网站的 Win10 (x64) 上的 MSEdge)上使用相同的代码时,pywinauto 看不到 ComboLBox 对象下的项目。 Inspect 列出它们,.ComboLBox.texts() 返回一个字符串列表,但 .ComboLBox.children() 为空。

这种情况有什么解决方法吗?我几乎无法想象自动化工具会直接在您的桌面上大量使用,因为如今所有这些都转向虚拟机和云。

【问题讨论】:

    标签: winapi virtualbox win32gui pywinauto


    【解决方案1】:

    WinForms 组合框的子项在至少展开一次之前可能未列出。这在 Inspect.exe 中应该看起来相同。方法 .texts() 使用另一种方法,而不是获取孩子。还有一种方法 .select(“...”) 在这两种情况下都可以正常工作。如果您严格需要子列表,只需在 .children() 之前执行 .expand().collapse()。

    当然,这与 VirtualBox 或任何特定于云的事物无关。你很幸运能在特定版本的 .NET Runtime 上发现这一点。

    【讨论】:

    • 您好,感谢您的回答!这当然是.Net Runtime 相关问题。我们最终有两个应用程序对象 app (aui start) 和 app32 (win32 connect) 来处理此类敏感组件(主要是菜单弹出类型的元素)。
    • 酷。如果它已经解决了您的问题,请将答案标记为已接受(按答案左侧的灰色复选框;它适用于任何信誉量)。在 StackOverflow 上被认为是礼貌的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2021-08-24
    • 1970-01-01
    • 2011-05-18
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多