0

なぜ私は既存のものを使用するように言ったが、SeleniumはWebドライバを使用して一時的なFirefoxプロファイルを作成するのですか?なぜSeleniumはウェブドライバを使用して一時的なFirefoxプロファイルを作成するのですか?

this answerによると、Webドライバを使用してSeleniumが一時的なFirefoxプロファイルを作成するのを止めることはできません。しかし、クロムドライバーで私はこれを達成することができます。だから、なぜFirefoxとは違うのですか?私はFirefoxProfile.csにSelenium repoをチェックし、次のコードsnipetがプロファイルをコピーするために使用された---

public void WriteToDisk() 
    { 
     this.profileDir = GenerateProfileDirectoryName(); 
     if (!string.IsNullOrEmpty(this.sourceProfileDir)) 
     { 
      FileUtilities.CopyDirectory(this.sourceProfileDir, this.profileDir); 
     } 
     else 
     { 
      Directory.CreateDirectory(this.profileDir); 
     } 

     this.InstallExtensions(); 
     this.DeleteLockFiles(); 
     this.DeleteExtensionsCache(); 
     this.UpdateUserPreferences(); 
    } 

しかしchormeのためにはそのような事がありません。

webdriverはfirefoxと通信するための拡張子(webdriver.xpi)をインストールし、chromedriver.exeはchromeとのやりとりに使用するためですか?

これが理由であれば、バージョン3.0ではwebdriverがgeckodriver.exeを使ってfirefoxと通信しています。だからバージョン3.0の後、webdriverはFirefox用の一時プロファイルを作成しますか?

更新: 今日はwebdriverをするのV 3.0+で演奏しlegacymodeをオフにし、最新バージョンはまだrust_mozprofile.wUqPXh48avDRという名前の一時的なプロファイルを生成していることがわかりました。私の仮定は、この一時的なプロファイルが、私は3年前とではないことを確認chromedriver.exeも、一時ファイルのようなタイプを生成chromedriverに使用されてきたRust

で書かれているgeckodriver.exeによって生成されます。専門家の回答が期待されます...

答えて

1

Firefoxのドライバが一時的なプロファイルを使用する主な理由は、Firefoxの複数の独立した同時インスタンスを実行するというユースケースをサポートすることです。 Firefoxが起動すると、プロファイルディレクトリに監視ファイルやロックファイルがドロップされ、ユーザがFirefoxの新しいインスタンスを起動しようとするとそのファイルが検出され、そうしないようにします。 Firefoxがまだこの動作をしているかどうかにかかわらず、ドライバはブラウザのいくつかの古いバージョンで動作する必要があり、それを考慮する必要があります。 WebDriverでこの問題を解決するSeleniumプロジェクトは、ユーザーが特定のプロファイルを使用する場合、そのプロファイルの内容を新しいディレクトリにコピーし、Firefoxを起動してそのコピーを指し示すようにします。

Mozillaの実装はほとんど同じように思えます。私は複数のインスタンスを使用するケースをサポートするのと同じ理由だと思います。

+0

理論的には、あらかじめ作成されたプロファイルが10個ある場合、それらをコピーしないで10個のブラウザを起動するために同時に使用できますか? – Rasel

+1

完了したらセレンがtmpからこれらのプロファイルを削除するといいでしょう。 – glyph

関連する問題