我想通过selenium-webdriver 3.6.0启动Firefox浏览器,并更改了浏览器的某些默认设置。具体来说,我希望Firefox在自动测试过程中下载文件,而不提示是否保存并下载到默认目录(下载文件夹)以外的预定义目录。
在谷歌浏览器上执行此操作的方法是:
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')。Profile;
我用新功能进行构建
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,直到按下按钮下载文件,然后出现正常对话框,所以没有成功。
答案 0 :(得分:0)
selenium-webdriver\firefox
中的index.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个首选项。
作为解决方法,对我来说,窍门是通过在Windows的“运行”对话框中执行firefox.exe -p
来创建新的配置文件。 (按Windows图标键和键盘上的R进入运行对话框)
之后,我使用这个新的“测试”概要文件作为模板,通过硒动态创建了一个新的临时文件。
var profile = new firefox.Profile('/pathTo/firefox profile for testing/');
这是窍门。似乎与Firefox和mime类型有关。如果服务器发送文件以进行下载,而文件名称的内容类型与Firefox的名称不同,则不会进行自动保存,并且将出现“保存或打开文件”对话框。
可能出于安全原因。
The content type can be found here
在我的情况下,这是关于一个csv文件并设置profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv")
的,而服务器发送的是text / html的内容类型,而firefox将其标识为TXT文件不起作用。
因此,我通过将'mimeTypes'中'text / plain'的'ask'属性设置为true到false,来编辑/pathTo/firefox profile for testing/
中的handlers.json文件。
当然,我将下载文件的路径设置为唯一的首选项。顺便说一句,这还将创建路径,至少是最后一个文件夹。所以我的代码是:
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();
}
You can also try this and not mess with the handler.json (end of page),但对我不起作用。