.NET6.0框架升级后Selenium测试变慢的优化咨询
.NET 6.0升级后Selenium测试性能优化方案
问题背景
测试项目框架升级至.NET 6.0后,Selenium测试运行速度明显变慢。由于WinAppDriver暂未兼容W3C标准,无法将Selenium.Support和WebDriver升级至4.x版本(当前使用3.141.0),需针对性优化测试运行效率。
项目配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0-windows</TargetFramework> <OutputType>Library</OutputType> <RootNamespace>test</RootNamespace> <AssemblyName>test</AssemblyName> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <AssemblyTitle>test</AssemblyTitle> <Product>test</Product> <Copyright>Copyright © 2019</Copyright> <AssemblyVersion>1.0.0.0</AssemblyVersion> <FileVersion>1.0.0.0</FileVersion> </PropertyGroup> <ItemGroup> <None Update="test.runsettings"> <SubType>Designer</SubType> </None> </ItemGroup> <ItemGroup> <PackageReference Include="DnsClient" Version="1.0.7" /> <PackageReference Include="ExtentReports.signed" Version="3.1.3" /> <PackageReference Include="Microsoft.AspNet.Razor" Version="3.2.9" /> <PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" /> <PackageReference Include="MongoDB.Bson" Version="2.7.2" /> <PackageReference Include="MongoDB.Driver" Version="2.7.2" /> <PackageReference Include="MongoDB.Driver.Core" Version="2.7.2" /> <PackageReference Include="NUnit" Version="3.13.2" /> <PackageReference Include="NUnit3TestAdapter" Version="4.4.2" /> <PackageReference Include="RazorEngine" Version="3.10.0" /> <PackageReference Include="System.Buffers" Version="4.5.1" /> <PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" /> <PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="RestSharp" Version="106.15.0" /> <PackageReference Include="Selenium.Chrome.WebDriver" Version="85.0.0" /> <PackageReference Include="Selenium.Support" Version="3.141.0" /> <PackageReference Include="Selenium.WebDriver" Version="3.141.0" /> <PackageReference Include="System.Buffers" Version="4.5.1" /> </ItemGroup> </Project>
性能优化方案
1. 匹配浏览器与驱动版本
当前Selenium.Chrome.WebDriver版本为85.0.0,需确保本地Chrome浏览器版本与驱动完全一致,版本不匹配会导致启动延迟、命令执行卡顿。可升级驱动至Selenium 3.141.0支持的最高兼容版本(该版本支持Chrome 94及以下)。
2. 启用Chrome无头模式
初始化ChromeDriver时添加无头参数,减少UI渲染开销:
var options = new ChromeOptions(); options.AddArgument("--headless"); options.AddArgument("--disable-gpu"); options.AddArgument("--no-sandbox"); // 规避权限问题 var driver = new ChromeDriver(options);
3. 优化元素等待策略
- 彻底替换
Thread.Sleep(),改用WebDriverWait实现显式等待,仅在元素满足状态条件时继续执行:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); var targetElement = wait.Until(d => d.FindElement(By.Id("target-element")));
- 调整全局隐式等待时间,设置合理默认值(如3秒),特殊场景用显式等待覆盖,避免无意义的长时间等待。
4. 复用浏览器实例
在测试类的SetUpFixture中初始化一次浏览器,TearDownFixture中统一关闭,减少进程启动销毁的开销。测试用例执行后需清理页面状态(如清除Cookie、刷新页面),避免测试间数据污染。
5. 优化.NET 6.0编译配置
在项目文件中添加以下配置,启用运行时优化:
<PropertyGroup> <Optimize>true</Optimize> <TieredCompilation>true</TieredCompilation> <TieredCompilationQuickJit>true</TieredCompilationQuickJit> </PropertyGroup>
该配置会让.NET运行时生成更高效的机器码,提升测试代码执行速度。
6. 清理冗余依赖
移除项目中重复的System.Buffers包引用;检查并删除未实际使用的NuGet包(如DnsClient、MongoDB系列包若未参与测试逻辑),减少项目加载开销。
7. 并行执行测试
在test.runsettings中配置NUnit并行测试,利用多核CPU提升效率:
<RunSettings> <NUnit> <Parallelize> <Workers>4</Workers> <!-- 根据CPU核心数调整 --> <Scope>Fixture</Scope> </Parallelize> </NUnit> </RunSettings>
注意并行执行时需保证每个测试用例使用独立浏览器实例(未复用实例场景),避免资源竞争。
8. 禁用Chrome冗余功能
添加更多启动参数关闭不必要的功能:
options.AddArgument("--disable-extensions"); options.AddArgument("--disable-plugins"); options.AddArgument("--disable-images"); // 仅当测试无需验证图片加载时使用 options.AddArgument("--window-size=1920,1080"); // 固定窗口大小,避免布局重绘
内容的提问来源于stack exchange,提问作者Praveen K
相关产品推荐
相关产品推荐

