我正在从事Web自动化测试,我计划使用Selenium。我使用Selenium来操作Edge浏览器进行测试。我用 C# 创建控制台应用程序。
EdgeOptions edgeOps = new EdgeOptions();
edgeOps.AddArgument("--in-process-gpu");
edgeOps.AddArgument("--ignore-certificate-errors");
edgeOps.AddArgument("--ignore-ssl-error");
edgeOps.AddArgument("--start-maximized");
edgeOps.AddUserProfilePreference("user_experience_metrics", new { personalization_data_consent_enabled = true });
driver = new EdgeDriver(edgeOps);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(2000);
我通过上面的代码创建网络驱动程序实例并执行非常简单的操作。有用。 但我观察到,当我在 VS 中在调试模式下按 F5 运行代码并从命令行运行编译后的可执行文件时,速度差异很大。
在VS调试模式下,代码在22秒内完成。但在命令行下只用了6秒。 我尝试添加:
edgeOps.AddArgument("--headless");
而当我在VS调试模式下运行时,消耗的时间也降到了6秒,和命令行花费的时间几乎相同。
我注意到,当在VS调试模式下的headed模式下执行时,鼠标光标闪烁得非常频繁,我猜想一些进程间通信是在幕后进行的。
我还注意到每个操作,例如 caputer 一个元素,然后发送 key 来为该元素分配字符串值,执行速度比没有 VS 调试器时非常慢。我的意思是每个步骤的间隔似乎比没有调试器时要长。
此外,我使用 NUnit 创建测试用例并在 head 模式下运行相同的操作。 NUnit 测试用例运行的持续时间甚至比 VS 调试模式长约 3 秒。我认为 NUnit 比 VS 调试器执行额外的初始化,因此它花费更多时间,但 Selenium 部分时间消耗几乎相同。
我希望弄清楚为什么selenium在VS调试模式和/或NUnit中的headed模式下运行如此慢?
执行速度的差异可能是由于在调试模式下运行代码以及在 Visual Studio 中运行的其他调试和诊断工具的开销造成的。虽然我还没有测量性能差异,但我可以说,我确实注意到在 Visual Studio 中调试时运行自动化代码(或任何代码)的速度要慢得多。
这是预期的行为。
通过 Visual Studio 进行调试时,您可能无法采取很多措施来加快速度。尝试关闭 Visual Studio 中所有不必要的诊断和调试工具。否则,坐下来喝杯咖啡或茶。如果老板走过,告诉他们你正在进行测试。
为什么不呢? 开发人员也做类似的事情。