2011-09-07 8 views
9

Selenium2はデフォルトで、新しいプロファイルでfirefoxを起動します。私はデフォルトのためにそれが好きですが、いくつかの良い理由(私のしおり、保存されたパスワードへのアクセス、私のアドオンの使用など)のために、私は私のデフォルトプロファイルから始めたい。Selenium2 firefox:デフォルトプロファイルを使用

supposed to beこれを制御するプロパティがありますが、ドキュメントのソースが同期していないと思います。なぜなら、私の言うところでは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 

(「デフォルトは」profiles.iniで名前ですが、私はまた、profiles.ini内のセクションの名前である「PROFILE0」を試してみました)。

私がアクセスする(JsonWireProtocolを使用しています)PHPWebdriverを使用しています:

$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 

としてセレンを開始: のjava -jarセレンサーバスタンドアロン-2.5.0.jar -Dwebdriver.firefox.bin = "/ usr/local/src/selenium/myfirefox"

Firefoxは起動しますが、デフォルトのプロファイルでは使用しません。さらに悪いことに、すべてがハングします。このように起動したときにseleniumはfirefoxと通信できないようです。

P.S.私はSelenium - Custom Firefox profileを見ました:これを試しました:

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/ 

これは何もしません。私。それはまだここ

答えて

8

Simon Stewart answered this on the mailing list私のためです。

Firefoxのプロファイルを取得し、zip(tgzではなくzip)し、base64でコード化してから/session json requestとして送信します(Capabilitiesのfirefox_profileキーにbase64文字列を入力します)。オブジェクト)。その後、

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

そして、あなたが接続する際にPHPWebDriverを使用している場合:

Linux上でこれを行うには例の方法

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

注:それはまだしませんが私の本当のプロフィール、むしろそれのコピーです。したがって、ブックマークは記憶されず、キャッシュはいっぱいになりません。

+0

本当に助かりました。プロファイルを圧縮してbase64にエンコードするPHPコードが提供されていれば、PHPですべてを行うことができればいいと思います。 – David

+0

すでに何が言われているかを再確認してください...これは行く方法です。私たちがプロセールを通じてすべてのセレン要求をパイプしたいとき、私たちのために完璧に働きました。 –

5

がJava同等である:-(。私はPHPで利用可能な類似したものがあると確信して新しいプロファイルを開始します。

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

あなたがのadditonal拡張したい場合は、このような何かを行うことができます同様。

ProfilesIni profile = new ProfilesIni(); 
FirefoxProfile ffprofile = profile.getProfile("default"); 
ffprofile.addExtension(new File("path/to/my/firebug.xpi")); 
WebDriver driver = new FirefoxDriver(ffprofile); 
+0

ありがとう@nilesh。私はこれがWebDriverを直接使用していると考えています。あなたは 'selenium-server-standalone.jar'を起動していないので、JsonWireProtocolを使用していませんか? –

+0

これはwebdriverを直接使用しています。私はあなたがスタンドアローンの瓶から始めることによって何を意味するか分からない。 WebDriver自体は、JsonWireProtocolを使ってhttp://code.google.com/p/selenium/wiki/JsonWireProtocol – nilesh

+0

ああ、興味深い情報を伝えます。したがって、あなたの上記のJavaスニペットは何とかJSONとWebサービス呼び出しに変わりますか?私はちょうどそれらの呼び出しが何であるかを追跡することができたら、私はそれをPHPライブラリに実装できます。しかし、何をしているのかはあなたが与えたURLには書かれておらず、私はJsonWireProtocolのための他のドキュメントを見ていません。私はセレンの開発者に連絡すると思います。 –

1

私もこのことについて興味があったと私は動作するようになったのは非常に簡単だった。私は、プロファイルマネージャを起動するコマンド/Applications/Firefox.app/Contents/MacOS/firefox-bin -Pを使用し 。私は、私が使用するために必要などのプロファイル見つけた後、私が使用しました次のコードtプロファイルbrowser = Selenium::WebDriver.for :firefox, :profile => "batman"を有効にします。

これは、そのプロファイルに関連付けられたすべてのブックマークとプラグインを取得しました。

これが役に立ちます。

+0

ありがとう@Curtis。そのコマンドはどの言語/ライブラリですか? –

+0

@ダーレン:言語はルビーです。しかし、私はPHPに相当すると確信しています。 –

1

-Dwebdriver.firefox.profile=<name>コマンドラインパラメータを使用することはできません。これは、使用例では考慮されていないためです。現在のコード設計の私は同じ問題に直面し、新しいセッションが作成されるたびにプロファイルディレクトリをアップロードしたくないので、this patchを実装しました。新しいfirefox_profile_nameパラメータを導入しました。これはJSON機能で特定のFirefoxプロファイルをリモートサーバー。お役に立てれば。

+0

Great @Stéphane - 私があなたのパッチを理解していれば、それはまさに私が後にしたものです。私はまだそれをテストしていないが、それは安全ですか? (すなわち、その整理段階でセレンはそれが作成する一時的なプロファイルディレクトリを削除します;それをやめるために明示的なコードは必要ありません) –

+0

はい、安全です。 Seleniumは実際にこのプロファイルの一時的なコピーを作成し、テンプレートのように使用します。 –

1

私はこのようなZendの中でそれをやった:アイデアは、プロファイルの名前でない場合、ランダムなWIL作成することで取得/ポスト/ ZendのパラメータPに与えることで、彼

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); 
} 

すべてのファイルを圧縮してtempフォルダに入れて入れてください。

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

は動作します。バグはfixedです。

あなたのselenium-serverを更新するだけです。

+0

偉大な、感謝ムハンマド。私はちょうどそれが今働くことを確認した。 (ちょっと、それはまだプロファイルのコピーです。つまり、キャッシュ/履歴は記入されていません) –

+1

ああ、私はSSL証明書とdom.max_script_run_timeのようないくつかのプロパティを保存するために使っています。 –

関連する問題