如何用Selenium 4和PowerShell在浏览器中测量操作耗时?
正确实现方案
替代废弃的PerformanceTiming,需通过浏览器performance接口获取具体的PerformanceNavigationTiming实例,以下是适配你的流程的代码:
Add-Type -Path "<path to web driver>\WebDriver.dll" $options = New-Object OpenQA.Selenium.Chrome.ChromeOptions $options.AddArgument("--disable-gpu") $driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($options) # ... 执行登录、加载数据库条目的现有逻辑 ... # 获取当前页面的导航性能条目 $navEntry = $driver.ExecuteScript("return performance.getEntriesByType('navigation')[0];") # 标记笔记操作开始的高精度时间点 $startTime = $driver.ExecuteScript("return window.performance.now();") # ... 执行打开笔记区域、输入内容、保存的操作 ... # 标记笔记操作结束的时间点 $endTime = $driver.ExecuteScript("return window.performance.now();") # 计算操作耗时(单位:毫秒) $operationDuration = $endTime - $startTime Write-Host "笔记操作总耗时:$operationDuration ms" # 若需统计页面导航阶段耗时(比如从导航开始到DOM加载完成) $pageLoadDuration = $navEntry.DomComplete - $navEntry.NavigationStart Write-Host "页面加载耗时:$pageLoadDuration ms"
错误原因解析
你之前的调用方式存在两个问题:
PerformanceEntry是抽象类,并非可直接访问的实例,必须通过performance.getEntriesByType('navigation')获取对应页面的导航条目对象。- 直接引用
performanceEntry会因未定义变量报错,因为这个名称并未指向任何实际的性能条目实例。
补充说明
performance.now()提供相对于页面初始化的高精度计时,适合测量特定交互操作的耗时,比旧的PerformanceTiming时间戳更灵活。- 若需追踪多段操作的耗时,可在关键节点多次调用
performance.now()并记录差值。
内容的提问来源于stack exchange,提问作者StackExchangeGuy
相关产品推荐
相关产品推荐

