Selenium集成BrowserStack出现IWebDriver报错且driver为null如何解决
问题根因
- 报错
IWebDriver object must implement or wrap a driver that implements IHasInputDevices是因为Selenium的Actions类要求驱动实现IHasInputDevices接口,BrowserStack返回的RemoteWebDriver和你本地项目的Selenium依赖版本不匹配,同时你为不同浏览器配置的BrowserStack端Selenium版本混乱(Chrome用3.14.0、火狐用3.10.0、Edge用3.5.2),进一步加剧了兼容问题。 - driver为空是因为你在
SetUp方法中捕获了初始化driver的异常,仅打印日志没有终止测试执行,driver还未完成赋值就进入了测试用例逻辑。
修复步骤
- 统一Selenium版本
确认本地项目中Selenium.WebDriver、Selenium.SupportNuGet包的版本,将三个浏览器配置中的browserstack.selenium_version参数统一修改为和本地完全一致的版本,避免跨版本兼容问题。 - 优化异常处理逻辑
修改SetUp方法的catch块,打印异常后主动抛出终止测试,避免空driver进入用例:
catch (Exception e) { Console.WriteLine(e); throw; }
- 补充switch默认分支
在driver初始化的switch语句中新增default分支,避免传入未定义的驱动类型时driver未赋值:
default: throw new NotSupportedException($"不支持的驱动类型:{typeof(TWebDriver).Name}");
- 可选:包装RemoteWebDriver兼容接口
如果版本统一后仍报IHasInputDevices相关错误,使用EventFiringWebDriver包装RemoteWebDriver实现兼容,首先引用命名空间:
using OpenQA.Selenium.Support.Events;
然后修改driver初始化代码:
var remoteDriver = new RemoteWebDriver(new Uri("https://hub-cloud.browserstack.com/wd/hub/"), capability); driver = new EventFiringWebDriver(remoteDriver);
内容的提问来源于stack exchange,提问作者Kody Berry
相关产品推荐
相关产品推荐

