10

Web サイトのリストの読み込み時間をプログラムでテストしようとしています。目的は、ユーザーが認識するページの読み込み時間を大まかにシミュレートすることです。

私の最初のアプローチは、ループ内で次を呼び出すことです。

    startTime = System.currentTimeMillis();
    driver.get("http://" + url);
    diff = System.currentTimeMillis() - startTime;
    System.out.println("Load time was " + diff);

問題は、ページが実際にロードされる前に時間の結果を取得することがあるため (つまり、50ms の時間を取得する)、制御がdriver.get()完了する前に次の命令に渡されていると思います。

このテストを改善するにはどうすればよいですか?

編集:

user1258245 が示唆したように、要素がロードされるのを待つことができますが、問題は、どのページが事前にロードされているかわからないことです。

4

1 に答える 1

13

これを行うには、意味のあるデータを提供する 2 つの方法があります。

  1. Selenium で Browsermob Proxy を使用します。これは Python の例ですが、Java でもほぼ同じです。

    from browsermobproxy import Server
    server = Server("path/to/browsermob-proxy")
    server.start()
    proxy = server.create_proxy()
    
    from selenium import webdriver
    profile  = webdriver.FirefoxProfile()
    profile.set_proxy(proxy.selenium_proxy())
    driver = webdriver.Firefox(firefox_profile=profile)
    
    proxy.new_har("google")
    driver.get("http://www.google.co.uk")
    proxy.har # returns a HAR JSON blob
    
    proxy.stop()
    driver.quit()
    

から返される HAR ファイルproxy.harは単なる JSON BLOB であり、必要な情報を提供します。今年の初めにブログに書いた

  1. もう 1 つのアプローチは、最新のブラウザーで利用可能なナビゲーションのタイミング仕様を使用することです。必要なことは、JavaScript を実行するだけで、ページの読み込みなどの詳細を取得できます。

    ((JavascriptExecutor)driver).executeScript("var performance = window.performance || {};" + 
                "var timings = performance.timing || {};"+
                "return timings;");
    
    /* The hashmap returned will contain something like the following.
     * The values are in milliseconds since 1/1/1970
     *
     * connectEnd: 1280867925716
     * connectStart: 1280867925687
     * domainLookupEnd: 1280867925687
     * domainLookupStart: 1280867925687
     * fetchStart: 1280867925685
     * legacyNavigationStart: 1280867926028
     * loadEventEnd: 1280867926262
     * loadEventStart: 1280867926155
     * navigationStart: 1280867925685
     * redirectEnd: 0
     * redirectStart: 0
     * requestEnd: 1280867925716
     * requestStart: 1280867925716
     * responseEnd: 1280867925940
     * responseStart: 1280867925919
     * unloadEventEnd: 1280867925940
     */ 
    
于 2012-07-06T14:58:57.173 に答える