我正在创建一些自动测试脚本来测试一个软件。我是以模块化的方式来做这件事的,这样我就可以更容易地指定哪些脚本是并更改它,同时让所有脚本都预先编译
我有一个脚本,它是用批处理中的参数启动的,这会打开我编译的脚本,该脚本会输入登录详细信息,并对可能出现的任何对话框按"确定"。此部分按预期工作。
在脚本的最后,我试图重新聚焦到主应用程序窗口,将窗口设置为全屏,然后运行下一个批处理文件来执行下一个测试等。
在本例中,"$practice"指的是主应用程序的窗口标题,它是我使用AutoItv3Info工具派生的。
WinWaitActive($practice)
$hWnd = WinGetHandle($practice)
; FullScreen
WinSetState($practice,"",@SW_RESTORE)
WinSetState($practice,"",@SW_MAXIMIZE)
RunWait(@ComSpec & " /c " & "TestStart.bat")
然而,这并没有像预期的那样重新获得焦点并最大化窗口,我认为应用程序的启动屏幕可能会造成干扰。
如果我手动点击应用程序的任何部分来关注它,那么对话框将被设置为全屏,然后我的第二个脚本将运行。
我应该怎么做才能让剧本的最后一部分表现得像我希望的那样?
WinActivate ("title"[,"text"])-激活(聚焦)窗口。
title -要激活的窗口的title/hWnd/class。请参阅标题特殊定义。
text [可选]要激活的窗口的文本。默认为空字符串。请参见文本特殊定义。
此处提供更多信息。
这就是我最终解决问题的方法
WinActivate($practice)
WinWaitActive($practice)
$hWnd = WinGetHandle($practice)
ControlFocus($hWnd, "", "[CLASS:XTPToolBar; INSTANCE:1]")
; FullScreen
WinSetState($practice,"",@SW_RESTORE)
WinSetState($practice,"",@SW_MAXIMIZE)
RunWait(@ComSpec & " /c " & "sequence.bat")
通过添加WinActivate,然后在调用WinSetState 之前手动给予控制焦点