Monday, October 8, 2018

Check loading time in WebDriver test during execution

Leave a Comment

I use Selenium WebDriver 3.14 and test is executed in Chrome browser. I need to measure response time of a page in execution time to check it is under a predefined value. If it is greater than this value some additional actions should be done. So I need different solution than System.currentTimeMillis(), because check of this value should be done automatically in background. It is an AJAX like window, so when loading takes too long time, it should be closed by script. Window example:

example window

4 Answers

Answers 1

The typical solution to this is a try/catch against a wait. E.g. if the next step is to click a button that shows once loading completes:

    WebDriverWait wait = new WebDriverWait(driver, LOADING_TIMEOUT);      WebElement webElement;     try {         webElement = wait.until(elementToBeClickable(By.id(id)));     } catch (TimeoutException ex) {         // Close loading window         return;     }      webElement.click(); 

However, there is a common problem if you are using implicit timeouts in Selenium. This doesn't work too well, particularly if the implicit timeout is longer than the LOADING_TIMEOUT, as this slows down the polling cycle in the wait.until().

In this case, the simplest solution is to temporarily reduce the implicit timeout:

    WebDriverWait wait = new WebDriverWait(driver, LOADING_TIMEOUT);      WebElement webElement;     try {         driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);         webElement = wait.until(elementToBeClickable(By.id(id)));     } catch (TimeoutException ex) {         // Delay any further interaction until the timeout has been restored         webElement = null;     } finally {         driver.manage().timeouts().implicitlyWait(DEFAULT_TIMEOUT,                 TimeUnit.SECONDS);     }      if (webElement != null)         webElement.click();     else         // Close loading window 

Answers 2

If I understand correctly, you could decrease time in selenium.waitForPageToLoad("100000"); to a wanted predefined value, let us say 20 seconds. So if you want the page loading to stop if it is not loaded in 20 seconds, try something like this:

long start = System.currentTimeMillis();     try {       selenium.waitForPageToLoad("20000");       System.out.println("The page load is too long!"); } catch {       long timeToLoad= (System.currentTimeMillis()-start);       System.out.println("The page loaded in " +timeToLoad+ " seconds."); } 

Answers 3

You should try setting Logging Preferences through capability CapabilityType.LOGGING_PREFS for performance-log.

For example:

LoggingPreferences logs = new LoggingPreferences();  logs .enable(LogType.PERFORMANCE, Level.ALL); caps.setCapability(CapabilityType.LOGGING_PREFS, logs);  

you can get performance log entries as below.

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {     System.out.println(entry.toString()); } 

Answers 4

I think you're looking for API testing not Automation Testing.

Postman API Testing Setup and Usage Tutorial

Hopefully this will help

edit:

Alternatively, a more lightweight solution for API testing:

Online API tester

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment