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:
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:
0 comments:
Post a Comment