Bird
Raised Fist0
Selenium Pythontesting~20 mins

Performance metrics collection in Selenium Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Performance Metrics Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Extracting page load time using Selenium and Performance API

You want to measure the page load time of a website using Selenium in Python. Which code snippet correctly extracts the loadEventEnd and navigationStart timing values and calculates the load time in milliseconds?

Selenium Python
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://example.com')

# Your code here to get load time

load_time = driver.execute_script('return window.performance.timing.loadEventEnd - window.performance.timing.navigationStart;')
print(load_time)
driver.quit()
Aload_time = driver.execute_script('return window.performance.timing.domComplete - window.performance.timing.domLoading;')
Bload_time = driver.execute_script('return window.performance.timing.loadEventEnd - window.performance.timing.navigationStart;')
Cload_time = driver.execute_script('return window.performance.timing.responseEnd - window.performance.timing.requestStart;')
Dload_time = driver.execute_script('return window.performance.timing.fetchStart - window.performance.timing.navigationStart;')
Attempts:
2 left
💡 Hint

Look for the difference between the event when the page finishes loading and when navigation started.

🧠 Conceptual
intermediate
1:30remaining
Understanding Navigation Timing API properties

Which of the following window.performance.timing properties represents the moment when the browser starts fetching the document?

AfetchStart
BnavigationStart
CdomLoading
DresponseStart
Attempts:
2 left
💡 Hint

Think about when the browser actually begins to request the document from the server.

📝 Syntax
advanced
2:30remaining
Correctly retrieving First Contentful Paint (FCP) metric

You want to get the First Contentful Paint (FCP) metric using Selenium's execute_script method. Which code snippet correctly retrieves FCP from the Performance API?

Selenium Python
fcp = driver.execute_script('''
  const perfEntries = performance.getEntriesByType('paint');
  for (const entry of perfEntries) {
    if (entry.name === 'first-contentful-paint') {
      return entry.startTime;
    }
  }
  return -1;
''')
Afcp = driver.execute_script('return performance.getEntriesByType("paint")[0].startTime;')
Bfcp = driver.execute_script('return performance.getEntriesByName("first-contentful-paint")[0].startTime;')
Cfcp = driver.execute_script('return performance.timing.firstContentfulPaint;')
Dfcp = driver.execute_script('return performance.getEntriesByType("paint").find(e => e.name === "first-contentful-paint").startTime;')
Attempts:
2 left
💡 Hint

Use getEntriesByType('paint') and find the entry with name first-contentful-paint.

🔧 Debug
advanced
2:00remaining
Diagnosing error when accessing Performance API in Selenium

You run this code to get navigation timing but get an error: JavascriptException: window.performance is undefined. What is the most likely cause?

Selenium Python
timing = driver.execute_script('return window.performance.timing')
AThe page has not fully loaded before the script runs, so <code>window.performance</code> is not available yet.
BThe browser driver does not support the Performance API.
CThe URL loaded is a blank page or about:blank, which has no performance data.
DYou need to enable browser performance logging in Selenium options before accessing <code>window.performance</code>.
Attempts:
2 left
💡 Hint

Check what page is loaded before accessing performance data.

❓ optimization
expert
3:00remaining
Efficiently collecting multiple performance metrics in one script

You want to collect loadEventEnd, domContentLoadedEventEnd, and first-contentful-paint metrics in a single Selenium execute_script call. Which code snippet correctly returns all three as a dictionary?

A
return {
  loadEventEnd: performance.timing.loadEventEnd - performance.timing.navigationStart,
  domContentLoadedEventEnd: performance.timing.domContentLoadedEventEnd - performance.timing.navigationStart,
  fcp: performance.getEntriesByType('paint').filter(e =&gt; e.name === 'first-contentful-paint')[0].startTime
}
B
return {
  loadEventEnd: window.performance.timing.loadEventEnd,
  domContentLoadedEventEnd: window.performance.timing.domContentLoadedEventEnd,
  fcp: window.performance.getEntriesByName('first-contentful-paint')[0].startTime
}
C
return {
  loadEventEnd: performance.timing.loadEventEnd,
  domContentLoadedEventEnd: performance.timing.domContentLoadedEventEnd,
  fcp: performance.getEntriesByType('paint').find(e =&gt; e.name === 'first-contentful-paint').startTime
}
D
return {
  loadEventEnd: performance.timing.loadEventEnd,
  domContentLoadedEventEnd: performance.timing.domContentLoadedEventEnd,
  fcp: performance.getEntriesByType('paint')[0].startTime
}
Attempts:
2 left
💡 Hint

Calculate relative times from navigationStart and correctly find the FCP entry.

Practice

(1/5)
1. What is the main purpose of collecting performance metrics in Selenium tests?
easy
A. To check if the page layout matches the design
B. To verify the correctness of form inputs
C. To measure how fast a web page and its resources load
D. To test user login functionality

Solution

  1. Step 1: Understand performance metrics

    Performance metrics focus on timing data related to page loading and resource fetching.
  2. Step 2: Identify the purpose in Selenium context

    In Selenium, performance metrics help measure loading speed, not layout or input correctness.
  3. Final Answer:

    To measure how fast a web page and its resources load -> Option C
  4. Quick Check:

    Performance metrics = loading speed [OK]
Hint: Performance metrics = page and resource load times [OK]
Common Mistakes:
  • Confusing performance metrics with UI layout checks
  • Thinking performance metrics test form validation
  • Assuming performance metrics check user actions
