当前位置:   article > 正文

Pywinauto基础03--控件操作_pywinauto获取控件坐标

pywinauto获取控件坐标

操作窗体中的控件

Pywinauto使用以下顺序定位一个控件

1:控件的标题 title

2:控件的类名 friendly class

3:控件的标题加类名 title + friendly class

常用定位控件接口(重要)

  1. # 通过层级查找控件相关方法
  2. window(**kwargs) # 用于窗口的查找
  3. child_window(**kwargs) # 可以无视层级的找后代中某个符合条件的元素===>【最常用】
  4. parent() # 返回此元素的父元素,没有参数
  5. children(**kwargs) # 返回符合条件的子元素列表,支持索引,是BaseWrapper对象(或子类)
  6. iter_children(**kwargs) # 返回子元素的迭代器,是BaseWrapper对象(或子类)
  7. descendants(**kwargs) # 返回符合条件的所有后代元素列表,是BaseWrapper对象(或子类)
  8. iter_children(**kwargs) # 符合条件后代元素迭代器,是BaseWrapper对象(或子类)---> 存疑,是iter_descendants?

常用属性(重要)

  1. # 常用的
  2. class_name=None, # 类名
  3. class_name_re=None, # 正则匹配类名
  4. title=None, # 控件的标题文字,对应inspect中Name字段
  5. title_re=None, # 正则匹配文字
  6. control_type=None, # 控件类型,inspect界面LocalizedControlType字段的英文名
  7. best_match=None, # 模糊匹配类似的title
  8. auto_id=None, # inspect界面AutomationId字段,但是很多控件没有这个属性
  9. # 不常用
  10. parent=None,
  11. process=None,# 这个基本不用,每次启动进程都会变化
  12. top_level_only=True,
  13. visible_only=True,
  14. enabled_only=False,
  15. handle=None,
  16. ctrl_index=None,
  17. found_index=None,
  18. predicate_func=None,
  19. active_only=False,
  20. control_id=None,
  21. framework_id=None,
  22. backend=None,

控件可用的方法属性(重要)

  1. # 以下几个只支持窗口模式的控件
  2. dlg.close() # 关闭界面
  3. dlg.minimize() # 最小化界面
  4. dlg.maximize() # 最大化界面
  5. dlg.restore() # 将窗口恢复为正常大小,比如最小化的让他正常显示在桌面
  6. dlg.get_show_state() # 正常0,最大化1,最小化2
  7. dlg.menu_select() # 菜单栏,eg:app.window.menu_select(Edit -> Replace)
  8. dlg.exists(timeout=None, retry_interval=None) # 判断是否存在
  9. #timeout:等待时间,一般默认5s
  10. #retry_interval:timeout内重试时间
  11. dlg.wait(wait_for, timeout=None, retry_interval=None) # 等待窗口处于特定状态
  12. dlg.wait_not(wait_for_not, timeout=None, retry_interval=None) # 等待窗口不处于特定状态,即等待消失
  13. # wait_for/wait_for_not:
  14. # * 'exists' means that the window is a valid handle
  15. # * 'visible' means that the window is not hidden
  16. # * 'enabled' means that the window is not disabled
  17. # * 'ready' means that the window is visible and enabled
  18. # * 'active' means that the window is active
  19. # timeout:等待多久
  20. # retry_interval:timeout内重试时间
  21. # eg: dlg.wait('ready')
  22. # 鼠标键盘操作,只列举了常用形式,他们有很多默认参数但不常用,可以在源码中查看
  23. ctrl.click_input() # 最常用的点击方法,一切点击操作的基本方法(底层调用只是参数不同),左键单击,使用时一般都使用默认不需要带参数
  24. ctrl.right_click_input() # 鼠标右键单击
  25. ctrl.type_keys(keys, pause = None, with_spaces = False,) # 键盘输入,底层还是调用keyboard.send_keys
  26. # keys:要输入的文字内容
  27. # pause:每输入一个字符后等待时间,默认0.01就行
  28. # with_spaces:是否保留keys中的所有空格,默认去除0
  29. ctrl.double_click_input(button ="left", coords = (None, None)) # 左键双击
  30. ctrl.press_mouse_input(coords = (None, None)) # 指定坐标按下左键,不传坐标默认左上角
  31. ctrl.release_mouse_input(coords = (None, None)) # 指定坐标释放左键,不传坐标默认左上角
  32. ctrl.move_mouse_input(coords=(0, 0)) # 将鼠标移动到指定坐标,不传坐标默认左上角
  33. ctrl.drag_mouse_input(dst=(0, 0)) # 将ctrl拖动到dst,是press-move-release操作集合
  34. # 控件的常用属性
  35. ctrl.children_texts() # 所有子控件的文字列表,对应inspect中Name字段
  36. ctrl.window_text() # 控件的标题文字,对应inspect中Name字段
  37. # ctrl.element_info.name
  38. ctrl.class_name() # 控件的类名,对应inspect中ClassName字段,有些控件没有类名
  39. # ctrl.element_info.class_name
  40. ctrl.element_info.control_type # 控件类型,inspect界面LocalizedControlType字段的英文名
  41. ctrl.is_child(parent) # ctrl是否是parent的子控件
  42. ctrl.legacy_properties().get('Value') # 可以获取inspect界面LegacyIAccessible开头的一系列字段,在源码uiawraper.py中找到了这个方法,非常有用
  43. # 控件常用操作
  44. ctrl.draw_outline(colour='green') # 空间外围画框,便于查看,支持'red', 'green', 'blue'
  45. ctrl.print_control_identifiers(depth=None, filename=None) # 以树形结构打印其包含的元素,详见打印元素
  46. # depth:打印的深度,缺省时打印最大深度。
  47. # filename:将返回的标识存成文件(生成的文件与当前运行的脚本在同一个路径下)
  48. ctrl.scroll(direction, amount, count=1,) # 滚动
  49. # direction :"up", "down", "left", "right"
  50. # amount:"line" or "page"
  51. # count:int 滚动次数
  52. ctrl.capture_as_image() # 返回控件的 PIL image对象,可继续使用其方法如下:
  53. # eg: ctrl.capture_as_image().save(img_path)
  54. ret = ctrl.rectangle() # 控件上下左右坐标,(L430, T177, R1490, B941),可输出上下左右
  55. # eg: ret.top=177
  56. # ret.bottom=941
  57. # ret.left=430
  58. # ret.right=1490

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/121330
推荐阅读
  

闽ICP备14008679号