selenium实现文件上传
一、直接利用selenium实现
当上传的标签使用的是input,type=“file”时,直接使用selenium的api就可以处理上传操作(使用元素对象的sendKeys()方法);同时当input type='file' 加了样式被“美化”没了,直接sendkey不行的时候,在sendkeys之前,用javascript把它给弄出来:
下面是用selenium的api操作上传
二、利用autoit工具实现
有的控件不是使用input标签标记的,这个时候利用selenium自带的api就没有办法实现上传操作了,这个时候我们可以考虑使用autoit这个工具来帮助我们实现上传功能,先介绍一下,什么是autoit,它是使用类似BASIC脚本语言的免费软件,可以用于对windows GUI进行自动化操作和脚本的编写。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。
1、autoit的下载和安装
- 下载并安装AutoIT,下载链接:https://www.autoitscript.com/site/autoit/
- AutoIT安装成功后,可以在开始菜单下看到AutoIT的所有工具,如下图所示:
- 其中分为几类,AutoIT Window Info用来识别Windows控件,根据识别的控件信息编写脚本;Complie Script to .exe,用来将利用AutoIt编写的脚本,编译成可执行文件;Run Script 用来执行AutoIT的脚本信息;SciTE Script Editor用来编写AutoIt脚本。
- 接下来就是利用以上四种工具,来编写AutoIT脚本,然后编译成可执行文件
2、AutoIt Window Info 的使用
1.打开Auto window Info工具,该工具中主要使用“Finder Tool”功能用于选择需要识别的控件,然后控件的相关信息会显示在显示区。
2.打开QQ=》头像设置=》上传照片=》弹出windows窗口
3、SciTE Script Editor 使用
根据以上所识别的空间信息,利用此编辑器,利用此软件根据AutoIT的语法编写脚本。
附实现文件上传需要的几个方法:
ControlFocus ( "窗口标题", "窗口文本", 控件ID) 设置输入焦点到指定窗口的某个控件上
WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] ) 暂停脚本的执行直至指定窗口存在(出现)为止
ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" ) 修改指定控件的文本
Sleep ( 延迟 ) 使脚本暂停指定时间段
ControlClick ( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]] ) 向指定控件发送鼠标点击命令
其中,title即AutoIt Window Info识别出的Title字段,controlID即AutoIt Window Info识别出的Class和Instance的拼接,如上图拼接后的结果应为:Button1
开始菜单=》SciTE Script Editor=》编辑=》保存=》f5运行
4、Compile Script to .exe 使用
选择需要转换的script脚本,指定exe文件的输出地址(默认为Script的目录),点击“Convert”按钮完成转换。转换完成之后可以直接双击.exe文件进行运行。
5、.java调用exe文件
调用代码如下: