Selenium2学习-039-WebUI自动化实战实例-文件上传下载

通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:diva或其他方式结合实现)。

input标签类因其有各式各样的实现方式,需要考虑具体的场景,因而此文对此类文件上传不做讲解,以input标签实现文件上传的方式进行讲解,请知悉!

 

解决方案有如下三种:

  • 1、定位元素直接通过sendkeys修改input标签的文件链接;
  • 2、通过第三方控件(AutoIt)编写脚本将其转换为可执行文件(后缀为.exe),然后Java脚本调用实现文件选择操作;
  • 3、通过第三方控件(AutoIt)直接编写Java脚本实现文件选择操作,此种方式需构件jacob.jar(提供COM访问)、AutoItX4Java.jar以及jacobAtuoIt相应的DLL支持。

 

第一种解决方案只需要webdriver定位到相应的标签并发送sendkeys即可实现,但仅仅只能是针对类型为fileinput标签;第二种解决方案,之前网上也有大神写过(可参考虫师的博客:selenium借助AutoIt识别上传(下载)详解),第三种实现方式中的组件识别请参阅此文,在此不再赘述。

 

第三种实现方式具体实现步骤如下所示:

第一步:下载jacob相应的jardll下载链接,解压后目录如下图所示:

第二步:下载AutoIt相应的zip包,下载链接,解压后目录如下图所示:

第三步:下载 AutoItX4Java.jar下载链接

第四步:创建maven工程 demo-autoit,并在根目录下创建如下目录

  • 1lib目录,将 jocob.jarAutoItX4Java.jar放在此目录中,并添加到工程的Libraries
  • 2dll目录,将jacob-1.18-x86.dlljacob-1.18-x64.dllautoit-v3\install\AutoItX\AutoItX3_x64.dllautoit-v3\install\AutoItX\AutoItX3.dll放在此目录中,然后依据系统位数通过命令(regsvr32 {工程目录}/dll/AutoItX3_x64.dll)进行AutoIt动态链接库的注册
  • 3webdriver目录,存放chrome浏览器驱动chromedriver_x86_2.21.exe

第五步:编写POM文件,引入selenium构件

