有没有办法从具有属性 IsControlElement = False 的 ui 元素中检索信息?(Python + A



问候和问候!

我正在为Windows桌面应用程序(FrameworkId:Win32(开发UI自动化项目 堆栈:Python (3.7( + Appium (1.15.1( + WinAppDriver (v1.1(。

我已经使用 Inspect.exe 识别了一个元素,但是当我尝试编码时,无论我做什么,我都会收到此错误:selenium.common.exceptions.NoSuchElementException: 消息:使用给定的搜索参数无法在页面上找到元素。

我使用的定位器策略是 xpath:self.driver.find_element_by_xpath("//*[@LocalizedControlType='text' and @IsControlElement='false']")

如您所见,Inspect.exe 已经表明它具有"IsControlElement='false'"的属性,但我一生都无法通过代码"访问"它。

我还想指出,任何具有IsControlElement='true'的元素都可以正确找到,我可以与它们"互动"。

非常感谢您的帮助!

问题来源

这可能是Microsoft 在 .NET 中的UI 自动化实现中存在的问题。 该物业IsControlElement应该true归还,而没有。

从我的测试来看,这似乎是UIAutomationCore.dll某处的问题。

推测根本原因是自动化实现以可访问性为目标,并且他们错误地忽略了一些不可读的控件(ImageGeometry等(。

某些情况的解决方法

  • 尝试使用具有文本的类型中的 UI 控件。
  • 如果它已经是文本控件,请尝试使用其他文本控件类型。 例如 - 在项目中WPF- 使用Label而不是TextBlock
  • 如果它不是文本元素,如果可能,请将控件包装在文本元素中。 在WPF项目中,可以使用<Label Padding="0">作为包装器。

其他需要考虑的事项

  • 尝试使用 UIAComWrapper

相关问题

  • https://stackoverflow.com/a/46452431/426315
  • UIAutomation 不会检索元素的子元素
  • UI Automation - #32770(对话框(显示在 Insepct 中.exe但不显示在 VisualUIAVerifyNative 中.exe

旁注

由于您尚未指定您使用的Python GUI库,因此我无法为您的库提供示例。不好意思。

最新更新