Selenium文件上传

写在前面


日常的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(testclass_cn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java小白成长之路

第12次文章:网络编程——httpserver服务器的搭建

http服务器的构建。在网络中的通信过程中,就是客户端和服务器端进行相互请求和应答方式的交互。客户端在自己这边输入服务器地址,请求获取服务器的资源信息。当服务器...

8330
来自专栏Python无止境

聊聊 Python 的单元测试框架(二):nose 和它的继任者 nose2

nose[1] 是一个第三方单元测试框架,它完全兼容 unittest,并且号称是一个更好用的测试框架。

12240
来自专栏Java小白成长之路

第14次文章:网络编程完善+注解

小白这周把网络编程最后的一部分给结束了,然后接触了注解的内容。开始下一阶段的内容学习。fighting!!!

9530
来自专栏python语言学习

html常用标签及属性,常用英语单词

24830
来自专栏Python无止境

聊聊 Python 的单元测试框架(一):unittest

说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest[1]。的确,作为 Python 的标准库,它很优秀...

7820
来自专栏python语言学习

自定义socket 模拟B/S服务端

这是我们用socket模拟,基于BS框架下的 server端与browser端的交互,对于真实开发中的python web程序来说, 一般会分为两部分:服务器程...

6720
来自专栏python语言学习

Django框架简介,wsgiref 与 jinja2 模块

6010
来自专栏数据森麟

用可视化地图讲照片的故事(Python+Leaflet)

手机和数码相机拍的照片里除了我们能看到的RGB像元数据,还包含了拍摄时间、图像分辨率、感光值、GPS坐标等属性,记录在Exif(Exchangeable ima...

11220
来自专栏Java小白成长之路

第5次文章:关于IO流的基本操作

春节假期就要结束啦,很多小伙伴儿明天就开始上班了,祝各位小伙伴儿新的一年工作顺心,万事顺利哟!

8630
来自专栏Creator星球游戏开发社区

Cocos Creator 国旗头像生成器,源码奉上!

要获取手机相册图片,需要使用浏览器 input 标签提供的能力,在桌面浏览器上则是浏览文件目录选择图片。

12110

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励