Skip to content

Commit e3ad53c

Browse files
committed
Add Largest Contentful Paint (LCP) metric for chromium browsers
1 parent 6e9340a commit e3ad53c

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

Framework/Built_In_Automation/Web/Selenium/BuiltInFunctions.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,31 @@
8282
selenium_details = {}
8383
default_x, default_y = 1920, 1080
8484

85+
# JavaScript for collecting First Contentful Paint value.
86+
JS_FCP = '''
87+
return performance.getEntriesByName("first-contentful-paint")[0].startTime
88+
'''
89+
90+
# JavaScript for collecting Largest Contentful Paint value.
91+
JS_LCP = '''
92+
var args = arguments;
93+
const po = new PerformanceObserver(list => {
94+
const entries = list.getEntries();
95+
const entry = entries[entries.length - 1];
96+
// Process entry as the latest LCP candidate
97+
// LCP is accurate when the renderTime is available.
98+
// Try to avoid this being false by adding Timing-Allow-Origin headers!
99+
const accurateLCP = entry.renderTime ? true : false;
100+
// Use startTime as the LCP timestamp. It will be renderTime if available, or loadTime otherwise.
101+
const largestPaintTime = entry.startTime;
102+
// Send the LCP information for processing.
103+
104+
console.log("[ZeuZ Node] Largest Contentful Paint: ", largestPaintTime);
105+
args[0](largestPaintTime);
106+
});
107+
po.observe({ type: 'largest-contentful-paint', buffered: true });
108+
'''
109+
85110
# if Shared_Resources.Test_Shared_Variables('selenium_driver'): # Check if driver is already set in shared variables
86111
# selenium_driver = Shared_Resources.Get_Shared_Variables('selenium_driver') # Retreive appium driver
87112

@@ -387,6 +412,7 @@ def get_performance_metrics(dataset):
387412
metrics = selenium_details[driver_id]["driver"].execute_cdp_cmd('Performance.getMetrics', {})
388413
perf_json_data = {data["name"]: data["value"] for data in metrics["metrics"]}
389414
Shared_Resources.Set_Shared_Variables(var_name,perf_json_data)
415+
CommonUtil.browser_perf[current_driver_id].append(perf_json_data)
390416
return "passed"
391417
except:
392418
return CommonUtil.Exception_Handler(sys.exc_info())
@@ -975,15 +1001,28 @@ def Go_To_Link(step_data, page_title=False):
9751001
except Exception:
9761002
ErrorMessage = "failed to open your link: %s" % (web_link)
9771003
return CommonUtil.Exception_Handler(sys.exc_info(), None, ErrorMessage)
1004+
1005+
# Collect custom performance metrics
9781006
try:
9791007
if current_driver_id not in CommonUtil.browser_perf:
9801008
metrics = selenium_driver.execute_cdp_cmd('Performance.getMetrics', {})
9811009
metrics_dict = {data["name"]: data["value"] for data in metrics["metrics"]}
1010+
1011+
# FCP - First Contentful Paint
9821012
try:
983-
metrics_dict["first-contentful-paint"] = selenium_driver.execute_script('return performance.getEntriesByName("first-contentful-paint")[0].startTime')
1013+
metrics_dict["first-contentful-paint"] = selenium_driver.execute_script(JS_FCP)
9841014
except:
9851015
metrics_dict["first-contentful-paint"] = 0
1016+
1017+
# LCP - Largest Contenful Paint
1018+
try:
1019+
metrics_dict["largest-contentful-paint"] = selenium_driver.execute_async_script(JS_LCP)
1020+
except:
1021+
metrics_dict["largest-contentful-paint"] = 0
1022+
9861023
CommonUtil.browser_perf[current_driver_id] = [metrics_dict]
1024+
1025+
# CommonUtil.prettify(key="metrics", val=metrics_dict)
9871026
return "passed"
9881027
except:
9891028
return CommonUtil.Exception_Handler(sys.exc_info())

0 commit comments

Comments
 (0)