Selenium WebDriverを使用してページをロードする正確な時間を取得するにはどうすればよいですか?
Thread.sleepを使用します
暗黙的に使用します
webDriverWaitを使用します
しかし、Selenium WebDriverを使用してページをロードする正確な時間を取得するにはどうすればよいですか?
Selenium WebDriver(別名Selenium 2)を使用してページを完全にロードするのにかかる時間を調べようとしている場合。
通常、WebDriverは、ページが完全に読み込まれた後にのみ、コードに制御を戻す必要があります。
したがって、次のSelenium Javaコードは、ページの読み込み時間を見つけるのに役立つ可能性があります-
long start = System.currentTimeMillis();
driver.get("Some url");
long finish = System.currentTimeMillis();
long totalTime = finish - start;
System.out.println("Total Time for page load - "+totalTime);
これが機能しない場合は、ページに要素が表示されるまで待つ必要があります-
long start = System.currentTimeMillis();
driver.get("Some url");
WebElement ele = driver.findElement(By.id("ID of some element on the page which will load"));
long finish = System.currentTimeMillis();
long totalTime = finish - start;
System.out.println("Total Time for page load - "+totalTime);
Org.Apache.commons.lang3.timeパッケージのStopWatchオブジェクトを使用できます。以下は、Javaを使用したSeleniumWebDriverの完全なコードです。
import org.Apache.commons.lang3.time.StopWatch;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.openqa.Selenium.support.ui.ExpectedConditions;
import org.openqa.Selenium.support.ui.WebDriverWait;
public class TimerInSeleniumWebDriver {
public static void main(String[] args) {
WebDriver driver;
driver = new FirefoxDriver();
StopWatch pageLoad = new StopWatch();
pageLoad.start();
//Open your web app (In my case, I opened facebook)
driver.get("https://www.facebook.com/");
// Wait for the required any element (I am waiting for Login button in fb)
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("u_0_l")));
pageLoad.stop();
//Get the time
long pageLoadTime_ms = pageLoad.getTime();
long pageLoadTime_Seconds = pageLoadTime_ms / 1000;
System.out.println("Total Page Load Time: " + pageLoadTime_ms + " milliseconds");
System.out.println("Total Page Load Time: " + pageLoadTime_Seconds + " seconds");
driver.close();
}
}
この要件もあり、ブラウザが提供する performance.timeOrigin オブジェクトを使用しました。 C#で使用しましたが、この質問では、Javaで機能するように@Ripon AlWasimの回答を変更しました。
import org.Apache.commons.lang3.time.StopWatch;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.openqa.Selenium.support.ui.ExpectedConditions;
import org.openqa.Selenium.support.ui.WebDriverWait;
public class TimerInSeleniumWebDriver {
public static void main(String[] args) {
WebDriver driver;
driver = new FirefoxDriver();
//Open your web app (In my case, I opened facebook)
driver.get("https://www.facebook.com/");
// Wait for the required any element (I am waiting for Login button in fb)
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("u_0_l")));
//Get the time
long pageLoadTime_ms = getPageLoadTime();
long pageLoadTime_Seconds = pageLoadTime_ms / 1000;
System.out.println("Total Page Load Time: " + pageLoadTime_ms + " milliseconds");
System.out.println("Total Page Load Time: " + pageLoadTime_Seconds + " seconds");
driver.close();
}
public static long getPageLoadTime(WebDriver driver){
//Creating the JavascriptExecutor interface object by Type casting
JavascriptExecutor js = (JavascriptExecutor)driver;
//This will get you the time passed since you page navigation started
return (Long)((JavascriptExecutor)driver).executeScript("return Date.now() - performance.timeOrigin;"");
}
}
ページの読み込み時間を取得する必要がある場合は、次のメソッドを呼び出すだけです。
public static long getPageLoadTime(WebDriver driver){
//Creating the JavascriptExecutor interface object by Type casting
JavascriptExecutor js = (JavascriptExecutor)driver;
//This will get you the time passed since you page navigation started
return (Long)((JavascriptExecutor)driver).executeScript("return Date.now() - performance.timeOrigin;"");
}
ページの読み込みがどこから始まったかを心配する必要はありませんが、他の回答と同じように、ページの読み込みが終了した直後に配置する必要があります。
これはStopWatchのように機能しますが、よりクリーンです(開始、停止、リセットは必要ありません)。