深圳网站建设有哪些公司,设计制作小车教学反思,rp如何做网站,西安营销推广前言
实施UI自动化测试的时候#xff0c;经常会遇见上传文件的操作#xff0c;那么对于上传文件你知道几种方法呢#xff1f;今天我们就总结一下几种常用的上传文件的方法#xff0c;并分析一下每个方法的优点和缺点以及哪种方法效率#xff0c;稳定性更高
被测HTML代码…
前言
实施UI自动化测试的时候经常会遇见上传文件的操作那么对于上传文件你知道几种方法呢今天我们就总结一下几种常用的上传文件的方法并分析一下每个方法的优点和缺点以及哪种方法效率稳定性更高
被测HTML代码
!--upload_file.html--!DOCTYPE html
html langen
headmeta charsetUTF-8title上传文件/title
/head
bodyinput idupload_file typefile
/body
/html
第一种方法使用webdriver api 提供的方法send_keys上传文件
send_keys方法
实例
------------------------------------
Time : 2019/7/17 19:03
Auth : linux超
File : upload_file_send_keys.py
IDE : PyCharm
Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
QQ : 28174043qq.com
GROUP: 878565760
------------------------------------from selenium import webdriver
import timedriver webdriver.Firefox()
driver.get(rfile:///e:/CnblogCode/upload_file.html)
upload_element driver.find_element_by_xpath(//*[idupload_file])
time.sleep(3) # 为了看效果
upload_element.send_keys(rE:\CnblogCode\upload_file.html)
执行过程 可以看到执行过程很顺利且代码实现简单也没有报错
但是往往现实是残酷的因为有的网站的上传文件并不是采用 input标签来定义的上传文件按钮所以就无法使用send_keys方法上传这也是这个方法的限制
AutoIt工具
第二种方法是AutoIT工具它是一个类似脚本语言的软件利用此软件我们可以方便的实现模拟键盘、鼠标、窗口等操作实现自动化
安装
官网地址AutoIt Downloads - AutoIt 安装完后可以找到如下一些工具 使用
1. 打开被测试的HTML页面并点击上传文件弹出上传文件窗口并保持当前窗口
2. 打开AutoIt Window Info(x86/x64)工具
3. 点击工具中Finder Tool标签下的按钮开始分别定位上传文件的【输入框】和【打开】按钮并记录TitleClassInstance图中红色窗口中的信息
注意不同的浏览器抓取的Title是不一样的Firefox文件上传Chrome打开IE选择要加载的文件) 4. 打开 SciTE Script Editor 工具开始编写脚本(注意脚本中的Edit1是class 和 instance 拼接的)
;first make sure the number of arguments passed into the scripts is more than 1
If $CmdLine[0]2 Then Exit EndIf ;if parmas num 2 ,then break
;$CmdLine[0] ;参数的数量
;$CmdLine[1] ;第一个参数 (脚本名称后面)
;$CmdLine[2] ;第二个参数
;都是从cmd传入参数handleUpload($CmdLine[1],$CmdLine[2]);定义上传函数有两个参数第一个是浏览器名字第二参数是文件路径Func handleUpload($browser, $uploadfile)Dim $title ;定义一个title变量;根据弹窗的title来判断是什么浏览器If $browserie Then ; 代表IE浏览器$title选择要加载的文件ElseIf $browserchrome Then ; 代表谷歌浏览器$title打开ElseIf $browserfirefox Then ; 代表火狐浏览器$title文件上传EndIfif WinWait($title,,4) Then ;等待弹出出现最大等待时间是4秒WinActivate($title) ;找到弹出窗口之后激活当前窗口ControlSetText($title,,Edit1,$uploadfile) ;把文件路径放入输入框此”Edit1“是用FinderTool获取到的ControlClick($title,,Button1) ;点击保存或者打开或者上传按钮此“Button1”使用FinderTool获取到的ElseReturn FalseEndIfEndFunc
5. 编译脚本为exe可执行文件
编写完脚本之后保存文件并打开Compile Script to .exe(x64/x86)工具 将保存后的脚本.au3文件转换为.exe可执行文件
6. 执行转换后的脚本
在执行脚本之前先确保上传文件的窗口已经打开接下来打开cmd执行exe程序 C:\Users\v-xug\Desktopupload_file_new.exe firefox E:\CnblogCode\upload_file.html
7. 执行效果 8. 编写selenium脚本
实例 ------------------------------------
Time : 2019/7/18 16:20
Auth : linux超
File : base.py
IDE : PyCharm
Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
QQ : 28174043qq.com
GROUP: 878565760
------------------------------------from selenium.webdriver.common.action_chains import ActionChains
import os
from selenium import webdriver
import timeclass Base(object):staticmethoddef upload_file(exe, browser, filename):使用autoIt上传文件:param exe: 上传文件的exe程序所在目录:param browser: 浏览器类型 firefox chrome ie:param filename: 待上传文件路径:return: nonecmd exe browser filenameos.system(cmd)if __name__ __main__:driver webdriver.Firefox()driver.get(rfile:///e:/CnblogCode/upload_file.html) # 打开被测htmlupload_element driver.find_element_by_xpath(//*[idupload_file])action ActionChains(driver)action.move_to_element(upload_element).click().perform() # 点击上传文件弹出上传文件窗口action.release()time.sleep(3) # 为了看效果Base.upload_file(rE:\CnblogCode\upload_file_new.exe, firefox, rE:\CnblogCode\upload_file.html) # 上传文件
执行过程 以上就是使用AutoId工具完成上传文件的过程其实还是挺复杂的 但是配置一次之后以后就可以重复使用编译生成的exe文件了执行效果还是不错的 没出什么错误执行效率也还可以
模拟键盘
第三种方法模拟键盘的粘贴与回车操作并结合剪切板的操作来完成上传文件基本原理是向剪切板中发送文件(文件路径字符串)然后再从剪切板中获取到文件最后通过模拟键盘的ctrlv与enter键来完成文件上传
这种方法需要第三方库的支持安装pypiwin32库 pip install pypiwin32
实例
模拟键盘操作代码 keyboard.py
剪切板操作代码 clipboard.py
上传文件代码 upload_file_board.py
执行过程 失败 可以看到第二个动画上传文件未成功这也就这个方法的弊端只要移动了鼠标就有可能就不会成功毕竟模拟的是enter键这个过程你点击了别的地方那么enter的效果就变了所以这种方法很不稳定也不难发现代码量也很多而且需要掌握模拟键盘和剪切板的操作最不推荐使用的就是这种方法
之前我的实战项目里面用到过这种方法 当时我已经发现了这种方法的弊端 但是为了掌握这种模拟键盘的方法所以才使用的当然模拟键盘操作用到一些特殊的情况还是能解决很多实际问题的
WinSpy工具
第四种方法这个工具其实和AutoIt工具的元素定位方式一样但是不需要生成exe文件其实只是个辅助工具主要用来获取windows窗口句柄进而通过python脚本来控制
WinSpy安装
WinSpy download | SourceForge.net
下载完直接解压打开WinSpy32(64).exe即可使用
使用方法和autoId一样请按照下图的步骤操作记录winspy-Tree中红框信息 编写代码之前同样需要提前安装 pypiwin32库
实例 load_file_winspy.py
执行过程 此方法也比较稳定只要通过传递不同的浏览器参数即可完成不同浏览器中的上传文件操作而且相比于AutoId而言这种方法可以直接使用python编写代码且不需要编译成exe程序可以随时对代码进行修改易维护
总结
最后总结一下每个方法的优缺点
1. send_keys(): 如果所遇见的上传文件使用的是input标签且属性typefile均可使用也最好采用此方法方便简单执行效率高
2. AutoId 需编写VBS代码并编译为exe可执行文件过程繁琐编写selenium测试用例时无法随时调试内部代码但send_keys()无法使用时可以采用此方法执行效率较高稳定性也算可以
3. 模拟键盘和剪切板 此方法需要掌win32apiwin32gui模块的使用且代码编写繁琐上传文件时如果鼠标点击其他地方会导致上传失败脚本稳定性差且效率低但是如果用到一些特殊地方会起到比较好的效果
4. WinSpaywindows窗口句柄抓取工具不需要编译脚本为exe文件且上传文件操作使用的脚本是python第三方库实现易维护执行效率也较高推荐send_keys()不可使用时首先考虑此方法 如果你想学习自动化测试那么下面这套视频应该会帮到你很多 如何逼自己1个月学完自动化测试学完即就业小白也能信手拈来拿走不谢允许白嫖.... 最后我这里给你们分享一下我所积累和整理的一些文档和学习资料有需要直接领取就可以了 以上内容对于软件测试的朋友来说应该是最全面最完整的备战仓库了为了更好地整理每个模块我也参考了很多网上的优质博文和项目力求不漏掉每一个知识点很多朋友靠着这些内容进行复习拿到了BATJ等大厂的offer这个仓库也已经帮助了很多的软件测试的学习者希望也能帮助到你。