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

标签 c# javascript selenium selenium-webdriver

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

相关文章:

c# - 是否有 VC++ 的依赖管理器?

c# - 解耦依赖于构造函数接受参数的另一个类的类

c# - 我的用户控件中的绑定(bind)不起作用

javascript - laravel javascript 单击后为表中的所有按钮获取相同的 id

python - selenium 通过 python 中的可见文本进行选择

c# - 如何根据另一行数据 GridView 汇总一行?

javascript - 如何找到一个网页元素相对于另一个网页元素的位置?

java - 使用 selenium 从弹出窗口/通过鼠标悬停在 Web 元素上提取文本

javascript - 如何在网页上找到这个元素?

javascript - 当用户从 React Native 中的另一个页面导航回页面时,如何重新加载页面?