xing999999 发表于 2015-12-22 17:55:00

[已解决]controlclick总是无法点到控件,但是可以看到激活框已经去到了那个控件。

本帖最后由 xing999999 于 2015-12-23 19:32 编辑

我发现controlclick经常无法正常点击,在一个安装程序来回测试中,10次可能有2,3次是激活框去到了那个按钮,但是没有点击。

经过了大量的测试,即使winwati里参数使用的是获取的窗口句柄,即使在运行controlclick前运行了If Not WinActivate($hwin) Then WinActivate($hwin)
WinWaitActive($hwin);这样的语句,也无法保证能正常点击目标按钮。

所以对于要做安装程序自动化的朋友,建议你们2点,其一能发送键盘快捷键尽量用键盘快捷键,我发现发送键盘快捷键实在是稳定多了。其二建议增加后面的点击数值,我一般都是5,而我在做FoxitReader_7.2.1_ZQ_GFCHS这个安装改程序的时候,其中的点击用到了10才测试10次10次全通过,见下面的命令。。。。
ControlClick($hwin,"自定义安装","","left",10)
其实可以用"Button1",开始总是测试不点击,所以才改成这样。

所以顺便想问下各位高手,有什么方法能让controlclick能正常的点击按钮。

另外附上刚编辑的极点五笔拼音输入法的安装代码,看各位高手有没有办法能缩短。之所以这么长,是因为安装程序换的窗口比较多,并且每个窗口没有窗口文本,我只能从控件文本来判断。#Region ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
#AccAu3Wrapper_OutFile=setup10th.exe
#AccAu3Wrapper_Res_Language=2052
#AccAu3Wrapper_Res_requestedExecutionLevel=None
#EndRegion ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
Run ("setup10th.exe")
$tip = "为了保证自动安装的顺利完成,请不要乱动的键盘和鼠标。"
$tip &= @CRLF
$tip &= "极点五笔将安装在C盘。如果需要安装在其他盘,请在安装结束后,卸载,再手动安装。"
ToolTip($tip, @DesktopWidth / 2.5 - 15, @DesktopHeight - 40 - 60, "温馨提示:", 2)
Local $jd="极点五笔 十周年纪念版 安装";打开安装程序
Local $hwin=WinWait ($jd);获取首窗口句柄
If Not WinActivate($hwin) Then WinActivate($hwin)
WinWaitActive($hwin);如果没激活窗口则自动激活窗口
Send("!{I}");发送下一步
Local $timeout = 5 ;5s
Local $isFound = False
Local $begin = TimerInit()
Do
    If ControlGetText($jd, "", "Button2") == "安装(&I)" Then;对比窗口控件文本来判断下一个窗口是否出现。
      $isFound = True
      ExitLoop
    EndIf
    Sleep(100)
Until TimerDiff($begin) >= $timeout * 10;等待时间
If Not $isFound Then
        MsgBox(0,"出错了","自动安装出错,请选用手动安装")
    ;出错处理
EndIf
Send("!{I}");发送下一步
Do
    If ControlGetText($jd, "", "Button2") == "下一步(&N) >" Then;对比窗口控件文本来判断下一个窗口是否出现。
      $isFound = True
      ExitLoop
    EndIf
    Sleep(100)
Until TimerDiff($begin) >= $timeout * 10
If Not $isFound Then
        MsgBox(0,"出错了","自动安装出错,请选用手动安装")
EndIf
Send("!{n}");发送下一步
Do
    If ControlGetText($jd, "", "Button4") == "输入模式选择" Then
      $isFound = True
      ExitLoop
    EndIf
    Sleep(100)
Until TimerDiff($begin) >= $timeout * 10
If Not $isFound Then
        MsgBox(0,"出错了","自动安装出错,请选用手动安装")
EndIf
Send("!{n}");发送下一步
Do
    If ControlGetText($jd, "", "Button5") == "启用智能标点" Then
      $isFound = True
      ExitLoop
    EndIf
    Sleep(100)
Until TimerDiff($begin) >= $timeout * 10
If Not $isFound Then
        MsgBox(0,"出错了","自动安装出错,请选用手动安装")
EndIf
Send("!{L}")
$jd="提示"
$hwin=WinWait($jd)
If Not WinActivate($hwin) Then WinActivate($hwin)
WinWaitActive($hwin)
send("{ENTER}")
Exit

jingchen488 发表于 2016-2-3 22:12:08

怎么回复就是已解决状态啊
页: [1]
查看完整版本: [已解决]controlclick总是无法点到控件,但是可以看到激活框已经去到了那个控件。