UI自动化测试(四)AutoIT工具使用和robot对象模拟键盘按键操作
AutoIT简介
AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。而这是其它语言不可能做到或无可靠方法实现的(例如VBScript和SendKeys)。
实现原理:
使用AutoIT下的工具去定位页面外的元素属性值,其次再利用AutoIT下的工具编写合适的脚本,然后将脚本编译成可执行文件,最后在自动化实现时,直接调用此脚本实现文件的上传、下载等操作。
备注:定位元素、编写脚本和编译,需要借助AutoIT提供的工具,但是脚本编译成可执行文件后,可以直接使用。
AutoIT的下载及安装
下载地址:https://www.autoitscript.com/site/autoit/downloads/
打开网页,点击如下图所示按钮,即可下载:

AutoIT的安装
安装很简单,一路默认路径就好,安装成功后,在开始菜单可看到如下图所示界面:

使用AutoIT工具的步骤
1.AutoIT Window Info用来识别Windows控件,根据识别的控件信息编写脚本;x86为32位
2.SciTE Script Editor用来写脚本,并保存为au3格式
3.Complie Script to .exe, 将刚编写的脚本,编译成可执行文件;
4.编译后在java代码中中调用
想必介绍到这,或多或少有所了解了,对AutoIT工具下的功能点也清楚了,Run Script是运行脚本的,我们是要到java代码中调用,所以此处就略过了。
实例一
接下来就用一个实例来讲解下AutoIT工具的具体使用,实例功能是:把百度首页中的百度图片另存为到本地或任意磁盘
在做这个事情的时候,我们要知道,步骤是先要选中图片,并右击,选择另存为,然后输入文件名以及保存的位置,最后点击保存。人工操作鼠标很简单,但现在是要使用代码来实现该功能,可细化分为四步,如下:
1.使用Selenium功能弹出右键菜单
2.利用robot选择相关菜单
3.调用AutoIT实现另存为操作
4.到java代码中调用
实现第一步,在浏览器中定位到图片元素,代码如下:
WebElement img = driver.findElement(By.cssSelector("div#lg img"));
Actions action = new Actions(driver);
action.contextClick().perform();
实现第二步,模拟键盘操作,鼠标移到另存为处,使用robot对象,代码如下:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
VK_DWON是操作按钮向下按一下的意思,因为另存为在右键菜单中的第二行,所以需要向下按两下实现
实现上述两步代码后,会弹出如下所示框,让输入文件名以及保存路径,该对话框已经是页面外的元素了,使用普通的定位时定不到了,所以就需要使用AutoIT工具来实现。

实现第三步,操作如下:
①打开autoit工具包下的AutoIT Window Info(x64)工具,版本按自己电脑系统来,界面如下所示:

1.1鼠标点中Finder Tool并拖动到输入文件名处,操作如下所示,得到下图结果

1.2重复上述定位步骤,定位保存按钮,结果如下图所示

②元素定位到了,接下来就是使用AutoIT工具包下的SciTE Script Editor写脚本,并保存为au3格式,注意:此工具中;表注释
根据定位到的参数值,写如下脚本:
ControlFocus("另存为", "","Edit1")
WinWait("[CLASS:#32770]","",10)
;文件路径
ControlSetText("另存为", "", "Edit1", "d:\baidu.png")
Sleep(2000)
ControlClick("另存为", "","Button2")
代码解释:
第一行:ControlFocus ( "title", "窗口文本", controlID) 设置输入焦点到指定窗口的某个控件上;
第二行:WinWait ( "title题" , "窗口文本" , 超时时间 ) 暂停脚本的执行直至指定窗口存在(出现) 为止;
第三行:;表注释
第四行:ControlSetText ( "title", "窗口文本", controlID, "新文本" ) 修改指定控件的文本;
第五行:Sleep ( 延迟 ) 使脚本暂停指定时间段;
第六行:ControlClick ( "title", "窗口文本", 控件ID , 按钮 , 点击次数 ) 向指定控件发送鼠标点击命令;
其中, title即AutoIt Window Info识别出的Title字段, controlID即AutoItWindow Info识别出的Class和Instance的拼接, 如上图拼接后的结果应为:Button2。
③使用AutoIT工具包下的Complie Script to .exe工具把刚编写的脚本编译成可执行文件,操作如下:

执行上步骤后,会出现baidu.exe可执行文件
第四步,到java代码中调用该可执行文件,操作代码如下:
Runtime.getRuntime().exec("d:/baidu.exe");
运行java代码,在定义的路径下会看到已保存的百度图片,如下所示:

