我想通过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,直到按下按钮下载文件并显示正常对话框,所以没有成功。
索引。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版本的列表。 我的结果: 安装: 要保留此版本并禁止更新: