AutoIt: send 命令 VS ControlClick的使用
2008年的时候第一次接触AutoIt,当时觉得局限性太多了,就不想学,觉得把Watir,Ruby搞好就行了。
最近一段时间比较闲,发现自己对GUI的自动化操完全是短板,就把AutoIt重新拾起来了。不再考虑什么局限性了,想着,反正现在,GUI自动化操作我啥也不会,学习了解一下总是好的。
也许是先入为主的想法太严重了,我对Send,controlSend命令是有偏见的,觉得定位能力差,一旦一个界面不是在前端就定位不了。习惯性的使用controlClick, ControlCommand, ControlSetText命令。
但是当使用AutoIt脚本越来越多,我发现,AutoIt自动化操作的短板就出来了,很多GUI 元素定位不了,根本无法操作。
ControlClick虽然也能够在页面上某特定位置点击,但是也需要页面在前端,比较ControlClick与Send命令的效率,ControlClick失败的几率较高。
在有限的资源条件下,controlFocus之后,使用Send发送键盘命令,能够很好的操作很多无法操作的控件。
假设我们现在要做一件事:
获取如下图(AutoIt帮助文档)左侧展示框中所有的关键字:
该控件不是标准控件,不能使用AutoIt的标准命令获取左侧关键字列表。
以下,我们就尝试分别用controlClick 和 Send命令获取所有的关键字,代码如下:
Func mouse_click();获取帮助文档的窗口句柄$handle = WinGetHandle("AutoIt Help")WinActivate($handle);获取帮助文档左侧关键字展示框句柄$control_handle = ControlGetHandle($handle,"","hh_kwd_vlist1");用尺子量了之后,发现每个关键字的高度是12pix$i = 12while 1;因为页面中有滚动条,当前页最后一个关键字所在的坐标位置(相对位置)为(50, 515),所以我把515作为比较,;当小于515的时候是直接点击关键字,然后从关键字展示框获取关键字信息;当大于515的时候,需要用鼠标双击/单击(50,515)的位置,会有一个关键字冒出来,我们就把这个关键字获取了if $i < 515 ThenControlClick($handle,"",$control_handle,"left",2,50, $i)$text = ControlGetText($handle,"", "Edit3")ConsoleWrite($text & @CRLF)$i += 12Else$text = ControlGetText($handle,"", "Edit3")ConsoleWrite($text & @CRLF)ControlClick($handle,"",$control_handle,"left",2,50,515)$text2 = ControlGetText($handle,"", "Edit3")if $text2 = $text ThenExitLoopElseControlClick($handle,"",$control_handle,"left",2,50,515)EndIfEndIfWEnd EndFunc;发送键盘快捷键 Func send_key_click()$handle = WinGetHandle("AutoIt Help")WinActivate($handle)$control_handle = ControlGetHandle($handle,"","hh_kwd_vlist1");先把鼠标的焦点落在关键字输入框中,然后使用键盘的Tab键,把焦点移动到左侧关键字列表中ControlFocus($handle,"", "Edit3")Send("{TAB}");发送一个tab键,就抓取一个关键字,直到两次 Tab 之间,再也无法获取不同的关键字为止While 1$text = ControlGetText($handle,"", "Edit3")ConsoleWrite($text & @CRLF)send("{DOWN}")$text2 = ControlGetText($handle,"", "Edit3")if $text2 = $text ThenExitLoopElsesend("{DOWN}")ConsoleWrite($text2 & @CRLF)EndIfWEnd EndFunc mouse_click()
最后都能操作成功,把获取的关键字拷贝到Excel中,取Uniq值,然后比较一下,发现:
使用Send命令获取的关键字比ControlClick的位置点击名多的多。
再也不小看Send命令了,不过也是不得已才用。
转载于:https://www.cnblogs.com/autotest/p/3277614.html
AutoIt: send 命令 VS ControlClick的使用相关推荐
- send 命令 linux,linux的send命令
linux下的send命令可用于基于连接的套接字,下面由学习啦小编为大家整理了linux的send命令的相关知识,希望对大家有帮助! linux的send命令详解 功能描述:发送消息,send只可用于 ...
- 在 net send 命令中实现换行(信使服务)
要实现的效果如下: 实现的方式有两种: 1.在每一行结束时按下"Ctrl+T"组合键. 2.在命令行下使用:echo ^T > a.txt,注意这里的^T表示按CTRL+T输 ...
- AutoIt 键盘操作(send)
3.win切换窗口(键盘按下alt,操作tab键) 操作步骤如下: AutoITLibrary.send {ALT DOWN} AutoITLibrary.send {tab} AutoI ...
- selenium之 autoit命令行参数
更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解 selenium对网页进行UI自动化时经常会遇到OS弹框,比如上传.下载框,对这种弹框,se ...
- AutoIt自动化实例
普通自动安装脚本只须要如下四个命令 使用方法均为 命令("标题","可见文字") Run 运行程序 WinWait 等待某个窗口出现 ControlClick ...
- python autoit获取网页ajax数据_WebDriver + Python 调用AutoIt例子(实现139邮箱写信页的附件上传)...
PS: 前提 1. 安装好webdriver下python实现的环境 2. 安装好Autoit(默认安装就可以了) 3. 另外需要一个139邮箱账号,脚本运行时上传的图片在附件里面 #coding:c ...
- AutoHotkey 鼠标控制命令
Click 点击[v1.0.43+] 在指定坐标处单击鼠标.也可以按下某个鼠标按键.滚动鼠标滚轮或者是移动鼠标. Click [, Options] 参数 Options 指定以下选项中的 0 个或多 ...
- 【Autoit】Autoit 使用
一.Autoit 上传文件. 1.常用语法 - WinActivate("title") 聚焦到指定活动窗口 - ControlFocus ( "tit ...
- autoit3中有关Send的用法
Send 命令的可用按键列表 快速了解 Send ( "按键" [, 标志] ) 命令. ^ Ctrl ! Alt + Shift # Win(徽标键) Aut ...
最新文章
- Could not autowire field: private javax.servlet.http.HttpServletRequest
- Hibernate3 r的SLF4J问题
- Packet for query is too large(1767212 1048576)mysql在存储图片时提示图片过大
- 【Java】统计随机抽出两个小于等于N的互异正整数的频率
- Qt文档阅读笔记|Qt工作笔记-setupUi官方解析与实例(widgets中界面与业务分离)
- 指定 年 周 星期 获取这周的开始日期和结束日期
- RESTful Webservice 和 SOAP Webserivce 对比及区别
- Markdown(五)——绘图工具mermaid之流程图Flowchart
- Android内存泄漏分析心得
- VSCode 如何修改字体
- php_字符串按汉字拆分,php分割中文字符串
- 2021年下半年软考软件设计师真题答案解析
- 戈登贝尔奖是超级计算机应用的最高奖,中国首获高性能计算应用领域最高奖戈登贝尔奖...
- 电场强度 高斯定理 习题
- tampermonkey(油猴)——去除烦人的百度搜索广告
- 六祎-Mybatis高速下载通道
- 用 typescript 做一个贪吃蛇小游戏
- 成功解决wps文档中输入英文单词出现对应英文单词下边红色波浪线(英文拼写自动检测)去掉或加上图文教程
- 组织敏捷程序:第2部分,用于管理敏捷程序的网络
- 思科不打算修复SMB路由器中严重的认证绕过漏洞
热门文章
- python socket poll
- MySQL View
- C语言 FileStreaming(文件流)
- echarts scatter
- 软件工程学习总结(4)——软件工程概论
- Mysql学习总结(28)——MySQL建表规范与常见问题
- linux 退出java,linux kill命令下如何优雅的退出java程序
- java 动态树_使用dtree构建动态树型菜单
- django mysql 2059_Django mysqlclient后端生成django.db.utils。操作错误:(2059,NULL)在Windows中...
- 标准库函数和系统调用的区别