如何在RobotFramework中设置打开浏览器关键字下载文件?

问题描述 投票:0回答:1

我想在火狐浏览器中设置文件下载不需要对话框。我使用该代码。

${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)

robotframework
1个回答
0
投票

在Chrome和Firefox中改变下载设置的方法是不同的。在Firefox中,你应该使用自定义Firefox配置文件,而在Chrome中,你应该使用能力。

此外,在Firefox中,你必须指定不应显示下载对话框的内容类型。要找出服务器返回的内容类型,只需检查响应头。

dev tools screenshot

这里是设置配置文件的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
© www.soinside.com 2019 - 2024. All rights reserved.