随笔分类 - AutoIT
Windows GUI automation test
摘要:Watir使用过程中,经常遇到的弹出框分为几类:1. Alert2. Confirm3. Prompt4. File selectWatir 处理弹出框,有很多方法,可以应用 AutoIt来处理,也可以通过 RAutomation来处理。AutoIt的局限性是无法跨平台,所以在Watir 4.0中被...
阅读全文
摘要:RAutomation的用法require "rautomation"# 通过匹配部分标题来获取窗口window = RAutomation::Window.new(:title => /part of the title/i)window.exists? # => truewindow.title...
阅读全文
摘要:为公司的部署工程师书写了一个autoIt应用程序,现在遇到下面的一种情况:产品分服务器端和客户端,启动的时候,会启用1785端口,然后彼此通信;现在我的autoIt应用程序需要做的事情是:如果1785端口被占用,该怎么办?如果部署工程师熟悉配置文件,把端口1785更换成别的端口怎么办?解决方案如下:1. 产品开发组应该配置自己的端口为不常用端口,定义一个小的范围,于是可以通过AutoIt,判断目前配置的端口是否在1700-1710之间,只要在这个之间,就来判断该端口是否打开,如果打开了,就可以考虑关闭使用该端口的应用程序;如果不在 1700-1710之间,就给出提示信息:端口信息配置有误,让实
阅读全文
摘要:有时候,我们会遇到以下情况:你想与局域网中的某台机器建立连接,你就需要输入对方的机器名。现在我比较懒,我不想输入对方的机器名,或者对方的机器名很难记住,那怎么办呢?那就做一个combox在页面上,当点击某按钮的时候,局域网中所有的机器名就会呈现在combox列表中,这样,只需要选择就可以了,能够满足一些懒人的要求。1. 首选,DOS命令中的net view,可以查看局域网中所有的机器名,于是就有下面的函数:_GetDOSOutput, 可以把net view的结果完整的呈现出来;2. Net view出来的结果是一个大字符串,我们需要的是机器列表,所以要处理这个大字符串,于是就有了函数:sea
阅读全文
摘要:以前,公司的实施人员配置好项目之后,不同的机器之间经常性的无法建立链接,后来发现是防火墙的设置。虽然是个小问题,但是经常性的忘记这个配置。现在,我决定把对防火墙的设置,加入到我给实施人员的配置工具中。打开防火墙其实很简单,代码如下:#RequireAdminRun(@ComSpec & " /c " & 'Netsh advfirewall set currentprofile state on', "", @SW_HIDE)该命令以管理员身份运行才能起作用,所以需要 #RequireAdmin如果要关闭防火墙,只需要把R
阅读全文
摘要:Sometimes, we have to use AutoIt script to edit an xml, add a node or remove a node, to make some deployment documents fitable to some project.I have picked up a piece of script function about it as below:Func append_node(SourceFile)objDom = ObjCreate("Microsoft.XMLDOM") objDom.load(S
阅读全文
摘要:项目组这次要发布一个项目,需要实施人员根据现场的机器情况,修改项目配置文件的几个节点,为了减轻实施人员的工作负担,我应用AutoIt写了一个小界面,实施人员只需在该界面上点几个按钮,就能够完成文件的配置。完成后的界面如下:该AutoIt程序的难点就在xml的读取,修改。我把读取,修改xml的AutoIt代码分享一下:;调用微软自带的XML解析对象objXML = ObjCreate("Microsoft.XMLDOM");加载xml文件,SourceFile就是需要解析的XML文件路径file_load = objXML.load($SourceFile);写一个简
阅读全文
摘要:版本六中存在一个显著问题是:当exe文件生存之后,运行的时候,通过consoleWrite函数打印出来的数据是无法展示出来的。这就存在一个问题:当运行失败的时候,我还是看不到任何log信息。于是,我对程序再次进行了优化,代码如下:#include #include #include #include #include #include #include #include Opt("WinTitleMatchMode")AutoItSetOption("SendKeyDelay")AutoItSetOption("WinWaitDelay&quo
阅读全文
摘要:自动化操作的稳定性,便利性虽然已经满足了要求,但是页面上呈现的按钮太多了,可以做的更加简单一些。1. 简化页面的按钮,把5个按钮减少至3个,把Display HID按钮功能整合到create license里面;把保存图片按钮功能放到保存License操作中;2. 优化输入框。由3个简化为2个,因为HID是固定的,不应该支持手动修改,而expired date默认为当前日期延后2个月,是支持修改的;代码如下:#include #include #include #include #include Opt("WinTitleMatchMode")AutoItSetOption
阅读全文
摘要:其实,每次只要输入License文件的路径,相应的HID就能够根据路径,或者该路径下的txt文件名称或者txt文档中的第一行字符串自动获取,所以为了进一步简化手工操作,对代码可以进一步优化,只要输入一个包含License文件,hid文件的路径,其余的事情,都可以自动化完成。代码如下:#include #include #include #include #include Opt("WinTitleMatchMode")AutoItSetOption("SendKeyDelay")AutoItSetOption("WinWaitDelay&quo
阅读全文
摘要:在该自动化项目实用过程中,虽然一定程度上提高了工作效率,但是偶尔的不作为,让人不是很爽。我花了一些时间对代码进行了再次优化,执行效率得到了显著提高。代码优化的主要地方是:set_License那一块儿,常见的问题是:焦点获取不正确,导致send命令把Date或者HID发送到不合适的地方。优化的途径是:1. 写一个init方法,当调用该方法的时候,把焦点放到Grid的前列;2. 写一个collapse方法,当调用该方法的时候,把Grid中展开的所有方法都收缩起来,防止send发送命令到不合适的地方;3. 加了一个焦点判断。因为有几个控件的control ID是一致的,当实用controlGetT
阅读全文
摘要:最近频繁的用到上面的代码,我经过仔细思考之后,对代码进行了优化,如下:1)每个打印前面加入时间戳,防止调试的时候什么都看不出来;2) 加入了错误验证,防止窗口弹出失败,验证无法成功,应用程序就挂在哪儿了。#include #include Opt("WinTitleMatchMode");区域截图Func screen_capture(path) if FileExists(path)= 0 or StringInStr($path,"\")=0 Then MsgBox(0, "Path Error", "Please
阅读全文
摘要:为了提高以前的代码的工作效率,以及页面的美观程度,对代码进行优化,优化后的代码如下:#include #include Opt("WinTitleMatchMode");区域截图Func screen_capture(path) if FileExists(path)= 0 or StringInStr(path,"\")=0 Then MsgBox(0, "Path Error", "Please input correct Path info!") Else handle = WinGetHandle(
阅读全文
摘要:每个月,我都要做大量的license文件,为项目延期使用。由于对AutoIt进行了学习,在一定程度上能够应用自动化来简化日常劳动。我从来就不苛求自动化能够做一切事情,只要在一定程度上提高工作效率即可。1. 现在我要应用AutoIt脚本生成一个页面,页面上可以输入我要做license常用的几个元素;2. 得用AutoIt脚本操作做license的工具,输入页面上的几个元素3. 完成之后,编译成exe完成之后,界面如下:脚本如下:难点在于:1. 如何在一个AutoIt无法识别的控件GridView中输入值;2. 页面上很多控件,通过AutoInfo识别,只能看到相同的class,如何区分它们?3.
阅读全文
摘要:在使用AutoIt最控件做自动化操作的时候,经常性的会碰到无法使用Windows Info工具获取控件的属性,但是我们又需要获取该控件的焦点,我们该怎么办呢?方法1: 应用controlFocus方法,把焦点放到可以定位的控件上面,然后发送键盘Tab或者某些组合键,从而最终把焦点放到我们想要放置的地方;方法2:直接发送Alt或者Tab组合键,直到能够把焦点放到我们想要的地方。我以前总是习惯性的使用方法1,因为这样感觉一切都好控制,这样操作大部分情况下确实可行,但是会经常性的无法获取焦点,从而导致操作失败,而方法2准确率更高。所以,如果可行的话,还是尽量使用方法2.
阅读全文
摘要:Dim computer ="computer name"Dim Remoteuser ="Login account"Dim Remotepass = "Password"objlocator= ObjCreate("wbemscripting.swbemlocator")objWMIService = objlocator.connectserver(computer,"root/cimv2",Remoteuser,Remotepass)colItems = $objWM
阅读全文
摘要:前段时间,我一直认为,通过AutoIt进行自动化操作,也只有几个方法可以用,它们只是controlClick, controlsend等如下图:我一直认为,AutoIt的所有的GUI 方法,都是用来创建界面使用的。今天,开发找我,让我把他的一个GUI页面上所有的资源获取下来:页面上一个ListView中,一共有大约70个list,我现在需要遍历这70个list,然后当该list获取焦点的时候,右键点击,然后在弹出框中点击第二个选项,从而保存图片?我一直期待能找到一个函数,比喻:ControlGetFocusPos,可是没有这个函数,mouseGetPos函数只能获取鼠标所在的位置,google
阅读全文
摘要:WinGetClassList 是一个非常有用的函数,可以返回当前窗口中所有的handle。返回的是一个字符串,可以使用split函数来拆分之。Opt("WinTitleMatchMode")handle = WinGetHandle(".NET Reactor v4.5.9.8 - Full Version")ConsoleWrite(WinGetClassList(handle))运行上面的方法,我可以得到目前窗口所有的handle如下:WindowsForms10.Window.8.app.0.1f550a4_r15_ad1WindowsFor
阅读全文
摘要:file = FileOpen(@ScriptDir&"\RegInstalledItems.csv",1)if file = -1 Then ConsoleWrite("ERROR: Unable to write to the output file") ExitEndIfi = 1While not @error var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i) If @er
阅读全文
摘要:我的自动化脚本在运行的时候,会生成一个界面,点击该页面上的按钮能够进行自动化操作。经常遇到的一个问题是:脚本运行一半,GUI程序出现了异常情况,这个时候,再次点击生成的界面上的按钮,不会有任何反应,我需要重新启动exe文件,程序的健壮性受到了考验。为了解决这个问题,只需要在脚本中加入少量的错误验证即可: check = WinWaitActive("License Examiner", "", 5) if check = 0 Then ConsoleWrite(@HOUR & ":" & @MIN & &q
阅读全文