2012-10-22 13 views
9

私はWebページのスクリーンショットを撮るためにSelenium WebDriverを使用しています。それは素晴らしい走ります。しかし、私が日食で走った時からスクリーンショットが私のローカルドライブに現れるまでの時間は7〜10秒です。待ち時間の大半はFirefoxを起動しているようだ。Selenium WebDriverは動作しますが、SLOW(Java)

コード:

WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.cnn.com"); 
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
FileUtils.copyFile(scrFile, new File("c:\\test\\screenshot.png")); 

がどのように私は、このプロセスをスピードアップすることができますか?すでに開いているFirefoxブラウザを使用して新しいブラウザを開くときに保存する方法はありますか?このコードは何とか重いですか?

詳細:両方ともEclipseを使用してCentOSボックスとWin7ボックスで試してみました。 myspeedtest.netは22Mbpsのダウンと1Mbpsのアップを示しています。

答えて

10

almost 3 yearsでは、現在実行中のブラウザにWebDriverを添付することをお勧めします。今日まで、この機能はまだ追加されていません。私が知っている限り、Firefoxをもっと速く読み込ませる方法はありません。あなたはいくつかの他のトリックを試すことができます。 .get呼び出すか.click後

Firefoxは 負荷への完全なページを待たないようにするベータ版の機能があります:this pageからの警告を引用

fp.setPreference("webdriver.load.strategy", "unstable") 

。これにより、すぐにfindの結果が になる可能性がありますので、必ず暗黙的または明示的な待機を使用してください。この はFirefoxでのみ利用でき、他のブラウザでは利用できません。

また、loading with a profileを試して、それがまったく役立つかどうかを確認することもできます。私は他の場所で学んだことから、

+0

ワウ。失望している。 Mikeのヘッドアップに感謝します。 – Chris

5

- ブラウザ/プラグイン

  • があなたのIIS(または同等)を設定するために

      自動更新をオフに
    1. アプリのタイムアウトゼロ
    2. に使用するためのベースセレンフィクスチャを作成します。あなたのテストで
    3. セレン
    4. の最新バージョンへ
    5. 更新前のSh
    6. をテストするアプリをウォームアップortテスト
    7. クッキーを事前投入します。

    参考文献:

    https://sqa.stackexchange.com/questions/1988/selenium-reuse-existing-browser-session-instead-of-opening-new-windows

    http://www.codeweavers.net/6-ways-to-speed-up-selenium-tests/

    http://sauceio.com/index.php/2011/02/speed-up-your-selenium-tests/

    この情報がお役に立てば幸い!

  • +2

    私は6つの方法の記事の著者です - あなたが役に立ったことをうれしく思っています。ここにあるものをエコーするためには、アプリのウォームを維持することが重要です。サーバーのタイムアウトを防ぎ、テスト実行中に何も更新しようとしないようにしてください。 – Finglas

    +1

    記事を愛しました! :) –

    1

    私はこの質問にすでに回答していることを認識していますが、これは同じ問題を抱えている人に役立つことを願っています。

    あなたがする必要があるのは、スクリーンショットを撮ることだけです。私はAwesomium.NETを使用することをお勧めします。 http://awesomium.com/

    JavaではなくC#でこれを行うのは、構文が似ているので大きな難点ではありません。 Linux上でアプリケーションを実行したい場合は、C++もサポートしています。私はそれがWebDriverよりもはるかに高速であると推測します。

    使用このあなたがC++を選択した場合:C#の.NETの場合http://labs.awesomium.com/capturing-web-pages-with-c/

    http://awesomium.com/docs/1_7_rc3/sharp_api/

    +0

    Marvコンパイルをクリックして生成されたスクリーンショットを取得するまでにどれくらいの時間がかかりますか? – Chris

    +0

    これにはデッドリンクがあります –

    2

    This threadが可能な説明を示します。

    要約すると、Seleniumはすべてのネットワークカードをループし、仮想ネットワークカードに長時間かかるメソッド(getHostName)を呼び出します。それらを無効にするとスレッドのOPの問題が解決されました。それはIEDriverServer、 の64ビットバージョンで働いていた私にとっては

    (私自身のケースでは、私はそれらのいずれかを無効にして、各テストケースの開始時に待たなければならないことができません...)

    +0

    病気をチェックしてください、更新してくれてありがとう〜! – Chris

    0

    私が追加Value: "true"のプロパティrequireWindowFocus。

    DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer(); 
    capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); 
    
    capabilities.setCapability("requireWindowFocus", true); 
    WebDriver driver = new InternetExplorerDriver(capabilities); 
    
    関連する問題