yinkaisheng / Python-UIAutomation-for-Windows

🐍Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ...
Apache License 2.0
2.56k stars 485 forks source link

用SendKeys('{PageDown}')或DragDrop滚动页面后,下方的控件无法处理,报Can not move cursor. TextControl's BoundingRectangle is (0,0,0,0)[0x0]. SearchProperties: {Name: 'XXX', ControlType: TextControl}错误 #234

Open UshioYu opened 1 year ago

UshioYu commented 1 year ago

pyWindow = auto.WindowControl(searchDepth=1, Name='aaa') pyWindow.SendKeys('{PageDown}') 或这段pyWindow.GroupControl().DragDrop(464, 500, 464, 680, moveSpeed=5, waitTime=1) pyWindow.TextControl(Name='bbb').Click()

执行后控制台报

-> Can not move cursor. TextControl's BoundingRectangle is (0,0,0,0)[0x0]. SearchProperties: {Name: 'bbb', ControlType: TextControl} 有人遇到过类似的问题吗?
zhouxihong1 commented 1 year ago

有一些控件 Rectangle出来的坐标就是 (0,0,0,0),这个时候可以考虑直接用automation.DragDrop ,不通过识别不到的控件来获取,而是用其能够识别到的相对控件,然后计算radioX和radioY的偏移量来实现

UshioYu commented 1 year ago

有一些控件 Rectangle出来的坐标就是 (0,0,0,0),这个时候可以考虑直接用automation.DragDrop ,不通过识别不到的控件来获取,而是用其能够识别到的相对控件,然后计算radioX和radioY的偏移量来实现

我发现是我调用了滚动之后,下方的控件通过uiautomation抓取坐标是0,0,0,0,但是通过Inspect查看的BoundingRectangle是正常的。不行只能暂时通过做坐标去处理了

yangmijun commented 1 month ago

遭遇了相同问题。调用上层控件的Click后,原本折叠隐藏的下层控件露出来了,但获取到的BoundingRectangle还是0没有刷新,导致调用Click不成功,现在有权威的解决方案吗?

yangmijun commented 1 month ago

现在用另一种方式暂时绕过了这个问题,先Click一级菜单展开,然后用MoveTo 向下移动鼠标到二级菜单项上面,然后用ControlFromPoint获取鼠标下面的控件,BoundingRectangle就有坐标了,不太稳定,发现自动控制的鼠标有时候也会飘,但暂时能用。还是希望官方给一个权威方案