Ошибка «WebDriverException:Cannot find firefox binary in PATH. Make sure firefox is installed» означает, что webDriver не может найти путь к бинарному файлу firefox. Эта ошибка часто возникает при использовании Windows Vista или Mac OS.
Обычно считается, что бинарный файл Firefox находится в папке по умолчанию для вашей операционной системы:
ОС | Ожидаемое местонахождение Firefox |
Linux | firefox (found using «which») |
Mac | /Applications/Firefox.app/Contents/MacOS/firefox |
Windows | %PROGRAMFILES%\Mozilla Firefox\firefox.exe |
Во-первых, убедитесь, что Mozilla Firefox действительно установлен. Если Firefox установлен не в стандартной директории, то проблему можно решить следующим образом (Java):
System.setProperty("webdriver.firefox.bin", "С:\\Program Files (x64)\\Mozilla Firefox\\firefox.exe");
или
WebDriver driver = new FirefoxDriver( new FirefoxBinary(new File("С:\\Program Files (x64)\\Mozilla Firefox\\firefox.exe")), null);
Второй параметр в данном случае это FirefoxProfile. По умолчанию, firefox driver создает анонимный профиль. Если же хочется использовать кастомизированный профиль, то:
ProfileIni allProfiles = new ProfilesIni(); FirefoxProfile profile = allProfiles.getProfile("WebDriver"); profile.setPreferences("foo.bar", 23);
или, если профиль еще не зарегистрирован для Firefox, то
File profileDir = new File("path/to/top/level/of/profile"); FirefoxProfile profile = new FirefoxProfile(profileDir); profile.addAdditionalPreferences(extraPrefs);
А есть какая-либо возможность найти бинарник FF, вместо того чтоб хардкодить его? System.setProperty(
«webdriver.firefox.bin», «С:\\Program Files (x64)\\Mozilla Firefox\\firefox.exe»);?Готовых решений для поиска бинарника нет, можно попробовать получить путь из реестра ОС, но однозначного ответа нет, все зависит от версии ОС.
Можно сделать код более гибким, используя, например, System.getenv
Это конечно же только для Windows.
Как вариант, можно добавить путь к бинарнику в переменную среды PATH и перезапустить IDE. Тогда библиотека найдет его автоматически.
А куда вставлять строчки ?
WebDriver driver = new FirefoxDriver(
new FirefoxBinary(new File(«С:\\Program Files (x64)\\Mozilla Firefox\\firefox.exe»)),
null);
Eclipse ошибки отмечает
Строчки вставлять туда, где инициализируете свой драйвер. Для общего представления — посмотрите эту статью
Ошибки скорее всего из-за отсутствия импортов.
Татьяна, добрый день!
А Вы не подскажете, код запущенный из Eclipse
File profileDir = new File(«C:/Users/Admin/AppData/Roaming/Mozilla/Firefox/Profiles»);
FirefoxProfile profile = new FirefoxProfile(profileDir);
не создает профиль в %APPDATA%\Mozilla\Firefox\Profiles.
Но при этом браузер открывается, хоят я для чистоты эксперимента удалил оттуда все профили.
Может, он сохраняет его в другом месте? Если так, то нельзя ли сделать так, что мы один раз создаем в Eclipse профиль и потом можно его использовать?
В качестве параметра profileDir передается не путь к каталогу, в котором должен быть создан профиль, а путь к каталогу существующего профиля, который будет использоваться как образец (модель) для создания нового.
А вообще драйвер по умолчанию создает профиль в %APPDATA%\Local\Temp, а точнее в
java.io.tmpdir
. Созданный профиль называется примерно так — anonymous1226035196664980621webdriver-profile.Но профиль создается и удаляется каждый раз после выполнения теста (может остаться только после возникновения какой-нибудь критической ошибки).
Для Вашей задачи лучше создать профиль вручную и прикрепить его к проекту, а после использовать тот же profileDir для создания профилей по его образцу.
Татьяна, спасибо за ответ!
Возможно, Вам будут интересны три способа вызвать кастомный профиль, которые можно использовать.
//1й способ
System.setProperty(«webdriver.firefox.profile», profileName =»SomeName»);
webDriver = new FirefoxDriver();
System.out.println(System.getProperty(«webdriver.firefox.profile»));
//2й способ
ProfilesIni profilesIni = new ProfilesIni();
FirefoxProfile profile = profilesIni.getProfile(profileName =»SomeName»);
webDriver = new FirefoxDriver(profile);
//3й способ
File profileDir = new File(«C:/Users/User/AppData/Roaming/Mozilla/Firefox/Profiles/kd0cmpdd.SomeName»);
FirefoxProfile profile = new FirefoxProfile(profileDir);
webDriver = new FirefoxDriver(profile);
2 и 3 вариант имеют преимущество в том, что можно использовать объект FirefoxProfile для дальнейших манипуляций.