9

我们如何获得使用 Selenium WebDriver 加载页面的准确时间?

我们使用 Thread.sleep

我们使用隐式等待

我们使用 WebDriverWait

但是我们如何才能获得使用 Selenium WebDriver 加载页面的准确时间呢?

4

5 回答 5

18

如果您想了解使用 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); 
于 2012-06-28T15:47:02.683 回答
5

您可以使用 org.apache.commons.lang3.time 包的 StopWatch 对象。以下是使用 Java 的 Selenium WebDriver 的完整代码:

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();
    }
}
于 2015-10-01T09:46:05.303 回答
0

我也有这个要求,我使用了浏览器提供的performance.timeOrigin对象。我在 C# 中使用它,但对于这个问题,我修改了@Ripon Al Wasim 的答案,使其适用于 java。

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 类似,但更干净(无需启动、停止、重置)。

于 2020-02-26T20:53:49.497 回答
0

使用 TestListners 获得最佳体验:

@AfterMethod
    public void getResult(ITestResult result) throws Exception {
        String sMethodName = "";
        Long lExecutionTime;
        sMethodName = result.getMethod().getMethodName().toString();
        lExecutionTime = (result.getEndMillis() - result.getStartMillis()) / 1000;
        System.out.println(sMethodName + " execution Time is : " + lExecutionTime + "sec.");
    }
于 2020-09-02T16:30:03.573 回答
-12

driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);

于 2014-04-22T12:32:24.157 回答