博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium2之文件上传
阅读量:5761 次
发布时间:2019-06-18

本文共 2315 字,大约阅读时间需要 7 分钟。

我们在使用selenium做web自动化测试的时候也许会碰到需要上传文件或者图片的需求。那么下面给大家介绍一下,selenium是怎么实现文件上传和哪些情况不能直接上传。

 

一、上传控件标签为input

请看以百度首页的文件上传为例:

 

 

     点击小相机后弹出文件上传窗口

 

我们通过源码可以看出,这个"本地上传图片"的控件标签是input

 

这时候我们可以直接使用seleniumAPI进行文件上传,代码实现如下:

#coding=utf-8from selenium import webdriverbrowser = webdriver.Firefox()browser.get("https://www.baidu.com/")#点击百度首页小相机按钮browser.find_element_by_class_name("soutu-btn").click()#通过send_keys发送文件的绝对路径,文件在我本机的C盘目录下browser.find_element_by_class_name("upload-pic").send_keys(r"C:\test.png")#我们这里已经实现了文件上传,至于百度返回404不用管它

 

二、上传控件标签为非input

当控件标签非input时,这种情况我们不能直接使用上面的方法了,我们可以借助第三方工具:Autolt

AutoIt

AutoIt v3是一种免费BASIC-like脚本语言为Windows的GUI自动化设计和通用脚本。它使用的组合模拟键盘,鼠标移动和窗口/控制操纵,以自动化任务的方式不可能或可靠的与其他语言(如VBScript和SendKeys)。

现在已经出到v3.3版本,更多介绍可以到下面的官网查看。

下载地址:https://www.autoitscript.com/site/autoit/downloads/

 

                                                                              图2.1 

 

 通过图2.1的导引安装完后可以看到如下组件,图2.2

 

                                     图2.2

 这几个组件的功能介绍:

AutoIt Windows Info   用于帮助我们识Windows控件信息。

Compile Script to.exe 用于将AutoIt生成 exe 执行文件。

Run Script            用于执行AutoIt脚本。

SciTE Script Editor   用于编写AutoIt脚本。

 

 1.通过AutoIt Windows Info 获取我们要操作的对象,以火狐浏览器为例,因为每个浏览器弹出来的窗口名字可能不一样。如图2.3 和 图2.4

                                                                                                                      图2.3

 

  

                                                                                                            图2.4

         

通过上面两个图AutoIt Windows Info中Control页面 获得以下信息。

窗口的title为“文件上传”,标题的Class为“#32770”。

文件名输入框的class 为“Edit”,Instance为“1” ,ClassnameNN为“Edit1”。

打开按钮的class 为“Button”,Instance为“1” ,ClassnameNN为“Button1”。

 

 

 

 2.根据AutoIt Windows Info 所识别到的控件信息,接下来我们打开SciTE Script Editor编辑器,编写脚本。

 

;ControlFocus()方法用于识别Window窗口  ControlFocus("文件上传", "","Edit1")    ; WinWait()设置1秒钟用于等待窗口的显示    WinWait("[CLASS:#32770]","",1)    ; ControlSetText()用于向“文件名”输入框内输入本地文件的路径,如果是在桌面第三个参数直接写文件名    ControlSetText("文件上传", "", "Edit1", "C:\selenium.png")    Sleep(1000)    ; ControlClick()用于点击上传窗口中的“打开”按钮      ControlClick("文件上传", "","Button1");  

 

3.写好脚本之后我们可以在浏览器已经大家文件上传窗口的情况按F5运行,看看脚本效果,如下图

                                                                                     图2.5

 

4.脚本运行正常,我们将它保存为upfile.au3文件,这里保存的脚本可以通过Run Script 工具将其打开运行,但我们的目的是希望这个脚本被Python程序调用,那么就需要将其生成exe程序。打开Compile Script to.exe工具,将其生成为exe可执行文件

 

5.生成了upfile.exe后,我们把它放在C盘根目录,我们再用python脚本实现借用它来上传文件:

#coding=utf-8from selenium import webdriverimport osbrowser = webdriver.Firefox()browser.get("https://www.baidu.com/")#点击百度首页小相机按钮browser.find_element_by_class_name("soutu-btn").click()#打开文件上传窗口browser.find_element_by_class_name("upload-pic").click()#调用upfile.exe实现文件上传os.system(r"C:\upfile.exe")

 

用过os.system()方法可以进行调用,模拟在cmd里面输入:C:\upfile.exe

 

转载于:https://www.cnblogs.com/FR-Long/p/7239919.html

你可能感兴趣的文章
java基础面试题-1
查看>>
深克隆与序列化效率的比较
查看>>
lamp+nginx代理+discuz+wordpress+phpmyadmin搭建一
查看>>
nagios监控使用139邮箱报警
查看>>
Windows Phone 7 中各种Task解说(启动器与选择器)
查看>>
罗森伯格助力2011年中国智能建筑技术发展应用论坛哈尔滨站
查看>>
网络割接
查看>>
windows server 2016 活动目录(二)
查看>>
openstack G版 修改vm的flavor级别
查看>>
python_控制台输出带颜色的文字方法
查看>>
java泛型中特殊符号的含义
查看>>
一秒 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql 问题
查看>>
Android组件化最佳实践 ARetrofit原理
查看>>
舍弃浮躁, 50条重要的C++学习建议
查看>>
同步手绘板——将View的内容映射成Bitmap转图片导出
查看>>
【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!...
查看>>
微信小程序之wx.navigateback往回携带参数
查看>>
陌陌和请吃饭之类的应用,你要是能玩转,那就厉害了
查看>>
递归的运行机制简单理解
查看>>
汉字转阿斯克马值
查看>>