Firefox 首选项更新不适用于机器人框架

Firefox preference update is not applied with robot framework

我正在尝试关闭 Firefox 下载对话框。我使用了这段使用 selenium 库的 python 代码。这应该使该文件直接下载到输入的路径而无需额外询问。

from selenium import webdriver

def disable_download_dialog(path):
    fp = webdriver.FirefoxProfile()
    fp.set_preference("browser.download.folderList", 2)
    fp.set_preference("browser.download.manager.showWhenStarting", False)
    fp.set_preference("browser.download.dir", path)
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
    fp.update_preferences()
    return fp.path 

然后我在我的 RF 测试中这样调用这个函数:

${ff_profile_path}=   disable download dialog    ${EXECDIR}\path\to\my\folder

然后像这样打开浏览器:

Open Browser    ${url}    ${browser}    ff_profile_dir=${ff_profile_path}

从测试运行我可以看到下载window仍然显示。我要发送下载文件的文件夹路径显示在测试日志中,如下所示:

D:\path\to\the\folder\named\Downloads

并且 firefox 配置文件确实已更新并保存在临时文件中。但看起来它没有加载,因此用于我的测试。 firefox配置文件的路径是这样的:

C:\Users\surname~1.name\AppData\Local\Temp\tmp83d29mnz

ofc 每次创建新配置文件时,都不是问题。如果我还可以设置我用 python 函数创建的这个 firefox 配置文件的路径,也许会很棒。

所以这里的问题是:

为什么下载对话框在我禁用后仍然显示?

firefox 配置文件可以保存在我定义的文件夹中吗?

好的,所以我发现了,缺少的部分是什么。

我在python函数中添加了这两行代码

fp.set_preference("browser.helperApps.alwaysAsk.force", False)
fp.set_preference("pdfjs.disabled", True)

所以函数的最终版本如下所示:

def disable_download_dialog(path):
    from selenium import webdriver
    fp = webdriver.FirefoxProfile()
    fp.set_preference("browser.download.folderList", 2)
    fp.set_preference("browser.download.manager.showWhenStarting", False)
    fp.set_preference("browser.download.dir", path)
    fp.set_preference("browser.helperApps.alwaysAsk.force", False)
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk",'application/pdf')
    fp.set_preference("pdfjs.disabled", True)
    fp.update_preferences()
    return fp.path