Selenium系列教程 - 文件上传

这篇具有很好参考价值的文章主要介绍了Selenium系列教程 - 文件上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

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

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

from selenium import webdriver
import time

driver = 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="文件上传"
   EndIf

   if WinWait($title,"",4) Then           ;等待弹出出现,最大等待时间是4秒
	  WinActivate($title)                 ;找到弹出窗口之后,激活当前窗口
	  ControlSetText($title,"","Edit1",$uploadfile)   ;把文件路径放入输入框,此”Edit1“是用FinderTool获取到的
	  Sleep(1000)
	  ControlClick($title,"","Button1")               ;点击保存或者打开或者上传按钮,此“Button1”使用FinderTool获取到的
   Else
	  Return False
   EndIf
EndFunc

  1. 将上面的代码编译为exe文件,以供代码调用。
    Selenium系列教程 - 文件上传
  2. 通过python代码调用编译的exe文件处理上传弹窗,使用什么浏览器就传什么参数。
import os
import time
from selenium import webdriver

driver = 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系列教程 - 文件上传
可见,多文件上传并没有那么复杂,也很简单,唯一的区别就是输入的参数不同而已。

Selenium系列教程 - 文件上传


Selenium系列教程 - 文件上传文章来源地址https://www.toymoban.com/news/detail-401201.html

到了这里,关于Selenium系列教程 - 文件上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 京东VC后台自动批量上传主图 大聪明自动传主图 c# selenium网页自动化传图

    这里介绍干什么用 减轻电商设计日常重复传主图工作。 我任职的公司每次手动传主图150个sku,大概需要一个半小时。 碰到节假日放假人在家中,也免不了这个事情。 这事实在有点烦人,遂百度学习了c# 和 selenium 制作了这个小传图软件,解放双手,让电脑自己传主图。 这里

    2024年02月01日
    浏览(35)
  • 自动化测试系列-Selenium三种等待详解

    第一种也是最简单粗暴的一种办法就是强制等待sleep(time),强制让程序等time秒时间,不管程序能不能跟上速度,还是已经提前到了,都必须等time时长。 如下代码案例所示: 这种叫强制等待,不管你浏览器是否加载完了,程序都得等待5秒,5秒一到,继续执行下面的代码,作为

    2024年04月10日
    浏览(58)
  • web自动化系列selenium模拟按键操作

    一、按键操作 通过对监听键盘输入的元素发送键盘按钮指令 常用键盘按键 代码演示

    2024年02月06日
    浏览(35)
  • 自动化测试工具airtest之上传文件或图片(web自动化上传图片)

    web自动化测试图片上传的方法: 第一种为当具有input标签时,如: input type=\\\"file\\\" name=\\\"file\\\" multiple=\\\"multiple\\\" 这类可以通过selenium中的send_keys()上传 直接实现: driver.find_element_by_css_selector(\\\"[type=\\\'file\\\']\\\").send_keys(r\\\"文件地址\\\")  第二种为当不是input标签时,将不能使用上述方法我们可以

    2024年02月06日
    浏览(37)
  • 接口自动化测试——文件上传/下载

    我们在做接口自动化测试的时候,经常会碰到 文件上传接口 和 文件下载接口 。 那么,文件接口跟普通接口有什么区别呢?又该如何实现呢? 〇、前言 文件上传/下载接口 与 普通接口 类似,但是有细微的区别。 如果需要发送文件到服务器,例如:上传文档、图片、视频等

    2024年02月09日
    浏览(35)
  • web自动化测试系列-selenium的安装和运行(一)

    目录 web自动化系列之如何安装selenium 1.web自动化中的三大亮点技术 2.web自动化能解决什么问题 ? 3.为什么是selenium ? 4.selenium特点 5.selenium安装 6.下载浏览器及驱动 7.测试代码 web自动化 ,一个老生常谈的话题 ,很多人的自动化之路就是从它开始 。它学起来简单 ,但做起来又

    2024年04月25日
    浏览(25)
  • web自动化测试系列之selenium的安装和运行(一)

    web自动化 ,一个老生常谈的话题 ,很多人的自动化之路就是从它开始 。它学起来简单 ,但做起来又比较难以驾驭 ;它的执行效率慢 、但又是最接近于用户的操作场景 ; 接下来本人计划写一个关于web自动化系列 ,打算从零基础开始写 ,直到写完整个进阶部分,进阶部分也

    2024年04月17日
    浏览(26)
  • 接口自动化测试:文件上传/下载(最详细)

    我们在做接口自动化测试的时候,经常会碰到文件上传接口和文件下载接口。那么,文件接口跟普通接口有什么区别呢?又该如何实现呢? 文件上传/下载接口与普通接口类似,但是有细微的区别。 如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二

    2024年02月07日
    浏览(34)
  • 8.测试教程-自动化测试selenium-3

    大家好,我是晓星航。今天为大家带来的是 自动化测试selenium第三节 相关的讲解!😀 unittest 是python 的单元测试框架,它主要有以下作用: **提供用例组织与执行:**当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到 成百上千条时,大量的测试用

    2024年03月23日
    浏览(28)
  • Python+Selenium自动化测试详细教程

       Python Selenium是Selenium WebDriver的Python语言封装,为Python开发者提供了一个方便易用的自动化测试库。它支持多种浏览器(如Chrome、Firefox、Edge等)以及多个操作系统,可以模拟用户在浏览器中的各种行为,包括打开网页、查找元素、输入文本、点击链接、提交表单、上传文

    2023年04月18日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包