selenium2之文件上传

我们在使用selenium做web自动化测试的时候也许会碰到需要上传文件或者图片的需求。那么下面给大家介绍一下,selenium是怎么实现文件上传和哪些情况不能直接上传。

一、上传控件标签为input

请看以百度首页的文件上传为例:

点击小相机后弹出文件上传窗口

我们通过源码可以看出,这个"本地上传图片"的控件标签是input

这时候我们可以直接使用seleniumAPI进行文件上传,代码实现如下:

#coding=utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("https://www.baidu.com/")
#点击百度首页小相机按钮
browser.find_element_by_class_name("soutu-btn").click()
#通过send_keys发送文件的绝对路径,文件在我本机的C盘目录下
browser.find_element_by_class_name("upload-pic").send_keys(r"C:\test.png")
#我们这里已经实现了文件上传,至于百度返回404不用管它

二、上传控件标签为非input

当控件标签非input时,这种情况我们不能直接使用上面的方法了,我们可以借助第三方工具:Autolt

AutoIt

AutoIt v3是一种免费BASIC-like脚本语言为Windows的GUI自动化设计和通用脚本。它使用的组合模拟键盘,鼠标移动和窗口/控制操纵,以自动化任务的方式不可能或可靠的与其他语言(如VBScript和SendKeys)。

现在已经出到v3.3版本,更多介绍可以到下面的官网查看。

下载地址:https://www.autoitscript.com/site/autoit/downloads/

图2.1

通过图2.1的导引安装完后可以看到如下组件,图2.2

图2.2

这几个组件的功能介绍:

AutoIt Windows Info   用于帮助我们识Windows控件信息。

Compile Script to.exe 用于将AutoIt生成 exe 执行文件。

Run Script            用于执行AutoIt脚本。

SciTE Script Editor   用于编写AutoIt脚本。

1.通过AutoIt Windows Info 获取我们要操作的对象,以火狐浏览器为例,因为每个浏览器弹出来的窗口名字可能不一样。如图2.3 和 图2.4

图2.3

图2.4

通过上面两个图AutoIt Windows Info中Control页面 获得以下信息。

窗口的title为“文件上传”,标题的Class为“#32770”。

文件名输入框的class 为“Edit”,Instance为“1” ,ClassnameNN为“Edit1”。

打开按钮的class 为“Button”,Instance为“1” ,ClassnameNN为“Button1”。

2.根据AutoIt Windows Info 所识别到的控件信息,接下来我们打开SciTE Script Editor编辑器,编写脚本。

;ControlFocus()方法用于识别Window窗口
ControlFocus("文件上传", "","Edit1")  

; WinWait()设置1秒钟用于等待窗口的显示
  WinWait("[CLASS:#32770]","",1)  

; ControlSetText()用于向“文件名”输入框内输入本地文件的路径,如果是在桌面第三个参数直接写文件名
  ControlSetText("文件上传", "", "Edit1", "C:\selenium.png")
  Sleep(1000)  

; ControlClick()用于点击上传窗口中的“打开”按钮  

  ControlClick("文件上传", "","Button1");  

3.写好脚本之后我们可以在浏览器已经大家文件上传窗口的情况按F5运行,看看脚本效果,如下图

图2.5

4.脚本运行正常,我们将它保存为upfile.au3文件,这里保存的脚本可以通过Run Script 工具将其打开运行,但我们的目的是希望这个脚本被Python程序调用,那么就需要将其生成exe程序。打开Compile Script to.exe工具,将其生成为exe可执行文件

5.生成了upfile.exe后,我们把它放在C盘根目录,我们再用python脚本实现借用它来上传文件:

#coding=utf-8
from selenium import webdriver
import os
browser = webdriver.Firefox()
browser.get("https://www.baidu.com/")
#点击百度首页小相机按钮
browser.find_element_by_class_name("soutu-btn").click()
#打开文件上传窗口
browser.find_element_by_class_name("upload-pic").click()
#调用upfile.exe实现文件上传
os.system(r"C:\upfile.exe")

用过os.system()方法可以进行调用,模拟在cmd里面输入:C:\upfile.exe

时间: 2024-10-21 11:37:51

