【问题标题】:How to set the file downloading with Open Browser keyword in the RobotFramework?如何在 RobotFramework 中使用 Open Browser 关键字设置文件下载?
【发布时间】:2020-09-03 12:39:56
【问题描述】:

我想在 Firefox 中设置不带对话框窗口的文件下载。我使用该代码:

${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':真,'browser.download.manager.closeWhenDone':真,'browser.download.manager.scanWhenDone':假,'browser.download.manager.showAlertOnComplete':假,'browser.download.manager。 showWhenStarting': False, 'browser.download.manager.useWindow': False, 'browser.helperApps.alwaysAsk.force': False, 'browser.helperApps.neverAsk.saveToDisk': 'application/sql'}

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

看起来我的自定义设置没有在测试中使用。

如何在 Open Browser 命令中为 Firefox 设置自定义设置?

(robotframework 3.2;robotframework-seleniumlibrary 4.4.0)

【问题讨论】:

    标签: robotframework


    【解决方案1】:

    在 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
    

    【讨论】:

    • 感谢您的回复,但它对我不起作用。文件未下载。但我会检查你的建议来配置 FF 配置文件。
    猜你喜欢
    • 2019-10-28
    • 2014-12-22
    • 2017-04-07
    • 2020-05-09
    • 2019-02-22
    • 2023-03-22
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多