24、Selenium + Python 实现 UI 自动化测试-文件下载
文件上传姊妹篇,文件下载来了。
文件下载比较简单
一、看下文件下载元素
1、测试地址:http://sahitest.com/demo/saveAs.htm
2、下载按钮就是一个a标签,有点类似link
下面是测试地址的下载元素,可以看到是一个a标签
再看百度的链接,也是一个a标签,而这个链接是可以使用click方法进行跳转的。那下载元素使用click什么效果呢?
二、下载到默认目录:
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('http://sahitest.com/demo/saveAs.htm') driver.find_element_by_xpath('/html/body/a[1]').click() time.sleep(3) driver.quit()一般会默认下载到目录:C:\Users\admin\Downloads
注意:一般需要加个等待,如果下载还未完成,直接关闭浏览器,文件是保存不成功的。
三、下载到指定目录:
以Chrome为例,Firefox相对繁琐一些,请参考灰蓝文章。
from selenium import webdriver chromedriver = "C:/Python36/chromedriver.exe" chromeOptions = webdriver.ChromeOptions() prefs = {"download.default_directory": "C:/Python36/"} chromeOptions.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chromeOptions) driver.get('http://sahitest.com/demo/saveAs.htm') driver.find_element_by_xpath('/html/body/a[1]').click() driver.quit()
四、小结
文件下载操作不难,我们只是对a元素进行了一次点击。不过问题也恰恰在这里,如果对于链接来说,点击是否成功,我们可以根据跳转页面来判定。但是下载文件是否成功,则只能判断特定目录下是否有该文件了。(这显然不属于selenium的能力范畴了)
执行用例之前,先删除特定目录下的该文件名文件,然后执行用例,再判断有没有该文件(下载成功)。想想我们平时测试文件下载功能,应该是有两个验证点:第一,文件下载成功;第二,文件打开成功。而自动化目前看只能验证第一点。