C#中Step文件间共享Driver问题求助:IObjectContainer方案失效
问题解决:SpecFlow Step文件间共享浏览器实例
核心问题分析
你当前的代码里,WebDriverSupport方法不会被SpecFlow自动调用,导致_objectContainer始终为null,执行RegisterInstanceAs时会引发未处理异常,进而让程序卡住。另外,IObjectContainer是由SpecFlow框架自动实例化的,不需要你手动创建,只需通过构造函数注入获取即可。
修正后的Hooks代码
public class RDM_Hooks { private readonly IObjectContainer _objectContainer; private RDM_Website<ChromeDriver> _rdmWebsite; // 通过构造函数注入IObjectContainer,SpecFlow会自动传入实例 public RDM_Hooks(IObjectContainer objectContainer) { _objectContainer = objectContainer; } [BeforeScenario] public void InitWebDriver() { _rdmWebsite = new RDM_Website<ChromeDriver>(); // 将实例注册到容器,确保所有Step类获取到同一个实例 _objectContainer.RegisterInstanceAs<RDM_Website<ChromeDriver>>(_rdmWebsite); } [AfterScenario] public void DisposeWebDriver() { _rdmWebsite.SeleniumDriver.Quit(); _rdmWebsite.SeleniumDriver.Dispose(); } }
Step文件代码无需修改
你的RDM_LoginSteps代码是正确的,通过构造函数注入RDM_Website<ChromeDriver>,SpecFlow会自动从容器中取出你注册的单实例,确保所有Step文件共用同一个浏览器实例。
额外排查点
如果修正后仍然卡住,检查以下内容:
- 确认
RDM_Website<ChromeDriver>内部正确初始化了ChromeDriver,比如ChromeDriver的路径配置正确,没有使用会阻塞启动的参数。 - 检查
VisitHomePage方法是否存在阻塞逻辑(比如无限等待元素)。
内容的提问来源于stack exchange,提问作者Liam Nagle
相关产品推荐
相关产品推荐

