selenium2用AutoIt上传文件
1.标签是input,如下图所示:

WebElement e1= driver.findElement(By.id("load"));
//输入要上传文件的地址
e1.sendKeys("D:\\Work\\eclipse_workspace\\seleniumdemo\\res\\被上传的文件.txt");
2.使用autoit脚本上传方式
有的上传控件不是input元素,这个时候利用sendkeys方法是行不通的。此时可以通过autoit来帮助我们实现上传功能,先了解下什么是autoit。它是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。而这是其它语言不可能做到或无可靠方法实现的
我们主要利用autoit来实现对上传文件弹窗的定位,然后对弹窗中地址框赋值(文件路径),然后点击确定按钮进行上传文件,如下图:

具体思路知道该怎么做了,下面通过autoit脚本来实现。
首先你需要安装autoit(官网:https://www.autoitscript.com/site/),直接默认安装即可。
接下来需要通过AutoIt Window Info (x86)或者AutoIt Window Info (x64)(这个是你刚才安装的autoit自带的应用程序,你可以在开始菜单中找到,如果开始菜单中没有请到安装目录下查找),先打开AutoIt Window Info ,如图:

打开其中对应你windows的程序,界面如下:

这个工具是定位windows gui(windows界面)元素用的。接下来会对上传弹出框进行定位。
那百度的个人头像上传功能,点击选择图片:

之后,会弹出:

然后找切换到刚才打开的AutoIt Window Info 工具,找到Finder Tool:然后用鼠标拖动此图标到文件上传弹窗的 文件名输入框:

记录下文件名输入框的classname值。然后用上面的方法在获取下“打开”按钮的calssname,如图:
记录好“打开”按钮的calssname。接下来根据定位值来编写autoit脚本。
打开安装目录下的:SciTE Script Editor应用程序:

输入下面的代码:
;first make sure the number of arguments passed into the scripts is more than 1
If $CmdLine[]< Then Exit EndIf ;if parmas num <2 ,then break
;$CmdLine[0] ;参数的数量
;$CmdLine[1] ;第一个参数 (脚本名称后面)
;$CmdLine[2] ;第二个参数
;都是从cmd传入参数
handleUpload($CmdLine[],$CmdLine[]) ;定义上传函数,有两个参数,第一个是浏览器名字,第二参数是文件路径
Func handleUpload($browser, $uploadfile)
Dim $title ;定义一个title变量
;根据弹窗的title来判断是什么浏览器
If $browser="ie" Then ; 代表IE浏览器
$title="选择要加载的文件"
ElseIf $browser="chrome" Then ; 代表谷歌浏览器
$title="打开"
ElseIf $browser="firefox" Then ; 代表火狐浏览器
$title="文件上传"
EndIf if WinWait($title,"",) Then ;等待弹出出现,最大等待时间是4秒
WinActivate($title) ;找到弹出窗口之后,激活当前窗口
ControlSetText($title,"","Edit1",$uploadfile) ;把文件路径放入输入框,此”Edit1“是用FinderTool获取到的
ControlClick($title,"","Button1") ;点击保存或者打开或者上传按钮,此“Button1”使用FinderTool获取到的
Else
Return False
EndIf
EndFunc
需要强调的是,autoit是根据弹窗的名字来给文件名输入框赋值和点击按钮等操作的,由于不同的浏览器弹窗的名字可能不一样,这里要谨慎选择。
autoit的脚本到此写完了,但是由于我们是在cmd中调用,需要将其转换成exe可执行文件。
打开autoit安装目录下的应用程序:Compile Script to .exe (x86)或者Compile Script to .exe (x64),

然后按照图中操作:

点击Conver按钮,则成功讲upload.au3脚本转换为运行文件upload.exe,如下图:

接下来测试下效果,打开cmd,输入:"C:\Users\Jing\Documents\upload.exe" "firefox" "C:\Users\Public\Pictures\pic.jpg" 双引号不要省略,如图:

之后回到网页,查看刚才的头像已被上传:

这里需要强调下脚本在cmd的试用,第一个参数的是autoit exe脚本文件,第二是 autoit脚本函数需要的参数,回头看看脚本,一个参数是浏览器名字:chrome或者ie或者firefox,第二个参数是要上传文件的路径,并且都要用英文环境下的双引号括起来,就形成了下面的代码:
"C:\Users\Jing\Documents\upload.exe" "firefox" "C:\Users\Public\Pictures\pic.jpg"
如何在Selenium中调用此脚本呢?你可以封装成一个执行这个exe文件的方法:
/**
* 上传文件,需要点击弹出上传照片的窗口才行
*
* @parambrower
* 使用的浏览器名称
* @paramfile
* 需要上传的文件及文件名
*/
publicvoidhandleUpload(String browser, File file) {
String filePath= file.getAbsolutePath();
String executeFile= "res/script/autoit/Upload.exe"; //定义了upload.exe文件的路径
String cmd= "\""+ executeFile+ "\""+ " "+ "\""+ browser+ "\""+ " "+ "\""+ filePath+ "\"";
try{
Process p= Runtime.getRuntime().exec(cmd);
p.waitFor();
} catch(Exception e) {
e.printStackTrace();
}
}
然后在需要有上传文件的用例中调用,具体步骤是:
先去用selenium点击上传文件按钮,之后会弹出上传文件输入框,最后执行上面那个public void handleUpload(String browser, File file)方法即可。
selenium2用AutoIt上传文件的更多相关文章
- 关于IE9中webdiriver使用autoit上传文件报错
在ie9中, type="file"的元素是通过js打开的 webdirver结合autoit上传文件时,会报拒绝访问的错 sciTE编辑器中是这样写的: #include < ...
- 关于Autoit上传文件的问题
Autoit上传文件需要安装两个软件: 使用这个做文件上传时:在代码中需要添加的代码如下: Runtime.getRuntime().exec("d:/zhpg.exe"); D盘 ...
- selenium3 + python - autoit上传文件
一.环境准备: 1.可以autoit官网上下载,安装 http://www.autoitscript.com/site/ 2.AutoIt里面几个菜单功能介绍: SciTE Script Editor ...
- Selenium上传文件方法总结
Web上本地上传图片,弹出的框Selenium是无法识别的,也就是说,selenium本身没有直接的方法去实现上传本地文件,这里总结了两种上传文件的方式. 一.利用Robot类处理文件上传. 其大致流 ...
- Ui自动化测试上传文件方法都在这里了
前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Java&Selenium借助AutoIt 实现非Input类型自动化上传文件
通常情况下实现自动化上传文件,都是通过sendKeys函数直接将文件全路径传给页面空间就能完成,然而这种情况只能对Input类型的控件有效,对于非Input类型的控件可以借助AutoIt来完成 下载地 ...
- 《selenium2 python 自动化测试实战》(13)——上传文件
看代码: # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefo ...
随机推荐
- 选择控件js插件和使用方法
记录一下 选择控件js插件 /* * 滚动控件,包含地址选择.时间选择.自定义单选 */ //js_inputbox input 输入框 //js_pickviewselect 下拉单项选择 //js ...
- c# 字符串的首字母大写转换 方法
方法1: s.Substring(0,1).ToUpper()+s.Substring(1); 方法2: s = System.Threading.Thread.CurrentThread.Curr ...
- 【踩坑】spring每次请求后session不一样导致无法在服务器保存信息
根据网上的资料,若想在服务器用session保存一些信息,方法如下: public Xclass Xmethod(HttpServletRequest request, HttpSession ses ...
- Android自定义可拖动的悬浮按钮
在页面上随意拖动的按钮 public class MoveScaleRotateView extends RelativeLayout { private Context mContext; //默认 ...
- Outlook Web App 客户端超时设置
这篇文章我们讨论一下,OWA 2013在公共和私人的电脑是如何启用和配置. Exchange 2013 Outlook Web App (OWA) 登录页不再允许用户选择无论他们正在使用公共的或私人的 ...
- COGS 2794. 爱摔跤的比利海灵顿
★☆ 输入文件:find_k.in 输出文件:find_k.out 简单对比时间限制:1.4 s 内存限制:128 MB [题目描述] B•海灵顿•雷想要和n个巨人比试摔♂跤,他想先和 ...
- Oracle 11g 新特性 – HM(Hang Manager)简介
在这篇文章中我们会对oracle 11g 新特性—hang 管理器(Hang Manager) 进行介绍.我们需要说明,HM 只在RAC 数据库中存在. 在我们诊断数据库问题的时候,经常会遇到一些数据 ...
- 2018.2.09 php学习(二)
1.用索引提高效率: 索引是表的一个概念部分,用来提高检索数据的效率,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Upda ...
- CentOS7-samba文件共享服务
简介: Samba,是在Unix上实现SMB(Server Message Block)的一个工具套件.而SMB通常是windows用来实现共享的,包括文件和打印机等.而Unix上装上SMB,则使得U ...
- 【转载】Alpha、Beta、RC、GA版本的区别
转自:http://www.blogjava.net/RomulusW/archive/2008/05/04/197985.html Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只 ...