主要内容

  • 一、通过send_keys方法(该方法只适用于input标签)
  • 二、通过AutoIt来处理上传文件(适用所有)
  • 三、其他方法
  • 四、多文件上传

在Web UI自动化测试中可能会遇到文件上传的场景,针对该场景我们要区分上传按钮的种类,大体上可以分为两种,一种是input框 <input type="file">,另外一种就比较复杂,通过js等实现。

一、通过send_keys方法(该方法只适用于input标签)

查看上传按钮的元素标签为input标签,调用send_keys方法传入文件路径即可,无需模拟弹出windows选择框且选择文件的过程。通过该方法可以简单、高效的实现选择文件的目的,避免将处理思路卡在如何选择文件这个问题上。

代码:

from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('http://sahitest.com/demo/php/fileUpload.htm')
driver.implicitly_wait(10)driver.find_element_by_css_selector('form>#file').send_keys(r'C:\Users\Administrator\Desktop\1.txt')
driver.find_element_by_css_selector('form>input[type="submit"]').click()time.sleep(3)
driver.quit()

二、通过AutoIt来处理上传文件(适用所有)

对于那些不是input框实现的上传怎么办,这种上传千奇百怪,有用a标签的,有用div的,有用button的,有用object的,我们没有办法通过直接在网页上处理掉这些上传,唯一的办法就是打开windows弹框,去处理弹框。

问题又来了,windows弹框涉及的层面已经不是selenium能解决的了,怎么办?很简单,使用AutoIt去处理呗。

关于AutoIt的使用方法我在另一篇博文中讲,请参见Selenium系列教程 - AutoIt命令行参数 。这里不再赘述。

  1. 由于不同的浏览器,获取到的弹窗标题不一样,所以要区分开,通过传参的方式判定,废话少说,直接上AutoIt的代码:
;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 $browser="ie" Then                  ; 代表IE浏览器$title="选择要加载的文件"ElseIf $browser="chrome" Then          ; 代表谷歌浏览器$title="打开"ElseIf $browser="firefox" Then         ; 代表火狐浏览器$title="文件上传"EndIfif WinWait($title,"",4) Then           ;等待弹出出现,最大等待时间是4秒WinActivate($title)                 ;找到弹出窗口之后,激活当前窗口ControlSetText($title,"","Edit1",$uploadfile)   ;把文件路径放入输入框,此”Edit1“是用FinderTool获取到的Sleep(1000)ControlClick($title,"","Button1")               ;点击保存或者打开或者上传按钮,此“Button1”使用FinderTool获取到的ElseReturn FalseEndIf
EndFunc
  1. 将上面的代码编译为exe文件,以供代码调用。
  2. 通过python代码调用编译的exe文件处理上传弹窗,使用什么浏览器就传什么参数。
import os
import time
from selenium import webdriverdriver = webdriver.Chrome()
driver.get('http://sahitest.com/demo/php/fileUpload.htm')
# 点击“选择文件”按钮
driver.find_element_by_css_selector('form>#file').click()
# 调用exe上传文件
command = "C:\\upload.exe" + " " + "chrome" + " " + " C:\\Users\\Administrator\\Desktop\\1.txt"
os.system(command)
time.sleep(3)
# 点击“Submit Single”按钮
driver.find_element_by_css_selector('form>input[type="submit"]').click()time.sleep(3)
driver.quit()

由于AutoIt的代码中已经加了等待弹窗出现的时间,所以python中未加等待时间,必要的时候需要加时间等在,来降低脚本的出错率。

三、其他方法

1、pywin32库,识别对话框句柄,进而操作
2、SendKeys库,不稳定,不推荐
3、keybd_event,跟2类似,不过是模拟按键,ctrl+a,ctrl+c, ctrl+v…

这些方法就不介绍了,如果想要研究,自己百度去学习吧。

四、多文件上传

接下来还有一种情况值得我们考虑,那就是多文件上传。如何上传多个文件,当然我们还是往输入框里输入文件路径,所以唯一要搞清楚的就是多文件上传时,文件路径是怎么写的。

多文件上传就是在文件路径框里用引号括起单个路径,然后用空格隔开多个路径,例如:
“D:\a.txt” “D:\b.txt”
但需要注意的是:只有多个文件在同一路径下,才能这样用,否则是会失败的(下面的写法是不可以的):
“C:\a.txt” “D:\b.txt”


可见,多文件上传并没有那么复杂,也很简单,唯一的区别就是输入的参数不同而已。


