web自动化测试图片上传的两种方法:
通过input标签的,如:
<!DOCTYPE html>
<html lang="en">
<head>
<title>filetest!</title>
<metacharset="utf-8">
</head>
<body>
<pstyle="color:blue;text-align:left;font-size:30px;">请上传一个文件:</p>
<formaction="" method="get" id="myform">
<inputtype="file" name="file" accept=""multiple="multiple">
</form>
</body>
</html>
这类可以通过selenium直接实现:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(r"http://192.168.225.137/html5/file.html")
#通过send_keys()上传
driver.find_element_by_css_selector("[type='file']").send_keys("C:\\Users\\Administrator\\Desktop\\html5.txt")
selenium借助autoIt工具实现上传
对于不是input框实现的上传怎么办,这种上传千奇百怪,有用a标签的,有用div的,有用button的,有用object的,我们没有办法通过直接在网页上处理掉这些上传,唯一的办法就是打开OS弹框,去处理弹框。
OS弹框涉及的层面已经不是selenium能解决的了,怎么办?很简单,用OS层面的操作去处理呗,利用autoIT工具可以。
autoIT的介绍
AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。
处理思路
1. 利用AutoIT编写合适的脚本,然后将脚本编译成可执行文件;
2. AutoIT脚本编译成可执行文件后,放到本地的某一个目录下;
3. 需要上传图片时,首先定位到【上传】字样文本,点击此按钮,打开os窗口;
4. 执行编辑后的可执行文件,实现文件上传;
备注:编写脚本和编译,需要借助AutoIT提供的工具,但是脚本编译成可执行文件后,可以直接使用,不再需要安装AutoIT。
前端上传文件实例:
#下面是上传图片的
#打开os窗口
driver.find_element_by_xpath(".//*[@id='uploader-demo']/div/div").click()
#上传经过autoIT编译好的exe文件
os.system(r".\files_exe\mrw_pic.exe")
sleep(2)
AutoIT安装
下载并安装AutoIT,下载链接:https://www.autoitscript.com/site/autoit/
AutoIT安装成功后,可以在开始菜单下看到AutoIT的所有工具,如下图所示:
- AutoIt Windows Info 用于帮助我们识Windows控件信息。
- Compile Script to.exe 用于将AutoIt生成 exe 执行文件。
- Run Script 用于执行AutoIt脚本。
- SciTE Script Editor 用于编写AutoIt脚本。
AutoIt Window Info
打开此工具,利用此工具来识别Windows控件信息,如输入框、按钮等。
1、首先打开AutoIt Windows Info 工具,鼠标点击Finder Tool,按住鼠标左键拖动到需要识别的控件上。
通过识别可知道:
- 窗口的title为“文件上传”,标题的Class为“#32770”。
- 文件名输入框的class 为“Edit”,Instance为“1” ,所以ClassnameNN为“Edit1”。
- 打开按钮的class 为“Button”,Instance为“1” ,所以ClassnameNN为“Button1”。
SciTE Script Editor
根据以上所识别的空间信息,利用此编辑器,利用此软件根据AutoIT的语法编写脚本。
附实现文件上传需要的几个方法:
- ControlFocus ( "窗口标题", "窗口文本", 控件ID) 设置输入焦点到指定窗口的某个控件上
- WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] ) 暂停脚本的执行直至指定窗口存在(出现)为止
- ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" ) 修改指定控件的文本
- Sleep ( 延迟 ) 使脚本暂停指定时间段
- ControlClick ( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]] ) 向指定控件发送鼠标点击命令
- 其中,title即AutoIt Window Info识别出的Title字段,controlID即AutoIt Window Info识别出的Class和Instance的拼接,如上图拼接后的结果应为:Button1
;ControlFocus( "窗口标题", "窗口文本", 控件ID) 设置输入焦点到指定窗口的某个控件上
ControlFocus("打开","","Edit1")
;WinWait( "窗口标题" [, "窗口文本" [, 超时时间]] ) 暂停脚本的执行直至指定窗口存在(出现)为止
WinWait("打开","",10)
;ControlSetText( "窗口标题", "窗口文本", 控件ID, "新文本" ) 修改指定控件的文本
ControlSetText("打开","","Edit1","C:\Users\Administrator\Desktop\工作\测试截图\3.png")
;Sleep( 延迟 ) 使脚本暂停指定时间段,这里是以毫秒为单位的
Sleep(1000)
;ControlClick( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]]) 向指定控件发送鼠标点击命令
ControlClick("打开","","Button1")
AutoIT脚本编写完成后,保存,可以通过菜单栏“Tools”-->“Go” 或F5运行一下脚本。
注意:运行的时候,上传窗口需处于打开状态。
Compile Script to.exe
脚本编辑运行无误后,将其保存。然后打开Complie Script to .exe工具,将保存的脚本编译成exe可执行文件。
通过Python 的os模块的system()方法可以调用exe程序并执行。
了解了上传的实现过程,那么下载也是一样的。