当前位置: 首页 > 知识库问答 >
问题:

如何使用Javascript通过selenium 3.6.0使用另一个配置文件打开Firefox浏览器

孔运珧
2023-03-14

我想通过selenium webdriver 3.6.0启动Firefox浏览器,并更改浏览器的一些默认设置。具体来说,我希望Firefox在自动测试期间下载文件,而不提示是否保存文件,也不提示是否下载到默认目录以外的预定义目录,即downloads文件夹。

在google chrome上执行此操作的方法如下:

if (this.bName === 'chrome') {  
   var cap = Capabilities.chrome();  
   var options = {  
      'prefs': {  
          profile: {  
            default_content_settings: {  
                  popups: 0,  
            },  
          },  
          download: {  
            default_directory: path.join(__dirname,  
 '/../Downloads For Testing'),  
          }  
      }  
 };  
 var cap = cap.set('chromeOptions', options);  
 this.browser = new Builder().withCapabilities(cap).build();  
}

在创建新配置文件后,通过设置首选项,在Firefox上进行相关尝试,但没有成功。

我包括Firefox文件夹中的配置文件

firefoxProfile=require('selenium-webdriver/firefox')。轮廓

我用新功能构建

else if (this.bName === 'firefox') {
            var cap = Capabilities.firefox();
            var profile = new firefoxProfile;
            profile.setPreference("browser.download.folderList", 2);
            profile.setPreference("browser.download.manager.showWhenStarting", false);
            profile.setPreference("browser.download.dir", path.join(__dirname, '/../Downloads For Testing'));
            profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/html");
            cap.set('firefox_profile', profile);
            console.log(profile);
            this.browser = new Builder().withCapabilities(cap).build();
        }

这是新轮廓对象的打印输出:

Profile {
  preferences_:
   { 'browser.download.folderList': 2,
     'browser.download.manager.showWhenStarting': false,
     'browser.download.dir': 'C:\\path\\Downloads For Testing',
     'browser.helperApps.neverAsk.saveToDisk': 'text/html' },
  template_: undefined,
  extensions_: []
}

浏览器启动时没有错误,测试框架mocha会正确返回所有promise,直到按下按钮下载文件并显示正常对话框,所以没有成功。

共有1个答案

傅元章
2023-03-14

索引。selenium webdriver\firefox中的js文件清楚地说明了如何动态创建新配置文件和设置首选项。

* The {@linkplain Profile} class may be used to configure the browser profile
* used with WebDriver, with functions to install additional
* {@linkplain Profile#addExtension extensions}, configure browser
* {@linkplain Profile#setPreference preferences}, and more. For example, you
* may wish to include Firebug:
*
*     const {Builder} = require('selenium-webdriver');
*     const firefox = require('selenium-webdriver/firefox');
*
*     let profile = new firefox.Profile();
*     profile.addExtension('/path/to/firebug.xpi');
*     profile.setPreference('extensions.firebug.showChromeErrors', true);
*
*     let options = new firefox.Options().setProfile(profile); 
*     let driver = new Builder()
*         .forBrowser('firefox')
*         .setFirefoxOptions(options)
*         .build();

它试过了,但没有成功。显然,我没有尝试添加扩展名,只是设置了问题中写的4个首选项。

作为一种解决方法,我的诀窍是通过执行firefox创建一个新的概要文件。在windows的“运行”对话框中执行-p。(按windows图标键和键盘上的R键以获得运行对话框)
之后,我使用这个新的“测试”配置文件作为模板,通过selenium动态创建一个新的临时配置文件。

var profile = new firefox.Profile('/pathTo/firefox profile for testing/');

这就是诀窍。这似乎与Firefox和mime类型有关。如果发送要下载的文件的服务器将文件的内容类型命名为与Firefox不同的类型,则不会自动保存,并会出现“保存或打开文件”对话框
可能是出于安全原因
可以在此处找到内容类型

在我的例子中,它是关于一个csv文件和设置profile.setPreason("browser.helperApps.neverAsk.saveToDisk","text/csv"),而服务器发送一个text/html的内容类型,Firefox将其标识为TXT文件不起作用。
因此,我编辑了/path To/Firefox配置文件中的handlers.json文件,用于测试/,方法是将'mimeTypes'中的'text/plum'的属性'ask'从true设置为false。

当然,我将下载文件的路径设置为唯一首选项。顺便说一句,这还将创建路径,至少是最后一个文件夹。所以我的代码是:

    else if (this.bName === 'firefox') {
        var cap = Capabilities.firefox();
        var profile = new firefox.Profile('/pathTo/firefox profile for testing/');
        profile.setPreference("browser.download.dir", '/pathTo/Downloads For Testing');
        let options = new firefox.Options().setProfile(profile);
        this.browser = new Builder().forBrowser(this.bName).setFirefoxOptions(options).build();
    }

您也可以尝试这样做,不要弄乱处理程序。json(页面末尾),但对我不起作用。

或者只是去蛮力,这也没什么。

 类似资料:
  • 问题内容: 我正在使用seleniumjava工作,需要下载pdf文件,但是在我的情况下似乎没有任何效果。是由于设置了新的firefox驱动程序实例ie吗?我被困在这里。但是,当我在MIME对话框上手动单击保存文件时,它可以正确保存到我的自定义位置,我的下载链接代码也位于另一个Java类中,而位于另一个类的下面,但是我使用的驱动程序与在此类中声明的,以下是我的代码, 问题答案: 以下代码块使用直通

  • 我正在使用selenium java来下载pdf文件,我在这里引用了这个,这个和这个答案,但似乎没有什么在我的情况下工作。是否由于设置了新的firefox驱动程序实例,即?然而,当我手动单击MIME对话框中的save file时,它会正确地保存到我的自定义位置,我的下载链接代码也位于另一个java类中,下面的代码位于另一个类中,但我使用了与该类中声明的相同的驱动程序,下面是我的代码,

  • 问题内容: 我想在JavaScript中打开文件浏览器,并为此文件浏览器设置默认目录。例如,我想将默认目录设置为“ C:\ My Documents”。 如何设置默认目录?最好使用,其他控件也可以。 问题答案: 这是不可能的,因为让网站代码在计算机上设置任何值都是安全隐患。 另外,您永远不能确保该目录存在。如果我使用Mac,该怎么办?我的东西进来了。如果我在Windows上安装了Windows,该

  • 问题内容: 我有一个将pdf文件作为ByteArrayOutputStream写入servlet的输出流的servlet。如果打开servlet URL,浏览器将打开文件。但是,如果在Servlet上发生错误,浏览器会打开一个带有错误消息的空白pdf。通过ServletResponse发送错误,浏览器将打开默认错误页面。 我要发送错误消息,而不重定向到错误页面或打开无效的pdf文件。 我试过了:

  • 我一直在写的脚本工作得很好。我刚刚添加了一个选项,这样它就可以使用这个代码在chrome上打开一个配置文件。 使用时,我得到这个错误代码。 我该怎么解决这个问题?

  • 问题内容: 我在Ubuntu Desktop 16.04上使用Selenium WebDriver,但无法打开浏览器。Firefox更新后出现以下错误(在此之前,所有方法都可以正常工作): 问题答案: 修正 :目前的解决方案是降级Firefox!运行此命令以获取可用Firefox版本的列表。 我的结果: 安装: 要保留此版本并禁止更新: