首页 > 代码库 > Selenium2学习-039-WebUI自动化实战实例-文件上传下载
Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div、a或其他方式结合实现)。
非input标签类因其有各式各样的实现方式,需要考虑具体的场景,因而此文对此类文件上传不做讲解,以input标签实现文件上传的方式进行讲解,请知悉!
解决方案有如下三种:
- 1、定位元素直接通过sendkeys修改input标签的文件链接;
- 2、通过第三方控件(AutoIt)编写脚本将其转换为可执行文件(后缀为.exe),然后Java脚本调用实现文件选择操作;
- 3、通过第三方控件(AutoIt)直接编写Java脚本实现文件选择操作,此种方式需构件jacob.jar(提供COM访问)、AutoItX4Java.jar以及jacob和AtuoIt相应的DLL支持。
第一种解决方案只需要webdriver定位到相应的标签并发送sendkeys即可实现,但仅仅只能是针对类型为file的input标签;第二种解决方案,之前网上也有大神写过(可参考虫师的博客:selenium借助AutoIt识别上传(下载)详解),第三种实现方式中的组件识别请参阅此文,在此不再赘述。
第三种实现方式具体实现步骤如下所示:
第一步:下载jacob相应的jar及dll,下载链接,解压后目录如下图所示:
第二步:下载AutoIt相应的zip包,下载链接,解压后目录如下图所示:
第三步:下载 AutoItX4Java.jar,下载链接
第四步:创建maven工程 demo-autoit,并在根目录下创建如下目录
- 1、lib目录,将 jocob.jar、AutoItX4Java.jar放在此目录中,并添加到工程的Libraries中
- 2、dll目录,将jacob-1.18-x86.dll、jacob-1.18-x64.dll、autoit-v3\install\AutoItX\AutoItX3_x64.dll、autoit-v3\install\AutoItX\AutoItX3.dll放在此目录中,然后依据系统位数通过命令(regsvr32 {工程目录}/dll/AutoItX3_x64.dll)进行AutoIt动态链接库的注册
- 3、webdriver目录,存放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 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
Selenium2学习-039-WebUI自动化实战实例-文件上传下载