第六步:编写测试脚本(内含win7内置计算器实例),测试脚本详情如下所示:

 

  1 /**
  2  * Aaron.ffp Inc.
  3  * Copyright (c) 2004-2016 All Rights Reserved.
  4  */
  5 package ffp.demo.autoit;
  6 
  7 import java.io.File;
  8 
  9 import org.openqa.selenium.By;
 10 import org.openqa.selenium.WebDriver;
 11 import org.openqa.selenium.WebElement;
 12 import org.openqa.selenium.chrome.ChromeDriver;
 13 import org.testng.annotations.Test;
 14 
 15 import autoitx4java.AutoItX;
 16 
 17 import com.jacob.com.LibraryLoader;
 18 
 19 /**
 20  * <strong>autoIT窗口桌面识别工具演示实例</strong><br>
 21  * <ul>
 22  * <li>autoit原生控件识别实例</li>
 23  * </ul>
 24  * <br>
 25  * @author Aaron.ffp
 26  * @version V1.0.0: demo-autoit ffp.demo.autoit CalcTest.java, 2016-09-06 19:25:48.205 Exp $
 27  */
 28 public class CalcTest {
 29 //    @Test
 30     public void autoit_demo_test() throws InterruptedException {
 31         String jacobDllVersionToUse = "64".equals(jvmBitVersion()) ? "jacob-1.18-x64.dll" : "jacob-1.18-x32.dll";
 32         
 33         File file = new File("lib", jacobDllVersionToUse);
 34         System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
 35 
 36         AutoItX x = new AutoItX();
 37         x.run("calc.exe");
 38         x.winActivate("计算器");
 39         x.winWaitActive("计算器");
 40         // 3 + 6 =
 41         x.controlClick("计算器", "", "133");
 42         Thread.sleep(1000);
 43         x.controlClick("计算器", "", "93");
 44         Thread.sleep(1000);
 45         x.controlClick("计算器", "", "136");
 46         Thread.sleep(1000);
 47         x.controlClick("计算器", "", "121");
 48         // 获取计算结果句柄
 49         System.out.println(x.controlGetHandle("计算器", "", "#327701"));
 50         System.out.println(x.controlGetHandle("[CLASS:CalcFrame]", "", "[CLASS:#32770;INSTANCE:1]"));
 51         // 获取计算结果
 52         System.out.println(x.controlGetText("计算器", "", "[CLASS:#32770;INSTANCE:1]"));
 53         System.out.println(x.controlGetText("[CLASS:CalcFrame]", "", "327701"));
 54         
 55         x.winClose("计算器");
 56     }
 57     
 58     @Test
 59     public void autoit_demo_upload() {
 60         String jacobDllVersionToUse = "64".equals(jvmBitVersion()) ? "jacob-1.18-x64.dll" : "jacob-1.18-x32.dll";
 61         
 62         File file = new File("dll", jacobDllVersionToUse);
 63         System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
 64         
 65         /* 设定 Chrome 启动文件的位置, 若未设定则取默认安装目录的 Chrome */
 66         System.setProperty("webdriver.chrome.bin", "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe");
 67         /* 设定 Chrome WebDirver 的位置 */
 68         System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + System.getProperty("file.separator") + "webdriver" + System.getProperty("file.separator") + "chromedriver_x86_2.21.exe");
 69         
 70         String url = "http://localhost:8080/test/demo-autoit-fileupload.html";
 71         String fPath = "G:/download/";
 72         String fName = "居住证积分指引2016.pdf";
 73         
 74         WebDriver chrome = new ChromeDriver();
 75         
 76         chrome.get(url);
 77         
 78         WebElement fileUpload = chrome.findElement(By.id("up"));
 79         
 80         // 通过 sendkeys 向类型为file的input标签发送文件全路径
 81         // fileUpload.sendKeys(fPath + fName);
 82         
 83         // 通过 AutoIt实现文件选择确认
 84         fileUpload.click();
 85         
 86         AutoItX upload = new AutoItX();
 87         
 88         upload.controlFocus("打开", "", "Edit1");
 89         upload.winWait("[CLSAA:#32770]", "", 10);
 90         upload.ControlSetText("打开", "", "ToolbarWindow322", fPath);
 91         upload.send("{ENTER}");
 92         upload.ControlSetText("打开", "", "Edit1", fName);
 93         upload.sleep(2000);
 94         upload.controlClick("打开", "", "Button1");
 95         upload.sleep(2000);
 96     }
 97     
 98     /**
 99      * <strong>获取系统位数</strong>
100      * <br>
101      * @author Aaron.ffp
102      * @version V1.0.0: demo-autoit ffp.demo.autoit CalcTest.java jvmBitVersion, 2016-09-06 19:28:13.175 Exp $
103      * 
104      * @return 系统位数
105      */
106     public String jvmBitVersion() {
107         return System.getProperty("sun.arch.data.model");
108     }
109 }

 

最终测试目录结构如下图所示:

 

执行测试脚本,执行结果如下图所示:

 1 <html>
 2     <head>
 3         <title>autoit处理文件上传实例</title>
 4     </head>
 5     
 6     <body>
 7         <div>
 8             <input type="file" id="up" />
 9         </div>
10     </body>
11 </html>
附录:demo-autoit-fileupload.html 文件内容

 

文件下载的文件选择框操作也可参考此实例进行脚本编写,不在此赘述。

 

至此,Selenium2学习-039-WebUI自动化实战实例-文件上传下载 顺利完结,希望此文能够给初学 Selenium 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

 

Save

Save

posted @ 2016-09-09 00:26  范丰平  Views(1146)  Comments(0Edit  收藏  举报