最近在学习yinkaisheng大神写的uiautomation模块,Depth和searchDepth一直使用不好,明明Depth=3,居然可以用searchDepth=1找到,网上也没找到答案,就自己试验了多次,终于发现了问题所在(主要是人比较笨),同时纠正下大神写的文档一处错误

自我理解:

searchDepth:查询的范围深度,基于当前所在控件再往下的深度,比如当前的listCtrl已经Depth=3了,如果要查listCtrl下Depth=5的控件,则searchDepth≥2都可查询当前这个控件

Depth:查询某一深度的控件,基于当前所在控件,再往下一个深度,只在那个深度进行查询,比如当前的listCtrl已经Depth=3了,如果要查listCtrl下Depth=5的控件,则Depth=2才能查到当前这个控件

图文解释:

用记事本做例子,代码是点击记事本的关闭按钮,执行代码如下:

notepadWindow = auto.WindowControl(searchDepth=1, ClassName='Notepad')
notepadWindow.ButtonControl(Depth=2,Name='关闭').Click()
通过automation.py捕捉到记事本的控件信息,并进行标记,可以很清楚的理解Depth、searchDepth:

由上图,我们如果想点击关闭按钮,那我们可以有好几种写法,如下:

1. 1 定位到记事本标题后再定位关闭: (标题是notepadWindow的下1层,所以Depth=1,关闭是标题的下一层,所以这个Depth也等于1)

notepadWindow.TitleBarControl(Depth=1).ButtonControl(Depth=1,Name='关闭')

1. 2 如果用searchDepth去写,只要searchDepth大于1,都可以查到,查到即停止

notepadWindow.TitleBarControl(Depth=1).ButtonControl(searchDepth=1,Name='关闭')
或:notepadWindow.TitleBarControl(Depth=1).ButtonControl(searchDepth=2,Name='关闭')

2. 1 直接定位到关闭按钮:(关闭是notepadWindow的下2层,所以Depth=2)

notepadWindow.ButtonControl(Depth=2,Name='关闭')

2. 2 如果用searchDepth去写,只要searchDepth大于2,都可以查到

notepadWindow.ButtonControl(searchDepth=2,Name='关闭')
或:notepadWindow.ButtonControl(searchDepth=3,Name='关闭')
 

注:如果查询参数中有Depth了,就不需要写searchDepth,Depth会把值赋值给searchDepth进行使用

整个分享就是这样啦,如果有什么不对的地方还请见谅

python桌面应用自动化,uiautomation模块的Depth和searchDepth心得的更多相关文章

  1. Python运维自动化psutil 模块详解(超级详细)

    psutil 模块 参考官方文档:https://pypi.org/project/psutil/ 一.psutil简介 psutil是一个开源且跨平台(http://code.google.com/ ...

  2. Python+Selenium自动化-安装模块和浏览器驱动操作方法

    Python+Selenium自动化-安装模块和浏览器驱动操作方法 1.安装模块文件 pip install selenium 2.安装浏览器驱动 我们主要用的浏览器驱动有chrome浏览器.fire ...

  3. python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)

    通过上篇文章日志管理模块loguru简介,我们已经知道了loguru日志记录模块的简单使用.在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题. 这篇文章我们使 ...

  4. Python自动化开发 - 模块与包

    本节内容 一.模块  1.import module 2.from module  import 3.from module  import * 4.模块的__name__属性 5.模块搜索路径 6. ...

  5. python+pytest接口自动化(15)-日志管理模块loguru简介

    python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细). 但logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理, ...

  6. Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  7. python+request接口自动化框架

    python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...

  8. Python实现浏览器自动化操作

    Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼     最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...

  9. [转载]Python实现浏览器自动化操作

    原文地址:Python实现浏览器自动化操作作者:rayment   最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...

  10. Python内置的urllib模块不支持https协议的解决办法

    Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内 ...

随机推荐

  1. 树莓派开机启动VNC

    sudo nano /etc/init.d/vncserver #!/bin/sh ### BEGIN INIT INFO # Provides: vncserver # Required-Start ...

  2. 学习Java Day22

    今天学习了如何在包中增加类,想要将包放入类中,就必须将包的名字放在源文件的开头,即放在定义这个包中各个类的代码之前

  3. NET近期面试总结和面试题

    一.面试总结 避坑:深圳龙岗李朗YH股份会鸽offer 因为offer被鸽重新找工作,从8号开始面试到12号(11家公司),整体感觉面试难度不大,就是很多公司都是走流程,并不是真的需要人,有些甚至聊一 ...

  4. 五:spring boot

    五.spring boot 通过springboot可以快速的搭建一个基于ssm框架的Java application,简单配置,自动装配. JavaConfiguration用java类来替代xml ...

  5. 免杀之:MSF后门metasploit-loader免杀

    免杀之:MSF后门metasploit-loader免杀 目录 免杀之:MSF后门metasploit-loader免杀 1 metasploit-loader后门代码 2 在kali中编译metas ...

  6. (三) Mysql 之MVCC

    mvcc介绍 MVCC是数据库提供并发访问控制的一种技术.其核心理念是数据快照,不同的事务访问不同版本的数据快照,从而实现不同的事务隔离级别.虽然是说具有多个版本的数据快照,但这并不意味着数据库必须拷 ...

  7. window C盘满了/文件夹太长怎么移动

    通过以下命令移动文件夹 robocopy C:\Users\test\ E:\test\ /move /e C盘满了怎么办? 文件移动到其他盘,通过软连接访问 mklink /d "C:\U ...

  8. Xilinx XPM使用说明--XPM_MEMORY_SDPRAM

    XPM_MEMORY_SDPRAM 参数化宏:简单的双端口RAM 介绍 此宏用于实例化简单双端口RAM.端口A用于从存储器执行写入操作,端口B可用于从存储器读取. 下面介绍XPM_MEMORY实例的基 ...

  9. 硬件监控:grafana+prometheus+node_exporter

    一.前期准备: grafana:前端展示平台,没有数据存储功能,但是,它有不同的展示模板,然后,把后端数据库中提供的数据,进行展示 -->展示数据 prometheus(普罗米修斯):时序数据库 ...

  10. centos 修改ip

    TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6IN ...