Selenium自动化测试-文件上传
——————·今天距2021年还有321天·——————
这是ITester软件测试小栈第96次推文
进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。
在selenium中,文件上传可以分为两种场景:
input标签:这种可以用selenium提供的send_keys()方法轻松解决;
非input标签:实现起来比较困难,可以借助第三方库pypiwin32。
input标签上传文件
input标签,可以直接调用send_keys时输入文件路径。
首先,写一个input标签的上传文件小demo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<input type="file" name="my_file">
</body>
</html>
浏览器打开效果如下:
接着使用send_keys()上传文件:
from selenium import webdriver
driver = webdriver.Chrome()
# input标签的html文件
driver.get('http://localhost:63342/ui_autotest/upload.html')
file_ele = driver.find_element_by_name('my_file')
# 上传本地图片
file_ele.send_keys(r"C:\Users\96984\Pictures\Camera Roll\小猪佩奇.gif")
非input标签上传文件
这种上传方式需要借助第三方工具,主要有以下三种情况:
1.AutoIt 去调用它生成的au3或者exe格式的文件;
2.SendKeys第三方库;
3.Python的pywin32库,通过识别对话框句柄来进行操作;
以下介绍通过pywin32进行操作。
环境安装:
①安装pypiwin32, 使用命令 pip install pypiwin32
②下载WinSpy包,解压后,双击可执行文件即可(微信公众号后台回复:WinSpy领取)。
WinSpy使用介绍:
①打开一个可以上传文件的网址,比如 https://smallpdf.com/cn/jpg-to-pdf
②点击选择文件,会出现一个上传文件的弹窗
③打开安装好的WinSpy,选中按钮拖拽到文件名的输入框中,WinSpy会对应出现相关信息
4.选择WinSpy底部按钮Tree, 查看弹窗按钮的层级关系
通过代码实现上传文件
import win32gui
import time
import win32con
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://smallpdf.com/cn/jpg-to-pdf')
driver.maximize_window()
# 找到选择文件元素
file_ele = driver.find_element_by_css_selector('span.l0v3m7-7')
file_ele.click()
time.sleep(2)
# #32770--对话框名字,即最外层整个弹窗
dialog = win32gui.FindWindow('#32770', '打开')
ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)
# 上面三行代码依次寻找对象,直到找到文件名输入框Edit对象的句柄
# 找到打开按钮
button = win32gui.FindWindowEx(dialog, 0, 'Button', None)
time.sleep(3)
# 发送本地文件
win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, r'C:\Users\96984\Pictures\Camera Roll\小猪佩奇.gif')
time.sleep(3)
# 点击打开按钮
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)
time.sleep(3)
如果想批量上传文件呢,修改发送本地文件的代码如下:
win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, r'"C:\Users\96984\Pictures\Camera Roll\小猪佩奇.gif" "C:\Users\96984\Pictures\Camera Roll\u=3263232804,1739019004&fm=26&gp=0.jpg"')
运行后,上传文件效果如下所示:
最后是今天的分享:WinSpy安装包
ITester软件测试小栈今日分享
分享内容
WinSpy安装包
领取方式
微信公众号后台回复:WinSpy
有图有真相
以上
That‘s all
更多系列文章
敬请期待
ITester软件测试小栈
往期内容宠幸
打开PyCharm永久激活的这两个锦囊,再也不用担心写代码的时候让我付费了!
QQ空间面试题放送,速度教科书式扑街补救offer!
金九银十加薪季,测试题预热一波。
测试面试题集-测试用例设计:登录、购物车、QQ收藏表情、转账、充值、提现
Selenium系列文章汇总
Fiddler基本使用
快来星标 置顶 关注我
后台 回复资源取干货
回复答题挑战参与答题
ITester软件测试小栈
软件测试技术分享栈
功能测试|自动化测试|专项测试|测试开发
想要获取相关资料和软件 ?
测试交流Q群:727998947
左右滑动添加coco或vivi 微信