【Selenium自动化测试】上传文件

上传文件是web比较常见的功能之一,但webdriver并没有提供专门用于上传的方法,因为上传一般意味着要与操作系统进行交互。比如点击"上传"按钮后,就会打开本地操作系统的窗口以供选择要上传的文件,而到这一步,webdriver是没有办法与之交互操作系统控件的。

在 Web 页面中一般通过以下两种方式实现文件上传。

  • 普通上传:将本地文件路径作为一个值放在input 标签中,通过form 表单将这个值提交给服务器。
  • 插件上传:一般是指基于Flash、JavaScript 或Ajax 等技术实现的上传功能。

对于通过 input 标签实现的上传功能,可以将其看作一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。
下面通过一个本地实例来演示通过表单上传的例子:

<html>
<head>
<meta charset="utf-8">
<title>上传表单</title>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" >
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js">
</script>
</head>
<body>
<div class="jumbotron">
<form class="form-inline" role="form">
<div class="form-group">
<label class="sr-only" for="name">名称</label>
<input type="text" class="form-control" id="name"
    placeholder="请输入名称">
</div>
<div class="form-group">
<label class="sr-only" for="inputfile">文件输入</label>
<input type="file" id="inputfile">
</div>
<button type="submit" class="btn btn-default">提交</button>
</form>
</div>
</body>
</html>

在浏览器中打开的效果如下:
在这里插入图片描述

import os
from selenium import webdriver
file_path = os.path.abspath('./files/')
driver = webdriver.Chrome()
upload_page = 'file:///' + file_path + 'upload.html'
driver.get(upload_page)
# 定位上传按钮,添加本地文件
driver.find_element_by_id("file").send_keys(file_path + 'test_up_load.txt')

这里测试的页面(upfile.html)和上传的文件(test.txt)位于与当前程序同目录的files/目录下。通过这种方式上传,就避免了操作Windows 控件。前提是如果能找到上传的input 标签,那么基本可以通过send_keys()方法输入一个本地文件路径实现上传。
对于插件上传的,可以通过AutoIt这款开源软件来实现,其是专门用于Windows GUI实现自动化操作的。可以通过一系列步骤将自动化操作封装成脚本或.exe文件,然后再通过Python去调用,这样结合Selenium和AutoIt就可以实现web的上传文件功能。有兴趣的小伙伴可以自行去了解下,后续有机会的话我也会推出新文章介绍一下。

以上就是本期文章的所有内容,感谢观看,如果对您有帮助请点赞关注+收藏,一键三连,多谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值