SoftwareTest
# 文件上传
- 文件上传遇到的问题
- 文件上传,如果按照手工方式操作,需要操作Windows对话框,而Selenium默认只能操作浏览器里的网页,不能操作Windows对话框。
- Selenium标准文件上传
- Selenium针对file类型的input标记封装了现成的文件上传操作。
- 标准文件上传的“浏览”、“选择文件"或“上传”按钮是文件型按钮,语法如下:
<input type="file" name="file_name">
- 进行文件上传的语法
- driver.find_element(By.NAME,"file").send_keys(r"D:\111.txt")
- 文件路径支持绝对路径,不支持相对路径(.或…),需要采用os模块里的path相关函数:(os.getcwd()获取当前目录的绝对路径)
- filepath=os.path.join(os.path.dirname(os.getcwd()),"temp","111.txt")
- driver.find_element(By.ID,"file").send_keys(filepath)
- 语法说明:
- os.getcwd()用于返回当前工作目录的绝对路径。
- os.path.dirname(path)函数返回参数的文件或文件夹所在的目录
- os.path.join(path1,path2…)函数拼接两个或更多的路径
driver.find_element(By.ID,"file").send_keys("c:\\pp\\222.txt")#预览上传文件
driver.find_element(By.NAME,"submit").click()#点击上传
小结
Selenium只能针对file类型的input进行文件上传
<input type="file" name="file_name">
- 进行文件上传的语法
driver.find_element(By.NAME,"file").send_keys(r"D:\111.txt")
- 进行文件上传的语法
文件路径支持绝对路径,不支持相对路径,用
os.getcwd()
获取当前目录的绝对路径
# 文件下载
火狐浏览器下载配置
- 关于火孤浏览器的参数,可以通过在Firefox浏览器地址栏中输入"about:config"查看,设置好配置信息后,在重新启动浏览器后浏览器就会根据这些配置进行运行或操作。
browser.download.folderList:设置Firefox的默认下载文件夹。
- 0是桌面;1是“我的下载";2是自定义。
browser.download.dir:下载文件存放目录。
- 如果browser.download.folderList=0,那么就不需要设置该参数。
browser.download.manager.showWhenStarting:是否显示开始
- True为显示开始,Flase为不显示开始。
browser.helperApps.neverAsk.saveToDisk:对所给文件类型不再弹出框进行询问
- 在下载文件时,浏览器可能会弹出对应的下载提示框。
- 这个提示框是浏览器的,不能使用Selenium进行操作,所以可以通过该配置关闭提示。
- 上面例子中表示:对于下载类型为二进制流的文件不需要弹出提示。
- 常用的类型有:application/, octet-stream, application/vnd.ms-excel, text/csv, application/zip, application/pdf, application/json,application/msword
参考http://www.w3school.com.cn/media/media_mimeref.asp
文件扩展名 | Content-Type(Mime-Type) | 文件扩展名 | Content-Type(Mime-Type) |
---|---|---|---|
*(二进制流) | application/octet-stream | .wav | audio/wav |
.ppt | application/vnd.ms-powerpoint | .xls | application/x-xls |
.html .htx .htm | text/html | .apk | application/vnd.android.package-archive |
.jpeg .jpg | image/jpeg | .cer | application/x-x509-ca-cert |
.mp3 | audio/mp3 | .rpm | audio/x-pn-realaudio-plugin |
.mp4 | video/mpeg4 | .dll | application/x-msdownload |
.png | image/png | application/pdf | |
.zip | application/zip | .doc | application/msword |
.json | application/json | .xml | applicaiton/xml |
# Firefox启动配置(需要在调用WebDriver的Firefox()前配置)
在调用WebDriver的Firefox()方法时设置信息会作为参数传递给浏览器。Firefox浏览器在启动、运行(下载)时就会根据这些设置信息进行操作:
- 实例化一个配置对象:配置对象=webdriver.FirefoxProfile()
- 通过配置对象添加配置信息:配置对象.set_preference(key,value)
- 以配置对象启动浏览器:webdriver.Firefox(firefox_profile=配置对象)
obj=webdriver.FirefoxProfile()
obj.set_preference("browser.download.folderList",2)
obj.set_preference("browser.download.dir","c:\\pp")
obj.set_preference("browser.download.manager.showWhenstarting",False)
obj.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")
driver=webdriver.Firefox(firefox_profile=obj)
driver.get("https://www.firefox.com.cn/")
driver.find_element(By.XPATH,'//div[aid="download-button-thanks"]/a').click()
sleep(15)
driver.quit()
注意:遇到报错的情况,是因为FirefoxProfile()已经弃用,请把上面的代码更改如下:
from selenium.webdriver.common.options import BaseOptions
setobj=webdriver.FirefoxOptions()
setobj.set_preference(“browser.download.folderList”,2)
setobj.set_preference(“browser.download.dir”,”c:\\temp\\”)
setobj.set_preference(“browser.download.manager.showWhenStarting”,False)
setobj.set_preference(“browser.helperApps.neverAsk.saveToDisk”,”application/octet-stream”)
driver=webdriver.Firefox(Options=setobj)
参考来源:https://blog.csdn.net/huaalily/article/details/122492912
上次更新: 2025/5/2 14:40:28