我正在 C# 中使用 Selenium (4.0-rc1),并且想要使用 SauceLabs,要使用此服务,我需要传递自定义功能。
在示例中,它显示了向集合添加一个功能(“string”、“string”),在 Java 代码中,这是正确的方法,但在 C# Selenium 实现中,此接口 ICapability 是只读的。
接口 ICapability 似乎是使用 DriverOptions.ToCapability() 的正确方法,并且我已经实现了自定义 ICapability,但这会生成空引用。在远程驱动程序中查看,代码似乎立即将 ICapability 强制转换为内部接口 IHasCapabilityDictionary[1],我无法实现该接口,我认为这导致我的自定义 ICapability 抛出空引用。
我一定错过了一些简单的东西,因为这似乎是一个常见的需求 - 如何将自定义功能添加到 ICapability 集合中。
编辑
另一件事是,我尝试了已弃用的 DriverOptions.AddAdditionaCapability(name,value),尽管它已经过时,只是为了看看它是否有效,但它会抛出错误“无法解析功能”,因为它无法将自定义功能识别为 MSEdge 的功能选项类可识别。
提前致谢。
这是针对 Sauce 的有效 W3C 测试
[TestMethod]
public void EdgeW3C()
{
//TODO please set your Sauce Labs username/access key in an environment variable
_sauceUserName = Environment.GetEnvironmentVariable("SAUCE_USERNAME");
// Do NOT use EnvironmentVariableTarget as it won't work in CI
_sauceAccessKey = Environment.GetEnvironmentVariable("SAUCE_ACCESS_KEY");
_sauceOptions = new Dictionary<string, object>
{
["username"] = _sauceUserName,
["accessKey"] = _sauceAccessKey,
["name"] = TestContext.TestName
};
var browserOptions = new EdgeOptions
{
BrowserVersion = "latest",
PlatformName = "Windows 10"
//AcceptInsecureCertificates = true //Insecure Certs are Not supported by Edge
};
browserOptions.AddAdditionalOption("sauce:options", _sauceOptions);
_driver = new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"), browserOptions.ToCapabilities(),
TimeSpan.FromSeconds(30));
_driver.Navigate().GoToUrl("https://www.saucedemo.com");
var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(6));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.CssSelector("#user-name")));
}
您可以拉下此存储库并尝试一下
如果您使用 ChromeDrive(主要是 selenium 的 goto 浏览器),请使用以下代码。
var chromeOptions = new ChromeOptions(); //Initiate chrome driver with options
//Adding required options
chromeOptions.AddUserProfilePreference("intl.accept_languages", "en");
chromeOptions.AddUserProfilePreference("disable-popup-blocking", "true");
//Initiate the remote driver with desire capabilities pointing the local docker port
IWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), chromeOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
//After this point all those Selenium commands run on the docker
driver.Navigate().GoToUrl("http://www.google.co.uk");
//After finish execution go to docker instance in chrome and check sessions for results