Selenium 2自动化测试实战18(上传文件)
一、上传文件
上传文件是比较常见的web功能之一,但WebDriver没有提供专门用于上传的方法。
一般web页面的上传功能的操作需要单击“上传”按钮后打开本地的Window窗口,从窗口选择本地文件进行上传。而WebDriver是无法操作Windows控件的,所以,对于web页面的上传功能实现一般由以下两种方式。
(1)普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器。
(2)插件上传:一般是指基于Flash、JavaScript或Ajax等技术所实现的上传功能。
1. send_keys实现上传
对于input标签实现的上传功能,可以将其看做是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。
<html>
<head>
<meta http-equiv="content-type" content=" text/html; charset=utf-8"/>
<title>upload_file</title>
<link href= "http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div class="row-fluid">
<div class="span6 well">
<h3>upload file</h3>
<input type="file" name="file"/>
</div>
</div>
</body>
<script
src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js" ></script> </html>
通过浏览器打开,效果如下图所示

#upfile.py
#coding:utf-8
from selenium import webdriver
import os,time driver=webdriver.Chrome()
file_path='file:///'+os.path.abspath("upfile.html")
driver.get(file_path) #定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys("F:\\request.txt")
time.sleep(2) driver.quit()
通过这种方法上传,就避免了操作Windows控件的步骤。如果能找到上传的input标签,那么基本上就可以通过send_keys()方法向其输入一个文件地址来实现上传。
2. AutoIt实现上传
AutoIt目前最新版本是v3,被用来进行Windows GUI的自动化测试。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。
官方网站:https://www.autoitscript.com/site/
(1)AutoIt Windows Info:用于识别Windows控件信息
(2)Compile Script to.exe:用于将AutoIt生成exe执行文件
(3)Run Script:用于执行AutoIt脚本
(4)SciTE Script Editor:用于编写AutoIt脚本
下面以操作upload.html上传弹出的窗口为例,讲解AutoIt上传过程。
1. (下载的是zip)解压之后,进入到install文件夹下面,打开Au3Info_x64.exe,如下图所示

2. 用鼠标单击Finder Tool,然后拖到需要定位的输入框中,会有一个小黑框标记,如下图所示

3. 然后定位到“打开”按钮,如下图所示

4. 从而,可以通过AutoIt Windows Info获得以下信息。
(1)窗口的title为“打开”,标题的class为“#32770”;
(2)“文件名”选择框的class为“Edit”,instance为“1”,所以classnameNN为“Edit1”。
(3)“打开”按钮的class为“Button”,instance为“1”,所以classnameNN为“Button1”。
5. 因此打开SCITE scipt Editor编辑器,编写AutoIt脚本。
#upfile.au3
;ControlFocus("title","text",controlID) Edit1=Edit instance 1
ControlFocus("打开","","Edit1") ;wait 10 seconds for the Upload window to appear
WinWait("[CLASS:#32770]","",10) ;set the File name text on the Edit fieled
ControlSetText("打开","","Edit1","F:\study\Jenkins.docx")
Sleep(2000) ;Click on the open button
ControlClick("打开","","Button1");
ControlFocus()方法用于识别Windows窗口。WinWait()方法设置10秒钟用于等待窗口的显示。ControlSetText()方法用于想“文件名”输入框内输入本地上传文件的路径。这里的Sleep()方法与Python中time模块提供的Sleep()方法用法一样,不过它是以毫秒为单位,Sleep(2000)表示固定休眠2000毫秒。ControlClick()用于单击上传窗口中的“打开”按钮。
AutoIt脚本已经写好了,可以通过菜单栏“Tools”--“Go”(或键盘F5)来运行脚本。
注意:在运行时文件上传窗口应处于打开状态。
6. 脚本运行正常,将其保存为upfile.au3文件,这里保存的脚本可以通过Run Script工具将其打开运行,但是希望这个脚本被python程序调用,那么就需要将其生成为exe程序。打开Compile Script to.exe工具,将其生成为exe可执行文件,如下图所示。

