使用SeleniumWebDriver和原生javascript来衡量性能
本文关键字:性能 javascript SeleniumWebDriver 原生 使用 | 更新日期: 2023-09-27 18:19:10
让我们假设当我点击网页上的按钮时执行了一些操作。假设它需要X秒,在这几秒钟内,在页面中央显示一个div
。当动作处理完成后,div
被移除,焦点转到元素E。
stopwatch.Restart();
button.Click();
while (driver.FindElementsById(PopupDivId).Count != 0)
{
Thread.Sleep(10);
}
stopwatch.Stop();
2)和javascript测试(在我的页面内)。简化代码:
OnClick button handler:
console.time('test');
textbox (element E)的GotFocus处理程序:
console.log(document.getElementById('My_PopupDivId')); // just to be sure - it returns null
console.timeEnd('test');
由于某些原因,Selenium测量值比直接javascript测量值大2倍。(400ms vs 800ms).
这是我的代码有问题,或者它只是硒不准确(它实际上是有意义的衡量这样的东西javascript/DOM性能使用硒?)
John Koerner的评论是正确的。你这是在拿苹果和橘子作比较。以下是影响差异的一些因素:
-
Selenium使用有线协议与浏览器通信。它必须接受你的参数,封送它们,将它们发送给浏览器,等待响应,反封送返回值并将其提供给你的代码。这是在将添加到任何DOM操作中。
-
您的Selenium计时包括单击操作作为计时的一部分,而您在事件处理程序中启动JavaScript计时。当您要求Selenium单击按钮时,它会执行一些家务管理工作,例如检查按钮是否可见,如果不可见则将其带入视图。你的Selenium计时包含了这个成本,但是你的JavaScript计时没有。
-
您的Selenium代码受制于所设置的隐式等待值。我通常不使用隐式等待,但我刚刚测试了它,发现如果我向Selenium请求元素列表,它会等到隐式等待结束后才告诉我没有元素。
为了更好地了解硒对结果的影响程度,您应该在div
出现和去除之间使用不同的延迟进行测试。我真的很怀疑,如果JavaScript的计时是2秒,那么在Selenium中就会变成4秒。
至于使用Selenium进行性能测量,我想说Selenium是一个非常钝的工具。当我担心浏览器中的代码性能时,我会跳过Selenium,直接使用JavaScript。在聚合中,我使用Selenium来了解性能。例如,有几次我重新设计了应用程序的某些核心部分,然后运行了一个使用Selenium的测试套件,结果发现运行整个测试套件的时间大大缩短了。然而,正如我所说,这是直言不讳的。我们说的是秒差,而不是毫秒。