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没有提供 ...
随机推荐
- centso 7 Keepalived 配置脚本
#!/bin/bash #This is keepalived bashshell. #MASTER/BACKUP yum install -y openssl openssl-devel keepa ...
- 2019-2020-1 20199319《Linux内核原理与分析》第六周作业
系统调用的三层机制(下) 给MenuOS增加命令 首先进入LinuxKernel文件夹,删除menu目录,然后git clone克隆一个新版本的menu,新版本的menu中已经添加了time和time ...
- Firefox 的User Agent 将移除 CPU 架构信息
Mozilla 计划从 Firefox 的 User Agent(用户代理)和几个支持的 API 中移除 CPU 架构信息,以减少 Firefox 用户的“数字指纹”.Web 浏览器会自动向用户在应用 ...
- 使用C#表达式树为两个对象的相同属性赋值
//缓存表达式树 private static Dictionary<string, object> objCache = new Dictionary<string, object ...
- LocalDatetime 与 mybatis、json的坑
总所周知,localdatetime是jdk8 推出的关于日期计算非常方便地一个类,一旦开始用上就欲罢不能.但是在使用的时候,坑还是蛮多的. 一.mybatis与LocalDatetime 如果直接将 ...
- 第二章 Vue快速入门-- 18 v-for中key的使用注意事项
注意:如果属性和方法还没定义直接使用的话,就会报 xxx is not defined 导致界面不能正常显示.我看视频教程里老师的可以直接使用,而且界面正常显示,可能是vue版本不同吗?还不清楚 ...
- Java I/O(三)各种Reader和Writer读写器、RandomAccessFile随机访问文件、序列化
2019 01/01 八.Reader和Writer读写器 前面讲的输入输出流的基本单位都是字节,因此可以称为“字节流”,读写器是以字符为基本单位,可以称为“字符流”.它们的使用方法非常相似,因此我考 ...
- C# JSON的序列化与反序列化
需要添加引用:System.ServiceModel.Web 和 System.Runtime.Serialization,然后使用Using: using System.Runtime.Serial ...
- 语法注释格式;格式化输出;input在py2和py3中的区别;数据的基本类型;运算符;
一.Python中的注释 Python的注释是代码的评论,是让代码让人能更加清晰明确.代码的注释可分为单行注释和多行注释,单行注释用“#”,多行注释用三对单引号或者三对双引号来表示. ps:# 单行注 ...
- 使用es6新增Set函数快速数组去重
使用new Set()快速数组去重: let arr = [1, 2, 2, 3, 4, 5, 5, 5, 6] let set = new Set([...arr]) console.log([.. ...