gpt4 book ai didi

c# - 使用 Selenium WebDriver 与 native javascript 衡量性能

转载 作者:行者123 更新时间:2023-12-03 12:00:26 29 4
gpt4 key购买 nike

假设当我单击网页上的按钮时执行了某些操作。假设需要 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 按钮处理程序:

console.time('test');

文本框上的 GotFocus 处理程序(元素 E):

console.log(document.getElementById('My_PopupDivId')); // just to be sure - it returns null
console.timeEnd('test');
<小时/>

出于某种原因,Selenium 测量值比直接 JavaScript 测量值大约 2 倍。(400 毫秒与 800 毫秒)。

这是我的代码有问题还是只是 Selenium 不准确(使用 Selenium 测量 javascript/DOM 性能等内容实际上有意义吗?)

最佳答案

约翰·科纳 (John Koerner) 关于金钱的评论是正确的。您正在比较苹果和橙子。以下是影响差异的一些因素:

  1. Selenium 使用有线协议(protocol)与您的浏览器通信。它必须获取您的参数,编码它们,将它们发送到浏览器,等待响应,解码返回值并将其提供给您的代码。这是对所执行的任何 DOM 操作的附加

  2. 您的 Selenium 计时将点击操作作为计时的一部分,而您在点击的事件处理程序内部启动 JavaScript 计时。当您要求 Selenium 单击按钮时,Selenium 会执行一些内务工作,例如检查它是否可见,如果不可见则将其带入 View 。您的 Selenium 计时包括此成本,但您的 JavaScript 计时不包括此成本。

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

    <

为了更好地了解 Selenium 对结果的影响程度,您应该在 div 的出现和删除之间尝试使用不同的延迟进行测试。我真的怀疑 JavaScript 计时会产生 2 秒的情况会在 Selenium 中转换为 4 秒计时。

至于使用 Selenium 进行性能测量,我认为 Selenium 对于此类任务来说是一个非常生硬的工具。当我担心浏览器中的代码性能时,我会跳过 Selenium 并直接使用 JavaScript。我使用 Selenium 来了解聚合中的性能。例如,有时我重新设计了应用程序的某些核心部分,然后运行一个使用 Selenium 的测试套件,发现运行整个测试套件的时间显着缩短。然而,正如我所说,这是直率的。我们谈论的是秒的差异,而不是毫秒。

关于c# - 使用 Selenium WebDriver 与 native javascript 衡量性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25447725/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com