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.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 }

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

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

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

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

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

Save

时间: 09-08

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

Selenium2学习-003-Selenium2 WebUI自动化实战实例-001-百度搜索

此文主要通过百度搜索功能,进行 Selenium2 的实战实例讲解,文中所附源代码于 2015-01-16 02:01 亲测通过,敬请亲们阅览.希望能对初学 Selenium2 UI 自动化测试编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! 脚本实现功能步骤如下所示: 启动 Chrome 浏览器 打开百度网址:www.baidu.com 输入搜索项:范丰平 博客园 获取搜索结果的第一项,并打开 关闭 Chrome 浏览器(为显示打开效果,已将此项注释) 夜已深了,鬼话少述,直接上源代

Webwork 学习之路(七)文件上传下载

Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大并发访问的交易网站.WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺便关注了下框架上传下载的实现,在本篇博文中总结记录如下. 1. 包装 Request 请求 每次客户端请求 Action 时,都会调用 WebWork 调度类 ServletDispatcher.service()方法. 具体过程请参照: http://www.cnblogs.com/java-cl

Struts2学习之文件上传/下载&amp;ValueStack(三)

简介 今天是学习Struts2第三天,也算struts2准备前奏告一段落,提升部分只能在后期深入了解,多看源码,多参阅资料.今天所学的知识点文件上传.下载/ValueStack&OGNL/Struts2标签 文件上传/下载 文件上传简介 a). 企业常用文件上传技术 : jspSmartUpload(主要应用 JSP model1 时代) . fileupload (Apache commons项目中一个组件). Servlet3.0 集成文件上传 Part类 b). Struts2 对文件上传

salesforce 零基础学习(四十二)简单文件上传下载

项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文件上传到Document对象中. 一.文件上传功能 apex代码 1 public with sharing class FileUploadUsedTransientController { 2 3 public transient Blob fileUploadBody{get;set;} 4

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项目地址:http://www.51aspx.com/code/MSDCArtMengFileUpload 咨询qq:286275658 演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 服务器端运行效果图: 服务器端配置文件: <?xml version="1.

开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载

OkHttpPlus介绍 项目地址:https://github.com/ZhaoKaiQiang/OkHttpPlus 主要功能:OkHttp封装,支持GET.POST.UI线程回调.JSON格式解析.链式调用.小文件上传下载及进度监听等功能 为什么要写这么一个库呢? 首先,是因为OkHttp在4.4之后已经作为底层的Http实现了,所以OkHttp这个库很强大,值得我们学习. 其次,在我看来,OkHttp使用起来不如Volley方便,OkHttp的回调都是在工作线程,所以如果在回调里面操作V

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

使用Paramiko实现SSH登陆,文件上传下载

1,SSh登陆命令行实现: #!/usr/bin/env python # encoding: utf-8 import paramiko private_key_path = '/Users/aolens/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.Aut

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl