使用SeleniumWebDriver和原生javascript来衡量性能

本文关键字:性能 javascript SeleniumWebDriver 原生 使用 | 更新日期: 2023-09-27 18:19:10

让我们假设当我点击网页上的按钮时执行了一些操作。假设它需要X秒,在这几秒钟内,在页面中央显示一个div。当动作处理完成后,div被移除,焦点转到元素E

1)我用Selenium (c#): 写了一个测试
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性能使用硒?)

使用SeleniumWebDriver和原生javascript来衡量性能

John Koerner的评论是正确的。你这是在拿苹果和橘子作比较。以下是影响差异的一些因素:

  1. Selenium使用有线协议与浏览器通信。它必须接受你的参数,封送它们,将它们发送给浏览器,等待响应,反封送返回值并将其提供给你的代码。这是在添加到任何DOM操作中。

  2. 您的Selenium计时包括单击操作作为计时的一部分,而您在事件处理程序中启动JavaScript计时。当您要求Selenium单击按钮时,它会执行一些家务管理工作,例如检查按钮是否可见,如果不可见则将其带入视图。你的Selenium计时包含了这个成本,但是你的JavaScript计时没有。

  3. 您的Selenium代码受制于所设置的隐式等待值。我通常不使用隐式等待,但我刚刚测试了它,发现如果我向Selenium请求元素列表,它会等到隐式等待结束后才告诉我没有元素。

为了更好地了解硒对结果的影响程度,您应该在div出现和去除之间使用不同的延迟进行测试。我真的很怀疑,如果JavaScript的计时是2秒,那么在Selenium中就会变成4秒。

至于使用Selenium进行性能测量,我想说Selenium是一个非常钝的工具。当我担心浏览器中的代码性能时,我会跳过Selenium,直接使用JavaScript。在聚合中,我使用Selenium来了解性能。例如,有几次我重新设计了应用程序的某些核心部分,然后运行了一个使用Selenium的测试套件,结果发现运行整个测试套件的时间大大缩短了。然而,正如我所说,这是直言不讳的。我们说的是秒差,而不是毫秒。