上传文件
input标签
sand_keys() :实现上传(上传为input标签)
sand_keys()括号里输入本地文件路径的方式实现文件上传功能
非input标签
非input标签,上传方法要借助Autolt工具或者SendKeys第三方库
测试html文件
<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>
Autolt
下载安装autolt
下载Autolt官方网站:https://www.autoitscript.com/site/
AutoIT Windows Info : 用于识别window空间信息
Compile Script to .exe : 用于将AutoIT生成exe执行文件
Run Script : 用于执行AutoIT脚本
SciTE Script Editor : 用于编写AutoIT脚本
元素定位
1.首先打开 AutoIt Windows Info 工具,鼠标点击 Finder Tool,鼠标将变成一个小风扇形状的图标,按住鼠标左键拖动到需要识别的控件上。
窗口的Title为“文件上传”,标题的Class为“#32770”。
文件名输入框的Class 为“Edit”,Instance为“1” ,所以ClassnameNN为“Edit1”。
打开按钮的Class 为“Button”,Instance为“1” ,所以ClassnameNN为“Button1”。
注:不通浏览器下对应参数值不同,必须在特定浏览器下执行特定浏览器的参数才能达到特定的效果
脚本编写
1.根据 AutoIt Windows Info 所识别到的控件信息打开 SciTE Script Editor 编辑器,编写脚本。
ControlFocus("文件上传", "","Edit1")
WinWait("[CLASS:#32770]","",10)
ControlSetText("文件上传", "", "Edit1", "C:\Users\yueli\Desktop\b.html")
Sleep(2000)
ControlClick("文件上传", "","Button1");
ControlFocus()方法用于识别 Window 窗口。
WinWait()设置 10 秒钟用于等待窗口的显示,其用法与
WebDriver 所提供的 implicitly_wait()类似。
ControlSetText()用于向“文件名”输入框内输入本地文件的路径。
Sleep()方法与 Python 中 time 模块提供的 Sleep()方法用法一样,不过它是以毫秒为单位,Sleep(2000)表示固定休眠 2000 毫秒。
ControlClick()用于点击上传窗口中的“打开”按钮。
2.AutoIt 的脚本已经写好了保存一下,可以通过菜单栏“Tools”-->“Go” (或按键盘 F5)来运行一个脚本吧!注意在运行时上传窗口当前处于打开状态。
脚本运行正常,将其保存为 xxx.au3,这里保存的脚本可以通过 Run Script 工具将其打开运行
生成exe文件
我们的目的是希望这个脚本被 Python 程序调用,那么就需要将其生成 exe 程序。打开 Compile Script to.exe工具,将au3文件生成为 exe 可执行文件。
下面就是通过自动化测试脚本调用 file.exe 程序实现上传了。
参数化
因为打包的exe文件把文件路径给写死了,每次只能上传固定地址的文件,我们实际测试时候希望传不同文件地址,这样就需要参数化文件路径了。想要参数化传入的参数,可以通过autoit的命令行参数
在脚本中,可用以下变量获取命令行参数
$CmdLine[0] :获取的是命令行参数的总数,
$CmdLine[1]~$CmdLine[63] :获取的是命令行参数第1到第63位,这个方式最多只能获取63个参数,不过正常情况下是足够用的
$CmdLineRaw 获取的是未拆分的所有参数,是一个长字符串,这种情况下不局限与63个参数
接上面实例继续,将文件地址改为参数化,代码如下
ControlFocus("文件上传", "","Edit1")
WinWait("[CLASS:#32770]","",10)
ControlSetText("文件上传", "", "Edit1", $CmdLine[1])
Sleep(2000)
ControlClick("文件上传", "","Button1");
生成exe文件后继续
下面就是通过自动化测试脚本调用.exe 程序实现上传了。
os.system() : 传入一个字符串参数,中间用空格隔开,前面是exe文件地址 后面是要上传的文件地址
SendKeys
首先要先安装SendKeys
1.如果安装pip,直接pip install SendKeys
2.安装包下载地址:https://pypi.python.org/pypi/SendKeys,
直接下载zip安装包,进入解压后的目录,地址栏输入cmd,进入dos在命令行,输入python setup.py install回车,自动安装
如果安装过程中提示Get it from http://aka.ms/vcpython27 如下图,直接按照这个地址下载文件,傻瓜式的安装就可以了