整体代码实现如下,仅供参考:
package com.ui.day1; import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions; public class test_demo_autoit { public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("https://www.baidu.com/");
driver.manage().window().maximize(); WebElement move = driver.findElement(By.cssSelector("div#lg img"));
Actions action = new Actions(driver);
action.contextClick(move).perform();
Thread.sleep(2000);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_ENTER); Runtime.getRuntime().exec("d:/baidu.exe"); } }
将百度首页中的图片另存为还有一个实现方法,不用robot对象,直接在AutoIT编写脚本中发送个V,因为选择另存为和按V是一样的作用,AutoIT编写脚本代码如下:
send("v")
Sleep(1000)
ControlFocus("另存为", "","Edit1")
WinWait("[CLASS:#32770]","",10)
ControlSetText("另存为", "", "Edit1", "d:\baidu.png")
Sleep(2000)
ControlClick("另存为", "","Button2")
在java代码中实现如下,仅供参考:
package com.ui.day1;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions; public class yihuqingjiu_test_demo_autoit1 { public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("https://www.baidu.com/");
driver.manage().window().maximize(); WebElement move = driver.findElement(By.cssSelector("div#lg img"));
Actions action = new Actions(driver);
action.contextClick(move).perform();
Thread.sleep(2000);
Runtime.getRuntime().exec("d:/baidu.exe"); } }
实例二
在禅道中上传附件,从实例一中已明白整个操作过程,因而在该实例中便只介绍下页面外元素定位以及java代码实现。
页面外元素定位,编写脚本代码如下所示:
ControlFocus("打开", "","Edit1")
WinWait("[CLASS:#32770]","",10)
ControlSetText("打开", "", "Edit1", "F:\new\UI\测试.pdf")
Sleep(2000)
ControlClick("打开", "","Button1")
java代码实现如下,仅供参考:
package com.ui.day1; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; public class yihuqingjiu_test_demo_au { public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://127.0.0.1/zentao/my/");
driver.manage().window().maximize();
driver.findElement(By.id("account")).sendKeys("admin");
Thread.sleep(1000);
driver.findElement(By.name("password")).sendKeys("123456");
Thread.sleep(1000);
//点击登录
driver.findElement(By.xpath("//button[@id='submit']")).click();
Thread.sleep(2000);
//点击测试
driver.findElement(By.linkText("测试")).click();
Thread.sleep(1000);
//点击Bug
driver.findElement(By.linkText("Bug")).click();
Thread.sleep(1000);
//点击提交Bug
driver.findElement(By.xpath("//a[@href='/zentao/bug-create-5-0-moduleID=0.html']")).click();
Thread.sleep(1000); //调用AutoIT工具
Runtime.getRuntime().exec("d:/chandao/chandao.exe");
Thread.sleep(5000); } }
需要注意的是,使用AutoIT工具时进行自动化脚本运行时,要把杀毒软件关掉,不然会影响,误判是病毒
robot对象模拟键盘按键操作
在前一篇中说到的键盘事件,是使用Actions类,但实现效果不明显,所以用Robot类,创建robot对象来实现,效果很好,话不多说,直接上代码。
代码实现如下,仅供参考:
package com.ui.day1; import java.awt.Robot;
import java.awt.event.KeyEvent; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; public class yihuqingjiu_test_robot_mouse { public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
//浏览器要加载的url
driver.get("https://www.baidu.com");
//窗口最大化
driver.manage().window().maximize(); WebElement ctr1=driver.findElement(By.cssSelector("#kw"));
ctr1.sendKeys("12306");
Thread.sleep(1000); //按下ctrl+F4
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_ALT); //按下ctrl+shift+delete
Robot robot1 = new Robot();
robot1.keyPress(KeyEvent.VK_CONTROL);
robot1.keyPress(KeyEvent.VK_SHIFT);
robot1.keyPress(KeyEvent.VK_DELETE);
robot1.keyRelease(KeyEvent.VK_CONTROL);
robot1.keyRelease(KeyEvent.VK_SHIFT);
robot1.keyRelease(KeyEvent.VK_DELETE);//delete键可不释放,但ctrl+shift键必须释放 } }
键盘事件实现时,需要值得注意的是,ctrl,shift、alt键需要释放,不然会影响后者操作。
按下操作的关键字是keyPress(),按键释放关键字是keyRelease()
UI自动化测试(四)AutoIT工具使用和robot对象模拟键盘按键操作的更多相关文章
- Selenium+java - 通过Robot对象上传文件
思路: 1.将文件路径复制到剪切板 2.用robot对象模拟键盘操作即可 复制文件代码: public void setClipboardData(String data) { StringSelec ...
- Ui自动化测试上传文件方法都在这里了
前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...
- Python + Selenium + AutoIt 模拟键盘实现另存为、上传、下载操作详解
前言 在web页面中,可以使用selenium的定位方式来识别元素,从而来实现页面中的自动化,但对于页面中弹出的文件选择框,selenium就实现不了了,所以就需引用AutoIt工具来实现. Auto ...
- Selenide 阶段性总结介绍(UI自动化测试工具)
今天给大家介绍一个比较新的UI自动化测试工具-- Selenide.确实是比较新的,国内应该还没有多少人用它.在百度和google上你只能搜到一个中文帖子简单介绍了一下.如果你想用这个工具,不可避免的 ...
- 基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架
前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...
- UI自动化测试简介及Selenium工具的介绍和环境搭建
自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...
- UI自动化测试(一)简介及Selenium工具的介绍和环境搭建
自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...
- Robot Framework使用Phantomjs进行无界面UI自动化测试
Robot Framework 是一款关键字驱动的验收自动化测试框架,现在在国内使用的越来越广泛了.一种通用的Web UI自动化测试解决方案是Robot Framework+Selenium2Libr ...
- Airtest网易开源的一款UI自动化测试工具
Airtest网易开源的一款UI自动化测试工具 1 Airtest 简介Airtest Project是网易游戏内部工具团队开发并开源的一款UI自动化测试工具,据说曾经获得谷歌力挺. AirtestI ...
随机推荐
- [转]linux中颜色的含义
绿色文件---------- 可执行文件,可执行的程序 红色文件-----------压缩文件或者包文件 蓝色文件----------目录 www.2cto.com 白色文件-------- ...
- [转]RMI方式Ehcache集群的源码分析
RMI方式Ehcache集群的源码分析 Ehcache不仅支持基本的内存缓存,还支持多种方式将本地内存中的缓存同步到其他使用Ehcache的服务器中,形成集群.如下图所示: Ehcache支持 ...
- Push or Pull?
采用Pull模型还是Push模型是很多中间件都会面临的一个问题.消息中间件.配置管理中心等都会需要考虑Client和Server之间的交互采用哪种模型: 服务端主动推送数据给客户端? 客户端主动从服务 ...
- 10 Logistic Regression
线性分类中的是非题 --->概率题 (设置概率阈值后,大于等于该值的为O,小于改值的为X) --->逻辑回归 O为1,X为0 逻辑回归假设 逻辑函数/S型函数:光滑,单调 自变量趋于负无穷 ...
- 初入PHP,(for循环~水仙花数)
找出100-999之间的所有"水仙花数".所谓水仙花数是指一个三位 数,各位数字的立方和等于该数本身.(如153次方=1的3次方+5的3次方+3的3次方)并输出这些数字 想想153 ...
- Linux运维:安装CentOS7.2-图解
矮哥linux运维群: 93324526 笔者QQ:578843228 此篇博文针对最小化安装,和只有图解.有不懂地方,欢迎加群询问.
- 团队作业8----第二次项目冲刺(Beta阶段) 第六天
BETA阶段冲刺第六天 1.小会议ing 2.每个人的工作 (1)昨天已完成的工作 重复部分可以用红色字体显示 (2) 今天计划完成的工作 (3) 工作中遇到的困难: 尤少辉:在测试的时候,当队友提出 ...
- LaTeX排版指南
V0.0.1 工具链 CTeX:http://www.ctex.org/HomePage ,CTeX是一个中文套装,但也同时发布一个独立的ctex宏包 TeXLive:https://tug.org/ ...
- 使用Eclipse Egit与码云管理你的代码
总体流程: 建立远程仓库 建立本地仓库并与远程仓库关联 将Eclipse中的项目提交到本地仓库并进而push到远程仓库 一. 配置Eclipse EGit 图解Eclipse中安装及配置EGit插件中 ...
- 201521123061 《Java程序设计》第一周学习总结
1.本周学习总结 (1) Java的来历与版本演进 最早是Sun公司绿色项目Green Project 中所撰写的Strar7应用程序的程序语言: (2)Java根据应用领域分为三大平台:Java S ...