Selenium上传文件

2019年1月3日 4.56k 次阅读 8 条评论 3 人点赞

写在前面

日常的UI自动化测试过程中,经常会遇到文件上传的业务操作。对于通过input标签实现的上传功能, 我们可以直接利用Selenium提供的方法send_keys() 实现文件上传。这种文件上传实现方式是将本地文件的路径作为一个值放在input 标签中,然后通过form表单将这个值提交给服务器。 本文将针对input标签示范自动化执行文件上传功能。

代码实现方式

为了更直观的演示处理效果,制作了一个上传文件的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 time

driver = 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 time

driver = 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第三方库。

温馨提示:以下内容回复可见。

风里云里,我在这里等你!

文章评论(8)

  • 求求

    非input类型的上传文件,弹出的window系统选择框,录制回放时在没有手动点击的情况下,如何让这个弹框关闭掉?

    2019年9月27日
    • 求求

      尝试在文件上传关键字中加了ESCAPE键盘操作,可以关掉弹框了。。。

      2019年9月30日
  • 哒哒~~

    回复可见~~

    2019年4月27日
  • 11

    自动化测试学习交流群:670250199

    2019年3月28日
  • 王土豆

    haha回复可见

    2019年1月17日
  • 无名

    回复可见,隐藏内容挺好呀。 :cool:

    2019年1月3日