selenium上传文件

最近在使用selenium做WEB UI自动化测试时,遇到要实现自动上传文件的页面操作,在网上找了一些方法,终于实现,现在整理一下上传文件的自动化实现过程:

第一种方式:标签是input(如下图),直接使用页面元素定位,然后发送文件路径即可

在这里插入图片描述

WebElement e1= driver.findElement(By.id("load"));
//输入要上传文件的地址
e1.sendKeys("D:\\Work\\eclipse_workspace\\seleniumdemo\\res\\被上传的文件.txt");

第二种方式:使用autoit脚本上传方式

有的上传控件不是input元素,这个时候利用sendkeys方法是行不通的。此时可以通过autoit来帮助我们实现上传功能,先了解下什么是autoit。它是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。而这是其它语言不可能做到或无可靠方法实现的。

我们主要利用autoit来实现对上传文件弹窗的定位,然后对弹窗中地址框赋值(文件路径),然后点击确定按钮进行上传文件,如下图:
在这里插入图片描述
具体思路知道该怎么做了,下面通过autoit脚本来实现。
首先你需要安装autoit(官网:https://www.autoitscript.com/site/),直接默认安装即可。
接下来需要通过AutoIt Window Info (x86)或者AutoIt Window Info (x64)(这个是你刚才安装的autoit自带的应用程序,你可以在开始菜单中找到,如果开始菜单中没有请到安装目录下查找),先打开AutoIt Window Info ,如图:
在这里插入图片描述
打开其中对应你windows的程序,界面如下:
在这里插入图片描述
这个工具是定位windows gui(windows界面)元素用的。接下来会对上传弹出框进行定位。
那百度的个人头像上传功能,点击选择图片:
在这里插入图片描述
在这里插入图片描述
然后找切换到刚才打开的AutoIt Window Info 工具,找到Finder Tool:然后用鼠标拖动此图标到文件上传弹窗的 文件名输入框:
在这里插入图片描述
在这里插入图片描述
记录好“打开”按钮的calssname。接下来根据定位值来编写autoit脚本。
打开安装目录下的:SciTE Script Editor应用程序:
在这里插入图片描述
下面是脚本各字段含义:

  • ControlFocus(“窗口标题”,“窗口文本”,控件ID):获得输入焦点并指定到窗口的某个具体控件上
  • WinWait(“窗口标题”,“窗口文本”,超时时间):添加等待时间直至指定窗口出现
  • ControlSetText(“窗口标题”,“窗口文本”,控件ID,“新文本”):指定控件中输入“新文本”的内容
  • Sleep(延迟):时间等待
  • ControlClick(“窗口标题”,“窗口文本”,控件ID,按钮,单击次数):鼠标单击

需要强调的是,autoit是根据弹窗的名字来给文件名输入框赋值和点击按钮等操作的,由于不同的浏览器弹窗的名字可能不一样,这里要谨慎选择。

autoit的脚本到此写完了,但是由于我们是在cmd中调用,需要将其转换成exe可执行文件。

打开autoit安装目录下的应用程序:Compile Script to .exe (x86)或者Compile Script to .exe (x64)
在这里插入图片描述
执行完成后,就会发现生成了一个可执行的exe文件。
在这里插入图片描述
然后就可以使用,python自动化脚本,执行这个exe,调用方式为:

os.system(filepath)------filepath为生成的exe文件路径

第三种方式:使用pywinauto上传方式

这种第三方插件只适用于Windows系统,而且与很多python版本不兼容,适用于Python3.7.3

from pywinauto.keyboard import send_keys

driver.find_element_by_id('test2').click()
# 强制等待
sleep(2)
send_keys(r'C:\Users\pengjingsi\Pictures\Saved Pictures\4.jpg')
# 按回车键
send_keys('{VK_RETURN}')

如果要上次多个图片,可以这样实现:

from pywinauto.keyboard import send_keys

driver.find_element_by_id('test2').click()
# 强制等待
sleep(2)
send_keys(r'"C:\Users\pengjingsi\Pictures\Saved Pictures\4.jpg"')
send_keys(r'"C:\Users\pengjingsi\Pictures\Saved Pictures\5.jpg"')
# 按回车键
send_keys('{VK_RETURN}')

问题圆满解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值