2023年7月9日发(作者:)
AutoIt:send命令VSControlClick的使⽤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 = 12 while 1 ;因为页⾯中有滚动条,当前页最后⼀个关键字所在的坐标位置(相对位置)为(50, 515),所以我把515作为⽐较, ;当⼩于515的时候是直接点击关键字,然后从关键字展⽰框获取关键字信息 ;当⼤于515的时候,需要⽤⿏标双击/单击(50,515)的位置,会有⼀个关键字冒出来,我们就把这个关键字获取了 if $i < 515 Then ControlClick($handle,"",$control_handle,"left",2,50, $i) $text = ControlGetText($handle,"", "Edit3") ConsoleWrite($text & @CRLF) $i += 12 Else $text = ControlGetText($handle,"", "Edit3") ConsoleWrite($text & @CRLF) ControlClick($handle,"",$control_handle,"left",2,50,515) $text2 = ControlGetText($handle,"", "Edit3") if $text2 = $text Then ExitLoop Else ControlClick($handle,"",$control_handle,"left",2,50,515) EndIf EndIf WEndEndFunc;发送键盘快捷键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 Then ExitLoop Else send("{DOWN}") ConsoleWrite($text2 & @CRLF) EndIf WEndEndFuncmouse_click()最后都能操作成功,把获取的关键字拷贝到Excel中,取Uniq值,然后⽐较⼀下,发现:使⽤Send命令获取的关键字⽐ControlClick的位置点击名多的多。
再也不⼩看Send命令了,不过也是不得已才⽤。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688898609a181959.html
评论列表(0条)