自动化开发过程中,经常遇到的就是点击一个本地文件上传到服务器上。面对这种情况,经常会有上传文件的操作,其实WebDriver里面并没有直接提供对应的方法。
先来看看上传文件操作的用户过程。
打开如下测试页面:
点击浏览按钮,弹出一个文件选择框:
任意选择一个文件:
最后,点击Submit Single按钮,由于测试过程是一个本地文件,所以,点击上传按钮会报错。
对应的测试网页源码:
<html>
<body>
<div>
<form name="form1" action="fileUpload.php" method="post" enctype="multipart/form-data">
<label for="file">File:</label>
<input type="file" name="file" id="file" />
<br />
<input type="hidden" name="multi" value="false"/>
<input type="submit" name="submit" value="Submit Single" />
</form>
</div>
</body>
</html>
其中,form标签用于封装input,最后通过submit提交到action指定的服务器。type=“file”的输入框就是用来接收文件的按钮,tpye=“submit”的按钮,点击后就会提交整个form。
可以看到,上传过程一般要打开一个系统的Dialog窗口,然后选择本地文件添加(问题:如何操作打开一个系统的Dialog)。其实,上传本地文件,并没有看到那么复杂,只要定位到上传按钮,通过send_keys添加本地文件就可以了,绝对路径和相对路径都可以。
上传文件实例代码来看看具体操作:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("file:///D:/uploadfile.html")
# 输入上传文件路径
driver.find_element_by_xpath("//input[@name='file']").send_keys("D:\\info.txt")
driver.find_element_by_xpath("//input[@name='submit']").click()
driver.quit()
如上实例代码,整个过程其实并没有特殊代码,还是使用常见的send_keys和click就已经完成了上传文件。