Файл index.js в selenium-webdriver\firefox
четко определяет, как динамически создавать новый профиль и устанавливать настройки.
* 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.exe -p
в диалоговом окне «Выполнить» окна. (Нажмите клавишу со значком окна и клавишу R на клавиатуре, чтобы открыть диалоговое окно запуска).
После этого я использовал этот новый «тестовый» профиль в качестве шаблона для динамического создания нового временного профиля через селен.
var profile = new firefox.Profile('/pathTo/firefox profile for testing/');
А вот и хитрость. Похоже, что-то вроде Firefox и MIME. Если сервер, отправляющий файл для загрузки, называет тип содержимого файла по-другому, как это сделал бы Firefox, автосохранение не произойдет, и появится диалоговое окно «сохранить или открыть файл».
Вероятно, из соображений безопасности.
Тип содержимого можно найти здесь
В моем случае речь идет о файле csv и настройке profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv")
, в то время как сервер отправляет текстовый тип text / html, а firefox идентифицирует его как файл TXT, который не работает.
Поэтому я отредактировал файл handlers.json внутри /pathTo/firefox profile for testing/
, установив атрибут 'ask' для 'text / plain' внутри 'mimeTypes' с 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();
}
Вы также можете попробовать это и не связываться с handler.json (конец страницы) , но у меня это не сработало.
Или просто грубая сила , этого тоже не было.