Selenium2 firefox: используйте профиль по умолчанию

Selenium2 по умолчанию запускает firefox с новым профилем. Мне нравится это по умолчанию, но по некоторым причинам (доступ к моим закладкам, сохраненным паролям, использование моих надстроек и т. Д.). Я хочу начать с моего профиля по умолчанию.

Предполагается, что это свойство контролирует это, но я думаю, что документы не синхронизированы с источником, потому что, насколько я могу сказать, webdriver.firefox.bin – единственный, который работает. Например, начальный селен с:

 java -jar selenium-server-standalone-2.5.0.jar -Dwebdriver.firefox.bin=not-there 

работает (т.е. жалуется). Но это не влияет:

 java -jar selenium-server-standalone-2.5.0.jar -Dwebdriver.firefox.profile=default 

(«default» – это имя в profiles.ini, но я также пробовал с «Profile0», который является именем раздела в profiles.ini).

Я использую PHPWebdriver (который использует JsonWireProtocol) для доступа:

 $webdriver = new WebDriver("localhost", "4444"); $webdriver->connect("firefox"); 

Я пробовал делать это со стороны PHP:

 $webdriver->connect("firefox","",array('profile'=>'default') ); 

или:

 $webdriver->connect("firefox","",array('profile'=>'Profile0') ); 

без успеха (запуск firefox, но не использование моего профиля).

Я также попытался использовать хакерский подход для создания командного файла:

 #!/bin/bash /usr/bin/firefox -P default 

И затем запуск Selenium с помощью: java -jar selenium-server-standalone-2.5.0.jar -Dwebdriver.firefox.bin = "/ usr / local / src / selenium / myfirefox"

Firefox запускается, но не используется по умолчанию, и, что еще хуже, все зависает: selenium, похоже, не может общаться с firefox при запуске этого способа.

PS Я видел Selenium – пользовательский профиль Firefox. Я пробовал это:

 java -jar selenium-server-standalone-2.5.0.jar -firefoxProfileTemplate "not-there" 

И он отказывается бежать! Возбужденный, думая, что я могу что-то сказать, я попробовал:

 java -jar selenium-server-standalone-2.5.0.jar -firefoxProfileTemplate /path/to/0abczyxw.default/ 

Это ничего не делает. Т.е. он по-прежнему начинается с нового профиля 🙁

    Саймон Стюарт ответил на это в списке рассылки для меня.

    Чтобы суммировать его ответ: вы берете свой профиль firefox, застегиваете его (zip, not tgz), base64-encode его, а затем отправляете все это как запрос / json json (помещаем строку base64 в ключ firefox_profile объекта Capabilities ).

    Пример этого в Linux:

     cd /your/profile zip -r profile * base64 profile.zip > profile.zip.b64 

    И тогда, если вы используете PHPWebDriver при подключении, выполните:

     $webdriver->connect("firefox", "", array("firefox_profile" => file_get_contents("/your/profile/profile.zip.b64"))) 

    ПРИМЕЧАНИЕ. Это будет не мой настоящий профиль, скорее его копия. Поэтому закладки не будут запоминаться, кеш не будет заполнен и т. Д.

    Вот эквивалент Java. Я уверен, что есть что-то подобное в php.

     ProfilesIni profile = new ProfilesIni(); FirefoxProfile ffprofile = profile.getProfile("default"); WebDriver driver = new FirefoxDriver(ffprofile); 

    Если вы хотите добавить дополнительные расширения, вы можете сделать что-то подобное.

     ProfilesIni profile = new ProfilesIni(); FirefoxProfile ffprofile = profile.getProfile("default"); ffprofile.addExtension(new File("path/to/my/firebug.xpi")); WebDriver driver = new FirefoxDriver(ffprofile); 
     java -jar selenium-server-standalone-2.21.0.jar -Dwebdriver.firefox.profile=default 

    должно сработать. ошибка исправлена .

    Просто обновите свой сервер selenium.

    Мне было любопытно об этом, и что я должен был работать очень просто. Я использую команду /Applications/Firefox.app/Contents/MacOS/firefox-bin -P для вызова диспетчера профилей. После того, как я нашел, какой профиль мне нужно использовать, я использовал следующий код для активации профиля browser = Selenium::WebDriver.for :firefox, :profile => "batman" .

    Это поместило все мои закладки и плагины, которые были связаны с этим профилем.

    Надеюсь это поможет.

    По моему мнению, невозможно использовать параметр командной строки -Dwebdriver.firefox.profile=<name> поскольку он не будет учитываться в вашем случае использования из-за текущей конструкции кода. Поскольку я столкнулся с той же проблемой и не хотел загружать каталог профиля каждый раз, когда создается новый сеанс, я внедрил этот патч, который вводит новый параметр firefox_profile_name который может использоваться в возможностях JSON для таргетинга определенного профиля Firefox на удаленный сервер. Надеюсь это поможет.

    Я сделал это в Zend вот так:

      public function indexAction(){ $appdata = 'C:\Users\randomname\AppData\Roaming\Mozilla\Firefox' . "\\"; $temp = 'C:\Temp\\'; $hash = md5(rand(0, 999999999999999999)); if(!isset($this->params['p'])){ shell_exec("\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe\" -CreateProfile " . $hash); }else{ $hash = $this->params['p']; } $ini = new Zend_Config_Ini('C:\Users\randomname\AppData\Roaming\Mozilla\Firefox\profiles.ini'); $path = false; foreach ($ini as $key => $value){ if(isset($value->Name) && $value->Name == $hash){ $path = $value->Path; break; } } if($path === false){ die('<pre>No profile found with name: ' . $hash); } echo "<pre>Profile : $hash \nProfile Path : " . $appdata . "$path \n"; echo "Files: \n"; $filesAndDirs = $this->getAllFiles($appdata . $path); $files = $filesAndDirs[0]; foreach ($files as $file){ echo " $file\n"; } echo "Dirs : \n"; $dirs = array_reverse($filesAndDirs[1]); foreach ($dirs as $dir){ echo " $dir\n"; } echo 'Zipping : '; $zip = new ZipArchive(); $zipPath = md5($path) . ".temp.zip"; $zipRet = $zip->open($temp .$zipPath, ZipArchive::CREATE); echo ($zipRet === true)?"Succes\n":"Error $zipRet\n"; echo "Zip name : $zipPath\n"; foreach ($dirs as $dir){ $zipRet = $zip->addEmptyDir($dir); if(!($zipRet === true) ){ echo "Error creating folder: $dir\n"; } } foreach ($files as $file){ $zipRet = $zip->addFile($appdata . $path ."\\". $file,$file); if(!($zipRet === true && file_exists($appdata . $path . "\\". $file) && is_readable($appdata . $path . "\\". $file))){ echo "Error zipping file: $appdata$path/$file\n"; } } $zipRet = $zip->addFile($appdata . $path ."\\prefs.js",'user.js'); if(!($zipRet === true && file_exists($appdata . $path . "\\". $file) && is_readable($appdata . $path . "\\". $file))){ echo "Error zipping file: $appdata$path/$file\n"; } $zipRet = $zip->close(); echo "Closing zip : " . (($zipRet === true)?("Succes\n"):("Error:\n")); if($zipRet !== true){ var_dump($zipRet); } echo "Reading zip in string\n"; $zipString = file_get_contents($temp .$zipPath); echo "Encoding zip\n"; $zipString = base64_encode($zipString); echo $zipString . "\n"; require 'webdriver.php'; echo "Connecting Selenium\n"; $webDriver = new WebDriver("localhost",'4444'); if(!$webDriver->connect("firefox","",array('firefox_profile'=>$zipString)) { die('Selenium is not running'); } } private function getAllFiles($path,$WithPath = false){ $return = array(); $dirs = array(); if (is_dir($path)) { if ($dh = opendir($path)) { while (($file = readdir($dh)) !== false) { if(!in_array($file, array('.','..'))){ if(is_dir($path . "\\" . $file)){ $returned = $this->getAllFiles($path . "\\" . $file,(($WithPath==false)?'':$WithPath) . $file . "\\"); $return = array_merge($return,$returned[0]); $dirs = array_merge($dirs,$returned[1]); $dirs[] = (($WithPath==false)?'':$WithPath) . $file; }else{ $return[] = (($WithPath==false)?'':$WithPath) . $file; } } } closedir($dh); } } return array($return,$dirs); } 

    Идея заключается в том, что вы указываете параметры get / post / zend P с именем профиля, если не произвольным образом создаваться, и он будет застегивать все файлы, помещенные в папку temp, и вставлять их.