我想在火狐浏览器中设置文件下载不需要对话框。我使用该代码。
${Number_value} = Evaluate 4-2 # I need it to set numeric value not string
${DesiredCapabilities} = Evaluate sys.modules['selenium.webdriver'].DesiredCapabilities.FIREFOX.copy()
Set To Dictionary ${DesiredCapabilities} browser.download.downloadDir=${downloadDir}
... browser.download.folderList=${Number_value}
... browser.download.useDownloadDir=${True}
... browser.download.manager.closeWhenDone=${True}
... browser.download.manager.scanWhenDone=${False}
... browser.download.manager.showAlertOnComplete=${False}
... browser.download.manager.showWhenStarting=${False}
... browser.download.manager.useWindow=${False}
... browser.download.useDownloadDir=${True}
... browser.helperApps.alwaysAsk.force=${False}
Log ${DesiredCapabilities}
Open Browser about:blank firefox desired_capabilities=${DesiredCapabilities}
在测试过程中,我看到[保存]按钮被按下,但文件没有下载,对话框窗口也没有被隐藏。
${DesiredCapabilities}的日志。
{'browserName': 'firefox', 'marionette': True, 'acceptInsecureCerts': True, 'browser.download.downloadDir': ${downloadDir}, 'browser.download.folderList': 2, 'browser.download.useDownloadDir': True, 'browser.download.manager.closeWhenDone': True, 'browser.download.manager.scanWhenDone': False,'browser.download.manager.showAlertOnComplete'。False, 'browser.download.manager.showWhenStarting': False, 'browser.download.manager.showAlertOnComplete': False: False, 'browser.download.manager.useWindow': False, 'browser.helperApps.alwaysAsk.force': False, 'browser.helperApps.neverAsk.saveToDisk': 'applicationql'}。
geckodriver.log文件中有这样几行字。
1589738958827 Marionette INFO Listening on port 52174
1589738958828 Marionette DEBUG Marionette is listening
1589738959167 Marionette DEBUG Accepted connection 0 from 127.0.0.1:52187
1589738959169 Marionette DEBUG 0 -> [0,1,"WebDriver:NewSession",{"acceptInsecureCerts":true,"browserName":"firefox","capabilities":{"desiredCapabilities":{"acceptInsecureCerts":true,"browserName":"firefox"}}}]
1589738959170 Marionette WARN TLS certificate errors will be ignored for this session
1589738959196 Marionette TRACE [18] Frame script loaded
1589738959200 Marionette TRACE [18] Frame script registered
1589738959206 Marionette DEBUG 0 <- [1,1,null,{"sessionId":"872cf638-e4ae-465b-a00a-0887601cd3f3","capabilities":{"browserName":"firefox","browserVersion":"76.0. ... alse,"moz:webdriverClick":true,"capabilities":{"desiredCapabilities":{"acceptInsecureCerts":true,"browserName":"firefox"}}}}]
1589738959213 Marionette DEBUG 0 -> [0,2,"WebDriver:SetTimeouts",{"script":60000}]
1589738959213 Marionette DEBUG 0 <- [1,2,null,{"value":null}]
1589738959216 Marionette DEBUG 0 -> [0,3,"WebDriver:SetTimeouts",{"implicit":0}]
1589738959217 Marionette DEBUG 0 <- [1,3,null,{"value":null}]
1589738959219 Marionette DEBUG 0 -> [0,4,"WebDriver:Navigate",{"url":"about:blank"}]
1589738959226 Marionette TRACE [18] Received DOM event beforeunload for about:blank
1589738959227 Marionette TRACE [18] Received DOM event pagehide for about:blank
1589738959233 Marionette TRACE [18] Received DOM event DOMContentLoaded for about:blank
1589738961616 Marionette TRACE [18] Received DOM event pageshow for about:blank
看来我的自定义设置在测试中没有被使用。
我如何在Firefox的 打开浏览器 命令?
(robotframework 3.2;robotframework-seleniumlibrary 4.4.0)
在Chrome和Firefox中改变下载设置的方法是不同的。在Firefox中,你应该使用自定义Firefox配置文件,而在Chrome中,你应该使用能力。
此外,在Firefox中,你必须指定不应显示下载对话框的内容类型。要找出服务器返回的内容类型,只需检查响应头。
这里是设置配置文件的python代码。
# SeleniumExtension.py
from robot.api.deco import keyword
from selenium.webdriver import FirefoxProfile
class SeleniumExtension:
@keyword("Set Up Firefox Profile")
def setup_firefox(self):
profile = FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
# Uncomment to set custom download dir
# profile.set_preference("browser.download.dir", "/some/valid/path")
# To make sure that browser won't try open pdf in browser
profile.set_preference("pdfjs.disabled", True)
profile.set_preference(
"browser.helperApps.neverAsk.saveToDisk",
"image/jpeg"\
"application/octet-stream"
)
profile.update_preferences()
return profile.path
使用方法:
*** Settings ***
Library SeleniumLibrary
Library SeleniumExtension.py
*** Test Cases ***
Testing-Download
[Teardown] Close All Browsers
${profile_dir} Set Up Firefox Profile
Open Browser http://the-internet.herokuapp.com/download ff ff_profile_dir=${profile_dir}
Click Element //a[contains(@href, ".jpg")]
Sleep 2