7. 单击“Browse”按钮,选择upfile.au3文件,单击“Convert”按钮将其生成为upfile.exe程序。
8. 接下来通过自动化测试脚本调用upfile.exe程序,实现上传。
#upfile.py
#coding:utf-8
from selenium import webdriver
import os,time driver=webdriver.Chrome() #打开上传功能页面
file_path='file:///'+os.path.abspath("upfile.html")
driver.get(file_path) #单击打开上传窗口
driver.find_element_by_name("file").click()
#调用upfile.exe上传程序
time.sleep(2)
os.system("F:\\study\webdriverAPI\Demo1\upfile.exe")
time.sleep(5) driver.quit()
通过system()方法可以调用并执行upfile.exe程序。但是不太推荐这种解决方案,因为通过python调用的exe程序并不在python的可控范围内。换句话说,exe执行多长时间,执行是否出错,python程序都无法得知。
Selenium 2自动化测试实战18(上传文件)的更多相关文章
- Selenium+java - 借助autolt完成上传文件操作
写在前面: 上传文件是每个自动化测试同学会遇到,而且可以说是面试必考的问题,标准控件我们一般用sendkeys()就能完成上传,但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了, ...
- selenium测试(Java)--上传文件(十五)
1. 当页面中是通过input标签实现上传功能时,可以使用selenium来上传功能. 如下: package com.test.upload; import java.io.File; import ...
- Python+Selenium学习笔记10 - send_keys上传文件
在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...
- Selenium+java - 通过Robot对象上传文件
思路: 1.将文件路径复制到剪切板 2.用robot对象模拟键盘操作即可 复制文件代码: public void setClipboardData(String data) { StringSelec ...
- Postman系列三:Postman中post接口实战(上传文件、json请求)
一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低 ...
- Selenium 2自动化测试实战19(下载文件)
一.下载文件 webDriver允许设置默认的文件下载路径,也就是说,文件会自动下载并且存放到设置的目录中.下面以火狐浏览器为例,执行文件的下载. #downfile.py # -*- coding: ...
- 《selenium2 python 自动化测试实战》(13)——上传文件
看代码: # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefo ...
- 《手把手教你》系列技巧篇(五十三)-java+ selenium自动化测试-上传文件-上篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
随机推荐
- poj 1007 DNA sorting (qsort)
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 95209 Accepted: 38311 Des ...
- 模拟赛小结:2019-2020 ICPC, Asia Jakarta Regional Contest
比赛链接:传送门 离金最近的一次?,lh大佬carry场. Problem A. Copying Homework 00:17(+) Solved by Dancepted 签到,读题有点慢了.而且配 ...
- 为了保护dll这么做吗?
生成dll时候 附带生成的lib文件
- k8sReplicaSet控制器
一.ReplicaSet概述 简称RS,是pod控制器类型的一种实现,用于确保由其管控的pod对象副本数在任一时刻都能精确满足期望的数量.ReplicaSet控制器资源启动后会查找集群中匹配其标签选择 ...
- 常见的 DOCTYPE 声明
HTML 5 <!DOCTYPE html> HTML 4.01 Strict 这个 DTD 包含所有 HTML 元素和属性,但不包括表象或过时的元素(如 font ).框架集是不允许的. ...
- PHP入门(五)
一.超级全局变量 超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们 ...
- yum provides 反查询
yum provides 可以反查询到 你要使用的命令包含 在哪个包里 然后使用yum install 即可安装: [root@git02 ~]# yum provides */nslookupLo ...
- three months timestamp
1.有效期三个月 package com.hengqin.life.idps; import java.text.SimpleDateFormat; import java.util.Calendar ...
- tp5商城
记录几个要点: 用户使用firbug伪造表单字段,比如伪造表单id字段,如何防止,tp5中好像没有. xss攻击:使用htmlspecialchars() 会把img.p.等等合法标签过滤掉,想要有选 ...
- JavaWeb_(SSH论坛)_五、帖子模块
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 回复帖子 分析回 ...