Selenium系列教程 - 文件上传相关推荐

  1. 基于python的selenium两种文件上传方式

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径. 方法二.非input标签上传 这种上传方式需要借助第三方工具,主要有以下三种情 ...

  2. python 头条 上传_Python+selenium自动化之文件上传

    邮箱的主要功能就是邮件消息的收发阅读,之前的文章写了邮件的查收和编写,本篇介绍邮件的附件上传.还是以腾讯企业邮箱为例,进行实际案例操作. 文件上传的实现大体分为两种,一种是input标签,一种非inp ...

  3. oracle apex接口文件,Oracle Apex 实用笔记系列 2 - 文件上传管理

    1. 页面设计 页面A有若干region, 其中一个region用于文件列表管理(包括显示,下载,删除),如图A.在页面A有一button,点击它会调用页面B,页面B负责文件上传,如图B. 图A 图B ...

  4. SpringBoot文件上传异常之temporary upload location not valid

    原文: 一灰灰Blog之Spring系列教程文件上传异常原理分析 SpringBoot搭建的应用,一直工作得好好的,突然发现上传文件失败,提示org.springframework.web.multi ...

  5. Selenium自动化测试-文件上传

    ------·今天距2021年还有321天·------ 这是ITester软件测试小栈第96次推文 进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等. 在selen ...

  6. selenium+python自动化测试系列(二):AutoIt工具实现本地文件上传

    AutoIt使用简单说明 AutoIt的安装这里就不在啰嗦,可以参考AutoIt安装或者自行搜索解决. 第一步:定位上传文件路径的文本框 这里举例说明,如何定位?如图 这里我们看到上传文件的类型是bu ...

  7. 【Python爬虫系列教程 5-100】 Requests高级用法:文件上传,如何设置SSL证书验证、处理超时设置 、身份认证和代理设置

    文章目录 高级用法 文件上传 Cookies Session维持 SSL证书验证 超时设置 身份认证 代理设置 Prepared Request 高级用法 上篇,我们了解了requests的基本用法, ...

  8. SpringBoot 系列教程(九十九):SpringBoot整合阿里云OSS实现文件上传,下载,删除功能

    一.前言 之所以写这篇文章呢? 是因为最近在做文件上传时遇到一个问题,就是我们在以前使用传统Spring+SpringMVC+Mybatis框架开发Web项目的时候,都是将项目打包生成一个War包,然 ...

  9. Spring Boot 2.x基础教程:实现文件上传

    文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作. ...

最新文章

  1. OSChina 周六乱弹 —— 胖点其实挺好
  2. 如何从零起步搭建一个分布式对象存储的架构
  3. 关于利用python进行验证码识别的一些想法
  4. 网络钓鱼大讲堂 Part4 | 网络钓鱼攻击战术
  5. 参考地、保护地、大地的概念
  6. 【运营干货】三分钟,读懂互联网运营
  7. [Java] super关键字:引用父类成员
  8. 源码解读_Go Map源码解读之Map迭代
  9. leetcode596. 超过5名学生的课(SQL)
  10. python中bs4.element.tag_python – BeautifulSoup标签是类型bs4.element.NavigableString和bs4.element.Tag...
  11. HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException)
  12. Tcl Tutorial 笔记4 ·if
  13. 【优化算法】可变步长LMS算法(VSS-LMS)【含Matlab源码 317期】
  14. 计算机信息技术和网络技术的区别,信息技术计算机技术网络技术通信技术的区别与联系...
  15. 隐藏通信隧道技术:内网穿透工具 nps
  16. 一起谈.NET技术,走向ASP.NET架构设计——第二章:设计/ 测试/代码
  17. html中设置字体字号,html中设置字体大小的方法
  18. 十八.国民技术MCU开发之UART模块LIN模式主从通信交互案例
  19. 若依对接企业微信JS-DK
  20. circos配置文件解析

热门文章

  1. 曾轶可机场这事儿,她的超级粉丝罗永浩怎么看?
  2. 小米路由器青春版中继模式后登陆
  3. 原生Deta(日期)的各种格式以及其转换方法
  4. ScriptManager 内部js事件失效问题
  5. 看完这篇文章知道有什么英语录音翻译成中文的软件
  6. 讲完社区故事,网易云音乐这次要靠AI上位?
  7. Microsoft Office 2019
  8. IOT物联网技术架构_物联网平台架构设计
  9. win10 uwp 参考
  10. addons软件下载_addons制作器最新版