使用NUnit3并行执行IE11自动化测试时遇Error 404问题求助
从你的测试代码和问题描述来看,核心问题是并行测试启动后Grid节点能打开浏览器但后续执行报错404,这通常和Selenium Grid的配置、NUnit并行策略或者IE驱动的环境设置有关,我整理了几个最可能的遗漏点:
1. 错误直接连接Grid节点而非Hub
你的代码里直接把RemoteWebDriver指向了节点端口http://127.0.0.1:4422/wd/hub/,但并行测试的正确做法是连接Grid Hub的地址(默认端口是4444),由Hub负责把测试请求分配到空闲的节点上。如果直接连节点,当节点的maxSession默认是1时,第二个并行测试请求就会因节点无可用会话而返回404错误。
修改RemoteWebDriver的目标URL为Hub地址:
_webdriver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub/"), caps.ToCapabilities());
同时启动节点时要指定Hub的注册地址,比如:
java -jar selenium-server-standalone-xxx.jar -role node -hub http://localhost:4444/grid/register -port 4422 -maxSession 2
这里的-maxSession 2是允许节点同时处理2个会话,适配你的并行需求。
2. 未配置NUnit全局并行策略
仅仅给测试方法加[Parallelizable(ParallelScope.Self)]还不够,需要在NUnit的配置文件(nunit3.config)中明确开启并行支持,确保NUnit能正确调度并行测试:
<nunit> <test-run parallel="true" workers="2"> <assembly parallelize="true" scope="Self"/> </test-run> </nunit>
workers="2"对应你启用的Grid节点数量或期望的并行线程数。
3. Selenium版本兼容性问题
必须确保以下组件版本完全匹配:
- Grid Hub和所有节点使用的Selenium Server版本一致
- IEDriverServer的版本与IE11浏览器版本、Selenium Server版本兼容
版本不匹配会导致节点与Hub之间的通信异常,出现看似无关的404错误。
4. IE浏览器的必要环境配置
IE11运行Selenium测试有几个强制要求,哪怕你在代码里设置了IgnoreZoomLevel,也需要检查:
- 所有IE安全区域的保护模式级别设置为相同(全开启或全关闭)
- 确保IEDriverServer的路径在节点启动时通过参数指定:
java -Dwebdriver.ie.driver="C:\path\to\IEDriverServer.exe" -jar selenium-server-standalone-xxx.jar -role node ...
5. 节点注册的浏览器参数是否正确
启动IE节点时,要明确指定浏览器名称和版本,避免Hub无法识别节点的浏览器类型:
java -jar selenium-server-standalone-xxx.jar -role node -hub http://localhost:4444/grid/register -browser browserName=internet explorer,version=11,platform=WINDOWS -port 4422 -maxSession 2
按照以上步骤逐一排查,应该能解决你遇到的404错误。
内容的提问来源于stack exchange,提问作者JumpIntoTheWater

