You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中使用Selenium添加自定义Capabilities的正确方法是什么?

解决方法

你遇到的问题是C#版本Selenium 4对自定义capability的内置校验逻辑导致的,不需要自行实现ICapabilities接口,用以下两种官方支持的方案即可实现需求:

方案1:使用三参数重载添加全局能力(兼容全版本Selenium 4)

AddAdditionalCapability的三参数重载支持跳过浏览器能力校验,第三个参数设为true时,自定义能力不会被判定为非法的浏览器配置:

var edgeOptions = new EdgeOptions();
// 正常配置Edge浏览器参数
edgeOptions.UseChromium = true;
edgeOptions.AddArgument("start-maximized");

// 添加SauceLabs自定义capability,第三个参数true表示为全局非浏览器能力
edgeOptions.AddAdditionalCapability("sauce:name", "测试用例名称", true);
edgeOptions.AddAdditionalCapability("sauce:build", "构建版本号", true);
edgeOptions.AddAdditionalCapability("sauce:username", "SauceLabs用户名", true);
edgeOptions.AddAdditionalCapability("sauce:accessKey", "SauceLabs密钥", true);

// 生成capability传给远程驱动
var capabilities = edgeOptions.ToCapabilities();
var driver = new RemoteWebDriver(new Uri("https://ondemand.us-west-1.saucelabs.com/wd/hub"), capabilities);

即使该API标注为废弃,三参数重载在Selenium 4.x全版本都可正常运行。

方案2:使用Selenium 4推荐的非废弃API

如果不想使用标注废弃的方法,直接调用AddAdditionalOption即可,所有带云厂商前缀的自定义能力都会默认跳过浏览器校验:

var edgeOptions = new EdgeOptions();
edgeOptions.UseChromium = true;
// 直接添加SauceLabs自定义配置
edgeOptions.AddAdditionalOption("sauce:name", "测试用例名称");
edgeOptions.AddAdditionalOption("sauce:build", "构建版本号");

// 直接将Options实例传入远程驱动构造函数即可,不需要显式转ICapabilities
var driver = new RemoteWebDriver(new Uri("https://ondemand.us-west-1.saucelabs.com/wd/hub"), edgeOptions);

原理说明

你之前自定义ICapabilities触发空引用异常的原因确实是Selenium内部会将ICapabilities强转为内部接口IHasCapabilitiesDictionary读取存储字典,自定义实现没有内置该存储结构所以报错,不需要手动实现该接口,上述官方方法已经内置处理了能力存储逻辑。

内容的提问来源于stack exchange,提问作者Tollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:36:04