自动化测试-20.selenium之FireFox下载项配置
前言:
当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这些设置在启动的浏览器中生效果。
要素设置FireFox()配置项:
browser.download.folderList
设置成 0 代表下载到浏览器默认下载路径, 设置成 2 则可以保存到指定目录。
browser.download.dir
用于指定所下载文件的目录。 os.getcwd() 函数不需要传递参数, 用于返回当前的目录。
browser.helperApps.neverAsk.saveToDisk
指定要下载页面的 Content-type 值, “binary/octet-stream” 为文件的类型。下载的文件不同,这里的类型也会有所不一样。如果不清楚你下载的文件什么类型,请用Fiddler抓包。
附上代码(用于点击下载bugFree内的附件)
1 #coding:utf-8 2 from selenium import webdriver 3 from selenium.webdriver.common.action_chains import ActionChains 4 from selenium.webdriver.support.select import Select 5 import time,os,SendKeys 6 7 def setFireFoxProfile(): 8 '''#配置Firefox:修改firefox_profile 9 1. 配置保存文件的路径 10 2. 设置文件是否保存在默认下载文件夹中 11 3. 设置文件类型允许下载 12 ''' 13 # 获取到火狐浏览器的配置选项 14 profile = webdriver.FirefoxProfile() 15 # 配置火狐浏览器的下载路径 16 profile.set_preference("browser.download.dir",os.getcwd()+'\\download') 17 # 设置成 0 代表下载到浏览器默认下载路径, 设置成 2 则可以保存到指定目录。 18 profile.set_preference("browser.download.folderList",2) 19 # 指定要下载页面的 Content-type 值, “binary/octet-stream” 为文件的类型 20 # 响应头中的Content-Type: application/x-zip-compressed(zip压缩包) image/png(png图片) 21 profile.set_preference("browser.helperApps.neverAsk.saveToDisk","application/x-zip-compressed") 22 # 设置不弹出窗口 23 profile.set_preference("profile.default_content_settings.popups", 0); 24 #实例化浏览器webdriver 25 driver = webdriver.Firefox(firefox_profile=profile) 26 #设置全局等待时间 27 driver.implicitly_wait(10) 28 #最大浏览器窗口 29 driver.maximize_window() 30 return driver 31 32 def loadAndDownload(driver): 33 '''点击下载 34 :param driver: 浏览器对象 35 :return: None 36 ''' 37 # 打开bugfree主页(前置条件:已搭建bugfree) 38 driver.get(r'http://192.168.7.19:8080/bugfree') 39 driver.find_element_by_id('LoginForm_username').clear() 40 # 输入用户名 41 driver.find_element_by_id('LoginForm_username').send_keys('admin') 42 driver.find_element_by_id('LoginForm_password').clear() 43 # 输入密码 44 driver.find_element_by_id('LoginForm_password').send_keys('123456') 45 # 登录 46 driver.find_element_by_id('SubmitLoginBTN').click() 47 time.sleep(3) 48 #选择产品 49 ele = driver.find_element_by_id('product_name') 50 Select(ele).select_by_visible_text('Sample Product') 51 time.sleep(3) 52 #通过部分文本进行定位: 标签名[contains(.,'部分文本值')] 53 #d.find_element_by_xpath('td[contains(.,\'12\')]') 54 #ActionChains(d).click_and_hold(d.find_element_by_xpath('//td[contains(.,\'12\')]')).perform() 55 ''' 56 contains:模糊查询 57 ., :根据文本匹配 58 ../ :父节点 59 //td[contains(.,\'12\')]: 查找HTML页面上标签名为td的且文本包含12的元素 60 ''' 61 # ../元素的父节点路径 62 driver.find_element_by_xpath('//td[contains(.,\'12\')]/../td[5]/span/a').click() 63 # 切换到bug详情页面 64 driver.switch_to.window(driver.window_handles[-1]) 65 # 定位到zip文件,并点击 66 driver.find_element_by_css_selector('#file3>a').click() 67 68 69 if __name__ == '__main__': 70 # 调用配置并返回浏览器 71 driver = setFireFoxProfile() 72 # 调用点击下载 73 loadAndDownload(driver)