标签: autoit

保持远程桌面会话"活着"

我正在使用AutoIt来自动化GUI操作(使用RDP连接到运行待自动化应用程序的机器).每当我最小化RDP窗口(使用mRemote)时,不会执行进一步的AutoIt命令.

当我最小化窗口时,可能RDP会话被标记为"非活动"(我不知道这是否属实,也不知道如何配置此行为,如果是这样).我正在考虑两种方法来克服这个问题:

  1. 以升级用户(或服务)的身份运行我的流程.
  2. 查找此配置,该配置控制会话是否标记为非活动并覆盖它.

当RDP窗口最小化时,如何使远程桌面会话保持"活动"状态?

windows automation rdp autoit

9
推荐指数
1
解决办法
1万
查看次数

AutoIt最佳实践/编码风格

我维护Autoit项目用于swing应用程序的自动测试.那些测试现在有大约70个文件.在没有遵循一些"最佳实践"的情况下维护所有这些代码变得非常困难我试图创建尽可能多的函数(因为重复的代码)和常量(频繁的更改)芽似乎不够.

我一般有这种类型的功能:

  • 一些常规功能(插入带有日志记录的文本,从组合框中选择或读取..)
  • 一些屏幕特定的功能(填写一个表格..)
  • 一些数据/逻辑功能 - 测试app逻辑和数据处理
  • 测试用例函数 - 结合前3个实现一些测试场景

AutoIt没有类=>没有继承=> OOP原则难以复制(:D清楚)

有人用AutoIt编写的大型应用程序有一些经验吗?我的观点是,AutoIt适用于<500行的脚本,对于这个大项目来说它不是一个好选择.

很遗憾,AutoIt没有一些有用的IDE.

testing coding-style autoit

9
推荐指数
1
解决办法
3920
查看次数

在AutoIT中将函数作为参数传递

我有一些具有相同结构的功能(简化):

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中使用,我该怎么办?

generics parameters function autoit

8
推荐指数
1
解决办法
4536
查看次数

继续下一行的命令

有没有办法在新线路上继续命令?我的MsgBox()函数调用很长,为了便于阅读,我想做这样的事情:

$confirm = MsgBox(321, "Check Information", "Confirmation Number:     " & @LF &
                                            "Amount:                  $")
Run Code Online (Sandbox Code Playgroud)

这将返回语法错误,并指向第一行的末尾作为错误的位置.

autoit

7
推荐指数
1
解决办法
1万
查看次数

如何使用AutoIt(*.au3)脚本在CMD窗口中发出命令?

我尝试过但没有奏效:

  1. 我打开了 cmd.exe
  2. 键入"cd \">>不带引号
  3. 追问 Enter
  4. 键入"cd C:\ Program Files(x86)\ Jenkins"
  5. 追问 Enter
  6. 输入"jenkins.exe start"
  7. 追问 Enter

我还在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不是可编辑的窗口.

cmd autoit

7
推荐指数
1
解决办法
4万
查看次数

Eclipse RCP的AutoIt测试

我正在努力进行AutoIt回归测试.选择AutoIt是因为要求是100%黑盒GUI测试(不对测试项目进行干预).然而,这个解决方案遇到了一些问题,我需要帮助.

  • 更改应用程序中的选项卡 - 因为GUI类不是SysTabControl32,而是SWT_Window,因此来自GUITab.au3 UDF的示例代码不起作用.当前的解决方案是关注组件,然后使用箭头键浏览选项卡.这对测试性能有不良影响(我甚至不想想将来某些选项卡被禁用的可能性).

  • 超时 - 当标签发生变化时,测试必须延迟才能继续.延迟越短,测试失败的可能性就越大(应用程序尚未准备好继续测试).这会导致行动前的大幅延迟.

  • 实例编号 - 识别控件实例是一个问题.当我写了一些测试按钮时,OK它有实例编号9.当一些按钮添加到表单时,我不得不重写测试,因为OK按钮的实例编号因此而改变.

这三个是最重要的.

由于大量已经编写的测试,改变测试技术将很难.但我想以更好的方式编写新测试.Sikuli在从屏幕获取文本时遇到问题,而SWTBot在测试项目中具有依赖性.

我们的测试运行了20个小时,当GUI布局发生变化时,我需要编辑几乎每个测试(实例编号问题).任何人都可以为超可靠的黑盒测试提出解决方案或解决方案吗?

testing user-interface swt autoit eclipse-rcp

6
推荐指数
0
解决办法
897
查看次数

同时捕获并显示STDOUT

我有以下代码来捕获和处理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)

stdout autoit

6
推荐指数
1
解决办法
2万
查看次数

使用AutoIt单击窗口上的按钮

在运行程序后,为了点击弹出按钮,我应该使用哪个功能?例如,英雄联盟启动按钮是我想要模拟的点击.

bots autoit buttonclick

6
推荐指数
1
解决办法
4万
查看次数

使用AutoIt获取所有打开窗口的列表

我试图摆脱所有窗口上的最小化,最大化和关闭按钮.谷歌搜索我发现这个:

$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的列表?

autoit

6
推荐指数
1
解决办法
9873
查看次数

AU3Recorder没有运行

我下载了最新版本并使用默认设置运行完整安装.然后我下载了SciTE4AutoIt3.exe.我创建并保存了一个新的.au3文件.当我单击工具菜单中的AU3Recorder选项时,没有任何反应(我希望记录器窗口出现).

我搜索C:\Program Files (x86)\AutoIt3\SciTEC:\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文件是什么意思,我可以在哪里得到它?

windows automation autoit autoit-recorder

6
推荐指数
2
解决办法
1万
查看次数