一、上传文件

上传文件是比较常见的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(上传文件)的更多相关文章

  1. Selenium+java - 借助autolt完成上传文件操作

    写在前面: 上传文件是每个自动化测试同学会遇到,而且可以说是面试必考的问题,标准控件我们一般用sendkeys()就能完成上传,但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了, ...

  2. selenium测试(Java)--上传文件(十五)

    1. 当页面中是通过input标签实现上传功能时,可以使用selenium来上传功能. 如下: package com.test.upload; import java.io.File; import ...

  3. Python+Selenium学习笔记10 - send_keys上传文件

    在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...

  4. Selenium+java - 通过Robot对象上传文件

    思路: 1.将文件路径复制到剪切板 2.用robot对象模拟键盘操作即可 复制文件代码: public void setClipboardData(String data) { StringSelec ...

  5. Postman系列三:Postman中post接口实战(上传文件、json请求)

    一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低 ...

  6. Selenium 2自动化测试实战19(下载文件)

    一.下载文件 webDriver允许设置默认的文件下载路径,也就是说,文件会自动下载并且存放到设置的目录中.下面以火狐浏览器为例,执行文件的下载. #downfile.py # -*- coding: ...

  7. 《selenium2 python 自动化测试实战》(13)——上传文件

    看代码: # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefo ...

  8. 《手把手教你》系列技巧篇(五十三)-java+ selenium自动化测试-上传文件-上篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  9. 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

随机推荐

  1. QT 给工程添加图片

    先打开如图的打开方式 然后我们看到以下的画面,选择下面的 然后我们选择如下:,这里我们要注意我们的图片资源有一定要和QRC资源在同一个文件夹中 之后我们通过在stylesheet里面设置来使用我们添加 ...

  2. 牛客练习赛46 A 华华教奕奕写几何 (简单数学)

    链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  3. LCA-tarjan understand 2

    下面是一个最基础的LCA题目    http://poj.org/problem?id=1330 赤裸裸的 题意 输入cas 后  有cas组数据 输入 n   再输入n-1 条边    之后输入x ...

  4. STL源码阅读-functor与adapter

    为什么要用仿函数 函数指针不灵活,难以与STL其他组件配合使用 Adapter 将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作 STL中 ...

  5. 设置apache服务器的访问证书,支持https访问,windows

    windows下载安装openssl http://slproweb.com/products/Win32OpenSSL.html windows证书的生成 安装成功后命令行执行 1.私钥,生成的文件 ...

  6. 使用maven简单搭建Spring mvc + redis缓存

    注:此文参考并整合了网上的文章 <spring缓存机制>:http://blog.csdn.net/sidongxue2/article/details/30516141 <配置 S ...

  7. 生产环境跑PHP动态程序

    Nginx + PHP5(FastCGI)生产环境跑PHP动态程序可超过“700次请求/秒”   我生产环境下的两台Nginx + PHP5(FastCGI)服务器,跑多个一般复杂的纯PHP动态程序, ...

  8. grunt-contrib-watch 实时监测文件状态

    grunt-contrib-watch:实时监测文件的增删改状态,状态改变时自动执行预定义任务使用watch时,被watch的文件可以分开写,这样可以提高watch的性能,不用每次把没修改的文件也执行 ...

  9. 快速排序c代码

    //快速排序,通过测试 #include "stdio.h" void quickSort(int* data,int len){ ) return; ; ; ]; while(s ...

  10. 【51nod1792】Jabby's segment tree

    题目 线段树是一种经典的数据结构,一颗[1,n]的线段树他的根是[1,n],当一个线段树的结点是[l,r]时,设mid=(l+r)>>1,则这个结点的左儿子右儿子分别是[l,mid],[m ...