selenium2之文件上传的相关文章

Selenium2学习-039-WebUI自动化实战实例-文件上传下载

通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a或其他方式结合实现). 非input标签类因其有各式各样的实现方式,需要考虑具体的场景,因而此文对此类文件上传不做讲解,以input标签实现文件上传的方式进行讲解,请知悉! 解决方案有如下三种: 1.定位元素直接通过sendkeys修改input标签的文件链接: 2.通过第三方控件(AutoIt)编

selenium2 python自动化测试之利用AutoIt工具实现本地文件上传

本人在学习基于python语言的selenium2自动测试方法的过程中,发现涉及本地上传文件的测试时,selenium2在定位本地window窗口的对象(元素)上能力有限.当上传按钮使用的是input标签时,可以使用send_keys()方法添加本地文件路径轻松实现,但有的上传控件使用的不是input元素,这个时候send_keys()方法是行不通的.经过网上搜索加上自己实践,总结出一个非常简单而有效的方法--借用AutoIt工具实现自动化本地上传文件,在此与大家分享. 1.AutoIt介绍及安

简单利用filetype进行文件上传

对于文件上传大家都很熟悉了,毕竟文件上传是获取webshell的一个重要方式之一,理论性的东西参考我的另一篇汇总文章<浅谈文件解析及上传漏洞>,这里主要是实战补充一下理论内容--filetype漏洞! filetype漏洞主要是针对content-type字段,主要有两种利用方式:    1.先上传一个图片,然后将content-type:image/jpeg改为content-type:text/asp,然后对filename进行00截断,将图片内容替换为一句话木马. 2.直接使用burp抓

jquery-ajax实现文件上传异常处理web.multipart.MultipartException

异常如下: org.springframework.web.multipart.MultipartException: The current request is not a multipart request 原因分析: 可能原因1: form表单中没有添加 enctype="multipart/form-data" 属性 可能原因2: 请求方式必须为post,如果不是则必定出错 可能原因3: 请求的contentType不是"multipart/form-data&qu

SpringMVC中文件上传的客户端验证

SpringMVC中文件上传的客户端验证 客户端验证主要思想:在jsp页面中利用javascript进行对文件的判断,完成验证后允许上传 验证步骤:1.文件名称 2.获取文件的后缀名称 3.判断哪些文件类型允许上传 4.判断文件大小 5.满足条件后跳转后台实现上传 前台界面(验证上传文件是否格式满足要求): <body> <h2>文件上传</h2> <form action="upload01" method="post" 

文件上传

1.上传的步骤: a.导入SmartUpload.jar b.创建一个上传的类的对象 c.初始化 d.上传至服务器 e.保存 表单提交时需要指定enctype="multipart/form-data"(多数据类型提交) http://www.atguigu.com/opensource.shtml#3(包下载地址) package com.zuxia.servlet; import java.io.IOException;import java.io.PrintWriter; imp

python+selenium文件上传

1.input标签类元素文件上传 先定位到文件上传元素id,再使用方法send_keys(文件路径) 2.非input标签 备注:非input标签的文件上传,就不适用于此方法了,需要借助autoit工具或者SendKeys第三方库.

任意文件上传漏洞

漏洞产生原因:①代码层:开发者在编写代码的时候不严谨,未对文件上传的合法性进行检验: ②应用层:web容器漏洞,cgi,配置不当: 有网站到服务器上传文件的常用检测手段:①js(一般是检测文件后缀名)-可修改本地js代码或通过浏览器自带功能"No-script"进行绕过: ②服务器端MIME检测-对contenttype的额检测:   ③服务端目录路径检测,一般是检测目录路径是否合理,漏洞原因是对目录路径的检测不够严谨,可以用0x00截断进行攻击 ④服务器端文件拓展名检测绕过,分为白名

day20 文件上传

引入至easymall今天好累啊,就不一一拓展了 1. 文件上传步骤 实现web开发中的文件上传功能只需要两个步骤: (1)提供一个带有文件上传项的表单. (2)在servlet中读取处理上传的文件,保存到服务器中. 2. 文件上传实现 3.上传文件的监听 4.上传文件注意问题