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对象模拟键盘按键操作的更多相关文章

  1. Selenium+java - 通过Robot对象上传文件

    思路: 1.将文件路径复制到剪切板 2.用robot对象模拟键盘操作即可 复制文件代码: public void setClipboardData(String data) { StringSelec ...

  2. Ui自动化测试上传文件方法都在这里了

    前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...

  3. Python + Selenium + AutoIt 模拟键盘实现另存为、上传、下载操作详解

    前言 在web页面中,可以使用selenium的定位方式来识别元素,从而来实现页面中的自动化,但对于页面中弹出的文件选择框,selenium就实现不了了,所以就需引用AutoIt工具来实现. Auto ...

  4. Selenide 阶段性总结介绍(UI自动化测试工具)

    今天给大家介绍一个比较新的UI自动化测试工具-- Selenide.确实是比较新的,国内应该还没有多少人用它.在百度和google上你只能搜到一个中文帖子简单介绍了一下.如果你想用这个工具,不可避免的 ...

  5. 基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架

    前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...

  6. UI自动化测试简介及Selenium工具的介绍和环境搭建

    自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...

  7. UI自动化测试(一)简介及Selenium工具的介绍和环境搭建

    自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...

  8. Robot Framework使用Phantomjs进行无界面UI自动化测试

    Robot Framework 是一款关键字驱动的验收自动化测试框架,现在在国内使用的越来越广泛了.一种通用的Web UI自动化测试解决方案是Robot Framework+Selenium2Libr ...

  9. Airtest网易开源的一款UI自动化测试工具

    Airtest网易开源的一款UI自动化测试工具 1 Airtest 简介Airtest Project是网易游戏内部工具团队开发并开源的一款UI自动化测试工具,据说曾经获得谷歌力挺. AirtestI ...

随机推荐

  1. 关于sys.argv

    sys.argv[]用来获取命令行参数,sys.argv[0]表示代码本身的文件路径.比如在命令行输入‘python test.py -version',sys.argv[0]的值即为test.py, ...

  2. CSS-三栏响应式布局(左右固宽,中间自适应)的五种方法

    代码: <!-- 1 float --> <h3 class="block">第一种方法-float</h3> <div class=&q ...

  3. Linux学习之路 -- 简单日常使用命令

    tail -f catalina.out #在 logs 下面查看日志( -f 实时查看) rm -rf /var/log/httpd/access #删除文件(-r删除文件 并删除文件夹下的内容 - ...

  4. iOS蓝牙交互(4.0)

    前期准备工作:查看coreBlueTooth框架,查看一些蓝牙名词:Central(中心设备).Peripheral(外围设备).advertisementData(广播数据).-RSSI: 信号强弱 ...

  5. Core Java 谈谈HashMap

    说起Java的HashMap相信大家都不是很陌生,但是对于HashMap内部结构有些同学可能不太了解,咱们下一步就将其展开. HashMap是基于Hash算法的,同理的还有HashSet和HashTa ...

  6. 201521123061 《Java程序设计》第八周学习总结

    201521123061 <Java程序设计>第八周学习总结 1. 本周学习总结 2. 书面作业 1.List中指定元素的删除(题目4-1) 1.1 实验总结 主要是应用到了list中的a ...

  7. 201521123068 《java程序设计》 第7周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 //contains ...

  8. 201521123094 《Java程序设计》第1周学习总结

    1. 本周学习总结 ① Java根据应用领域分为三大平台:Java SE.Java EE.Java ME.Java SE平台,作为各大平台的基础,它分成JVM/JRE/JDK/Java语言四个主要部分 ...

  9. 201521123042《Java程序设计》第13周学习总结

    本次作业参考文件 正则表达式参考资料 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.bai ...

  10. 201521123022 《Java程序设计》 第十三周学习总结

    1. 本周学习总结 2. 书面作业 Q1. 网络基础 Q1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 前者IP ...