写在前面
日常的UI自动化测试过程中,经常会遇到文件上传的业务操作。对于通过input标签实现的上传功能, 我们可以直接利用Selenium提供的方法send_keys() 实现文件上传。这种文件上传实现方式是将本地文件的路径作为一个值放在input标签中,然后通过form表单将这个值提交给服务器。 本文将针对input标签示范自动化执行文件上传功能。
代码实现方式
为了更直观的演示处理效果,制作了一个上传文件的html。地址为:
https://www.testclass.cn/test_html/UpFile.html
html界面如下图所示:
准备工作:
计算机本地D盘根目录下新建一个txt文件,命名为:upload_file.txt,然后修改后缀名为:upload_file.png 。
由于html文件限制了上传文件的类型仅为:.jpg .png .jpeg .gif格式,并且限制了上传文件的大小,所以请按指示建立文件upload_file.png。执行以下脚本:
#coding=utf-8
#www.testclass.cn
#Altumn
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://www.testclass.cn/test_html/UpFile.html')
time.sleep(2)
# 定位上传按钮,添加本地文件;
upload = driver.find_element_by_id('up_file')
upload.send_keys('D:\\upload_file.png')
try:
Alert = driver.switch_to.alert
#获取Alert的Text值;
print(Alert.text)
time.sleep(2)
#确定Alert弹出框
Alert.accept()
finally:
pass
执行结果如下所示:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '57201' 'c:\Users\WangXiao\Desktop\python\Untitled-18.py'DevTools listening on ws://127.0.0.1:12666/devtools/browser/874037aa-9e97-4195-a757-cfd7e9095bb6
Upload succeed!---Tips from www.testclass.cn
另一种写法
另一种代码实现方式,执行结果相同。
#coding=utf-8
#www.testclass.cn
#Altumn
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://www.testclass.cn/test_html/UpFile.html')
time.sleep(2)
# 定位上传按钮,添加本地文件
driver.find_element_by_id("up_file").send_keys('D:\\upload_file.png')
try:
Alert = driver.switch_to.alert
#获取Alert的Text值;
print(Alert.text)
time.sleep(2)
#确定Alert弹出框
Alert.accept()
finally:
pass
备注:非input标签的文件上传,不适用于此方法,需要借助autoit工具或者SendKeys第三方库。
本文分享自 软件测试testclass 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!