首页 > 代码库 > Selenium2学习-039-WebUI自动化实战实例-文件上传下载

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.ffp102      * @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 }

 

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

技术分享

 

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

技术分享

 

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

 

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

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

 

Save

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