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的使用相关推荐

  1. send 命令 linux,linux的send命令

    linux下的send命令可用于基于连接的套接字,下面由学习啦小编为大家整理了linux的send命令的相关知识,希望对大家有帮助! linux的send命令详解 功能描述:发送消息,send只可用于 ...

  2. 在 net send 命令中实现换行(信使服务)

    要实现的效果如下: 实现的方式有两种: 1.在每一行结束时按下"Ctrl+T"组合键. 2.在命令行下使用:echo ^T > a.txt,注意这里的^T表示按CTRL+T输 ...

  3. AutoIt 键盘操作(send)

    3.win切换窗口(键盘按下alt,操作tab键) 操作步骤如下: AutoITLibrary.send    {ALT DOWN} AutoITLibrary.send    {tab} AutoI ...

  4. selenium之 autoit命令行参数

    更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解 selenium对网页进行UI自动化时经常会遇到OS弹框,比如上传.下载框,对这种弹框,se ...

  5. AutoIt自动化实例

    普通自动安装脚本只须要如下四个命令 使用方法均为 命令("标题","可见文字") Run 运行程序 WinWait 等待某个窗口出现 ControlClick ...

  6. python autoit获取网页ajax数据_WebDriver + Python 调用AutoIt例子(实现139邮箱写信页的附件上传)...

    PS: 前提 1. 安装好webdriver下python实现的环境 2. 安装好Autoit(默认安装就可以了) 3. 另外需要一个139邮箱账号,脚本运行时上传的图片在附件里面 #coding:c ...

  7. AutoHotkey 鼠标控制命令

    Click 点击[v1.0.43+] 在指定坐标处单击鼠标.也可以按下某个鼠标按键.滚动鼠标滚轮或者是移动鼠标. Click [, Options] 参数 Options 指定以下选项中的 0 个或多 ...

  8. 【Autoit】Autoit 使用

    一.Autoit 上传文件. 1.常用语法 - WinActivate("title")         聚焦到指定活动窗口  - ControlFocus ( "tit ...

  9. autoit3中有关Send的用法

    Send 命令的可用按键列表 快速了解 Send ( "按键" [, 标志] ) 命令.   ^ Ctrl    ! Alt   + Shift    # Win(徽标键) Aut ...

最新文章

  1. Could not autowire field: private javax.servlet.http.HttpServletRequest
  2. Hibernate3 r的SLF4J问题
  3. Packet for query is too large(1767212 1048576)mysql在存储图片时提示图片过大
  4. 【Java】统计随机抽出两个小于等于N的互异正整数的频率
  5. Qt文档阅读笔记|Qt工作笔记-setupUi官方解析与实例(widgets中界面与业务分离)
  6. 指定 年 周 星期 获取这周的开始日期和结束日期
  7. RESTful Webservice 和 SOAP Webserivce 对比及区别
  8. Markdown(五)——绘图工具mermaid之流程图Flowchart
  9. Android内存泄漏分析心得
  10. VSCode 如何修改字体
  11. php_字符串按汉字拆分,php分割中文字符串
  12. 2021年下半年软考软件设计师真题答案解析
  13. 戈登贝尔奖是超级计算机应用的最高奖,中国首获高性能计算应用领域最高奖戈登贝尔奖...
  14. 电场强度 高斯定理 习题
  15. tampermonkey(油猴)——去除烦人的百度搜索广告
  16. 六祎-Mybatis高速下载通道
  17. 用 typescript 做一个贪吃蛇小游戏
  18. 成功解决wps文档中输入英文单词出现对应英文单词下边红色波浪线(英文拼写自动检测)去掉或加上图文教程
  19. 组织敏捷程序:第2部分,用于管理敏捷程序的网络
  20. 思科不打算修复SMB路由器中严重的认证绕过漏洞

热门文章

  1. python socket poll
  2. MySQL View
  3. C语言 FileStreaming(文件流)
  4. echarts scatter
  5. 软件工程学习总结(4)——软件工程概论
  6. Mysql学习总结(28)——MySQL建表规范与常见问题
  7. linux 退出java,linux kill命令下如何优雅的退出java程序
  8. java 动态树_使用dtree构建动态树型菜单
  9. django mysql 2059_Django mysqlclient后端生成django.db.utils。操作错误:(2059,NULL)在Windows中...
  10. 标准库函数和系统调用的区别