问候和问候!
我正在为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
某处的问题。
我推测根本原因是自动化实现以可访问性为目标,并且他们错误地忽略了一些不可读的控件(Image
、Geometry
等(。
某些情况的解决方法
- 尝试使用具有文本的类型中的 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库,因此我无法为您的库提供示例。不好意思。