2. Which Selenium Python code snippet correctly executes JavaScript to get the navigation start time from the performance object?
easy
A. driver.execute_script('return window.performance.timing.navigationStart;')
B. driver.execute_script('window.performance.navigationStart')
C. driver.execute_script('return window.performance.navigationStart')
D. driver.execute_script('window.performance.timing.navigationStart')

Solution

  1. Step 1: Identify correct JavaScript property

    The navigation start time is under window.performance.timing.navigationStart.
  2. Step 2: Check correct Selenium syntax

    Use return keyword and full property path with semicolon for valid JS execution.
  3. Final Answer:

    driver.execute_script('return window.performance.timing.navigationStart;') -> Option A
  4. Quick Check:

    Correct JS property and return statement = driver.execute_script('return window.performance.timing.navigationStart;') [OK]
Hint: Use full path with return and semicolon in execute_script [OK]
Common Mistakes:
  • Omitting 'return' keyword in execute_script
  • Using wrong property path without 'timing'
  • Missing semicolon causing JS errors
3. Given the following Selenium Python code snippet, what will be the output if navigationStart is 1000 and loadEventEnd is 3500?
nav_start = driver.execute_script('return window.performance.timing.navigationStart;')
load_end = driver.execute_script('return window.performance.timing.loadEventEnd;')
load_time = load_end - nav_start
print(load_time)
medium
A. 2500
B. 4500
C. 3500
D. 1000

Solution

  1. Step 1: Understand the variables

    nav_start = 1000, load_end = 3500 as given.
  2. Step 2: Calculate load_time

    load_time = load_end - nav_start = 3500 - 1000 = 2500.
  3. Final Answer:

    2500 -> Option A
  4. Quick Check:

    3500 - 1000 = 2500 [OK]
Hint: Subtract navigationStart from loadEventEnd for load time [OK]
Common Mistakes:
  • Adding instead of subtracting timestamps
  • Using wrong variable names
  • Confusing loadEventEnd with other timing values
4. Identify the error in this Selenium Python code snippet for collecting page load time:
nav_start = driver.execute_script('return window.performance.timing.navigationStart')
load_end = driver.execute_script('return window.performance.timing.loadEventEnd')
load_time = nav_start - load_end
print(load_time)
medium
A. Variables nav_start and load_end are not defined
B. Missing semicolons in JavaScript cause syntax error
C. Using 'driver.execute_script' is incorrect for performance data
D. The subtraction order is reversed, causing negative load time

Solution

  1. Step 1: Check subtraction logic

    Load time should be load_end - nav_start, not nav_start - load_end.
  2. Step 2: Understand impact of reversed subtraction

    Reversed order results in negative load time, which is incorrect.
  3. Final Answer:

    The subtraction order is reversed, causing negative load time -> Option D
  4. Quick Check:

    Correct subtraction order = load_end - nav_start [OK]
Hint: Subtract navigationStart from loadEventEnd, not vice versa [OK]
Common Mistakes:
  • Reversing subtraction causing negative results
  • Assuming missing semicolons cause errors in this context
  • Thinking execute_script can't get performance data
5. You want to collect multiple performance metrics in Selenium Python: navigationStart, responseStart, and loadEventEnd. Which code snippet correctly collects these and calculates the total load time from navigationStart to loadEventEnd?
hard
A. nav = driver.execute_script('window.performance.timing.navigationStart') resp = driver.execute_script('window.performance.timing.responseStart') load = driver.execute_script('window.performance.timing.loadEventEnd') total_load = resp - nav print(total_load)
B. nav = driver.execute_script('return window.performance.timing.navigationStart;') resp = driver.execute_script('return window.performance.timing.responseStart;') load = driver.execute_script('return window.performance.timing.loadEventEnd;') total_load = load - nav print(total_load)
C. nav = driver.execute_script('return window.performance.navigationStart;') resp = driver.execute_script('return window.performance.responseStart;') load = driver.execute_script('return window.performance.loadEventEnd;') total_load = load - nav print(total_load)
D. nav = driver.execute_script('return window.performance.timing.navigationStart;') resp = driver.execute_script('return window.performance.timing.responseStart;') load = driver.execute_script('return window.performance.timing.loadEventEnd;') total_load = resp - load print(total_load)

Solution

  1. Step 1: Verify JavaScript property paths

    Performance timing properties are under window.performance.timing with return keyword.
  2. Step 2: Check calculation logic

    Total load time is loadEventEnd minus navigationStart, so load - nav is correct.
  3. Final Answer:

    nav = driver.execute_script('return window.performance.timing.navigationStart;') resp = driver.execute_script('return window.performance.timing.responseStart;') load = driver.execute_script('return window.performance.timing.loadEventEnd;') total_load = load - nav print(total_load) -> Option B
  4. Quick Check:

    Correct property path and subtraction order = nav = driver.execute_script('return window.performance.timing.navigationStart;') resp = driver.execute_script('return window.performance.timing.responseStart;') load = driver.execute_script('return window.performance.timing.loadEventEnd;') total_load = load - nav print(total_load) [OK]
Hint: Use full timing path and subtract navigationStart from loadEventEnd [OK]
Common Mistakes:
  • Using wrong property paths without 'timing'
  • Calculating load time with wrong subtraction order
  • Omitting 'return' in execute_script calls
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard