我正在使用AutoIt来自动化GUI操作(使用RDP连接到运行待自动化应用程序的机器).每当我最小化RDP窗口(使用mRemote)时,不会执行进一步的AutoIt命令.
当我最小化窗口时,可能RDP会话被标记为"非活动"(我不知道这是否属实,也不知道如何配置此行为,如果是这样).我正在考虑两种方法来克服这个问题:
当RDP窗口最小化时,如何使远程桌面会话保持"活动"状态?
我维护Autoit项目用于swing应用程序的自动测试.那些测试现在有大约70个文件.在没有遵循一些"最佳实践"的情况下维护所有这些代码变得非常困难我试图创建尽可能多的函数(因为重复的代码)和常量(频繁的更改)芽似乎不够.
我一般有这种类型的功能:
AutoIt没有类=>没有继承=> OOP原则难以复制(:D清楚)
有人用AutoIt编写的大型应用程序有一些经验吗?我的观点是,AutoIt适用于<500行的脚本,对于这个大项目来说它不是一个好选择.
很遗憾,AutoIt没有一些有用的IDE.
我有一些具有相同结构的功能(简化):
func moveFiles()
local $error = 1
For $i = 1 to 100
updateProgress($i)
updateStatus("Processing " & $i & "/100 files")
$error *= moveFile($i)
Next
Return $error
endFunc
Run Code Online (Sandbox Code Playgroud)
我想使这个像这样的通用函数:
func doSomething($function)
local $error = 1
For $i = 1 to 100
updateProgress($i)
updateStatus("Processing " & $i & "/100 files")
$error *= $function($i) ;execute the function that was passed
Next
Return $error
endFunc
Run Code Online (Sandbox Code Playgroud)
所以我可以这样做:
doSomething($moveFiles)
doSomething($compareFiles)
doSomething($removeFiles)
...
Run Code Online (Sandbox Code Playgroud)
这是否可以在AutoIt v3中使用,我该怎么办?
有没有办法在新线路上继续命令?我的MsgBox()函数调用很长,为了便于阅读,我想做这样的事情:
$confirm = MsgBox(321, "Check Information", "Confirmation Number: " & @LF &
"Amount: $")
Run Code Online (Sandbox Code Playgroud)
这将返回语法错误,并指向第一行的末尾作为错误的位置.
我尝试过但没有奏效:
cmd.exe我还在sleep每种类型之后使用了命令,只是为了确保它不会因快速执行而跳过.
;Run application
Run("cmd.exe")
;Wait for CMD to be opened
WinWaitActive("Administrator: C:\Windows\system32\cmd.exe", "", 15)
;Write some commands on cmd
ControlSend("Administrator: C:\Windows\system32\cmd.exe", "", "Edit1", "cd\")
Sleep(10000)
Send("{Enter}")
Sleep(10000)
ControlSend("Administrator: C:\Windows\system32\cmd.exe", "", "Edit1", "cd C:\Program Files (x86)\Jenkins")
Sleep(10000)
Send("{Enter}")
ControlSend("Administrator: C:\Windows\system32\cmd.exe", "", "Edit1", "jenkins.exe start")
Sleep(10000)
Send("{Enter}")
Run Code Online (Sandbox Code Playgroud)
我得到了答案:
ControlSend("Administrator: C:\Windows\system32\cmd.exe", "", "", "cd C:\Program Files (x86)\Jenkins")
Run Code Online (Sandbox Code Playgroud)
我需要删除"编辑",因为cmd不是可编辑的窗口.
我正在努力进行AutoIt回归测试.选择AutoIt是因为要求是100%黑盒GUI测试(不对测试项目进行干预).然而,这个解决方案遇到了一些问题,我需要帮助.
更改应用程序中的选项卡 - 因为GUI类不是SysTabControl32,而是SWT_Window,因此来自GUITab.au3 UDF的示例代码不起作用.当前的解决方案是关注组件,然后使用箭头键浏览选项卡.这对测试性能有不良影响(我甚至不想想将来某些选项卡被禁用的可能性).
超时 - 当标签发生变化时,测试必须延迟才能继续.延迟越短,测试失败的可能性就越大(应用程序尚未准备好继续测试).这会导致行动前的大幅延迟.
实例编号 - 识别控件实例是一个问题.当我写了一些测试按钮时,OK它有实例编号9.当一些按钮添加到表单时,我不得不重写测试,因为OK按钮的实例编号因此而改变.
这三个是最重要的.
由于大量已经编写的测试,改变测试技术将很难.但我想以更好的方式编写新测试.Sikuli在从屏幕获取文本时遇到问题,而SWTBot在测试项目中具有依赖性.
我们的测试运行了20个小时,当GUI布局发生变化时,我需要编辑几乎每个测试(实例编号问题).任何人都可以为超可靠的黑盒测试提出解决方案或解决方案吗?
我有以下代码来捕获和处理Run命令输出.如何修改它以使"运行"命令窗口显示输出并同时记录输出?@SW_HIDE用@SW_SHOW(或等效的)替换只显示一个空白的命令窗口.
类似于linux tee命令的东西,它在打印STDOUT时记录到文件.
$CurrentPID = Run(@ComSpec & ' /c ' & $CurrentLogCmd, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
If Not ProcessWaitClose($CurrentPID,60) Then
WriteLog("[Warning] Timed-out.Finding date in current hour raw log -" & $CurrentLogFileName)
$F_LogWarningExist = 1
Return $C_SUCCESS ; Take chances and proceed with parsing raw logs
EndIf
$CurrentOutput = StdoutRead($CurrentPID)
Run Code Online (Sandbox Code Playgroud) 在运行程序后,为了点击弹出按钮,我应该使用哪个功能?例如,英雄联盟启动按钮是我想要模拟的点击.
我试图摆脱所有窗口上的最小化,最大化和关闭按钮.谷歌搜索我发现这个:
$h = WinGetHandle("[CLASS:Notepad]")
$iOldStyle = _WinAPI_GetWindowLong($h, $GWL_STYLE)
$iNewStyle = BitXOr($iOldStyle, $WS_SYSMENU)
_WinAPI_SetWindowLong($h, $GWL_STYLE, $iNewStyle)
_WinAPI_ShowWindow($h, @SW_SHOW)
Run Code Online (Sandbox Code Playgroud)
这很好用,所以现在我只需要使用这段代码迭代所有窗口,我就完成了.如何获取系统中所有HWND的列表?
我下载了最新版本并使用默认设置运行完整安装.然后我下载了SciTE4AutoIt3.exe.我创建并保存了一个新的.au3文件.当我单击工具菜单中的AU3Recorder选项时,没有任何反应(我希望记录器窗口出现).
我搜索C:\Program Files (x86)\AutoIt3\SciTE和C:\Program Files (x86)\AutoIt3\Extras,但不能在那里找到AU3Recorder.exe所以这可能是为什么它没有运行.我也尝试过重新安装这两个应用程序.如何让录像机在Windows 8.1 Enterprise上运行?
我找到了AU3Recorder.exe的zip文件并将其放入C:\Program Files (x86)\AutoIt3\Extras\Au3Record\.现在打开记录器窗口但是当我点击记录时,我得到一个错误弹出窗口,显示"DLL load Failed".什么DLL文件是什么意思,我可以在哪里得到它?
autoit ×10
automation ×2
testing ×2
windows ×2
bots ×1
buttonclick ×1
cmd ×1
coding-style ×1
eclipse-rcp ×1
function ×1
generics ×1
parameters ×1
rdp ×1
stdout ×1
swt ×1