【发布时间】:2020-01-23 01:22:57
【问题描述】:
我可以使用以下代码在 selenium 中计算页面加载时间:
代码:Selenium C#
using OpenQA.Selenium;
double requestStart = (long)((IJavaScriptExecutor)CTest.Driver).ExecuteScript("return window.performance.timing.requestStart");
double domComplete = (long)((IJavaScriptExecutor)CTest.Driver).ExecuteScript("return window.performance.timing.domComplete");
var totaltime = domComplete - requestStart;
通过跟踪和错误,我能够确定 totaltime 上面的代码对应于下图中的值 Load。图像中的 Load 似乎总是与 DOMContentLoaded 变量的值相同。
问题:
- 为什么Finish 的值不一样? Finish 是什么?你如何使用 javascript 的 window.performance.timing 对象来计算它?
- 如何计算从在 Web 浏览器中输入 url(然后按回车键)到最终加载页面上所有内容的时间?
以下文档很好地描述了每个时间变量测量的内容 mozilla-developer timestamp variables,但是 chrome devtools 中的 Finish 值正在搅浑水。
图:从 Chrome 的 Devtool (F12) Network 标签中提取性能信息
编辑:
感谢@wOxxOm。我注意到 Finish 时间在我与网站交互时不断增加(转到网站中的不同页面),而 DOMContentLoaded 和 Load 从未改变在初始加载事件之后。这与您在回复中所说的相对应。 我按照您的建议改用以下代码:
double connectStart = (long)((IJavaScriptExecutor)CTest.Driver).ExecuteScript("return window.performance.timing.connectStart");
double loadEventEnd = (long)((IJavaScriptExecutor)CTest.Driver).ExecuteScript("return window.performance.timing.loadEventEnd");
double newMeasure = (loadEventEnd - connectStart) / 1000.0;
还开始研究 Chrome 77 中的 LCP 功能。
我确实还有一个问题
问题 2: 我最初认为 window.performance 对象中的值会在我点击一个链接(在网站上)时重新填充新值(时间),这会将我带到同一网站内的不同页面.然而,所有的 window.performance 值在网站初始加载后都不会改变(Chrome 的 devtool 网络窗口中的 DOMContentLoaded 和 Load 值在网站中移动时也不会改变)。
问题:为什么 window.performance 中的值从未改变?是因为这是一个 SPA(单页应用程序)吗?当我在不同的网站(旧)中点击时,我观察到 chrome devtool 的 DOMContentLoaded 和 Load 值,每次我进入该网站的新页面时,DOMContentLoaded 和 加载 时间更改为显示网站内每个页面的加载时间(通过单击该网站主菜单中的链接转到不同的页面)。
【问题讨论】:
-
1) "finish" 是根据 performance.getEntries() 中具有最新时间戳的请求计算得出的,但 entryType: "paint" 除外,2) 尝试
connectStart而不是requestStart并减去它来自loadEventEnd,而不是domComplete。 3) 考虑改用LCP: largest-contentful-paint 指标。 -
@wOxxOm,感谢您的回答。测量网站中每个页面的页面负载的正确方法是什么?网站初始加载后,windows.performance 属性不会改变。如果我单击菜单链接转到其他页面,window.performance 属性不会更新以指示单击后需要多长时间才能在网站中显示其他网页。
-
客户端更新不会触发页面加载。所以你是对的,单页应用程序不会触发这些事件。
标签: javascript selenium google-chrome-devtools performance-testing