无法将类型 'OpenQA.Selenium.Chrome.ChromeDriver' 的对象转换为类型 'OpenQA.Selenium.Remote.RemoteWebDriver'

Unable to cast object of type 'OpenQA.Selenium.Chrome.ChromeDriver' to type 'OpenQA.Selenium.Remote.RemoteWebDriver'

我正在尝试使用 WebDriverManager Package for .Net 在执行测试用例时自动管理 chromedriver.exe 版本。但是,当我尝试将 ChromeDriver 对象类型转换为 RemoteDriverObject 时,它会显示以下错误。

Unable to cast object of type 'OpenQA.Selenium.Chrome.ChromeDriver' to type 'OpenQA.Selenium.Remote.RemoteWebDriver'.

我将在下面写下我正在使用的方法和代码:

public IWebDriver WebInit()
{
     ChromeOptions options = new ChromeOptions();
     options.AddArguments("--test-type");
     options.AddArguments("--start-maximized");
     options.AddArguments("--disable-infobars");
     options.AddArguments("--disable-extensions");
     options.AddAdditionalCapability("useAutomationExtension", false);
     options.AddArguments("--ignore-certificate-errors");
     options.AddExcludedArgument("enable-automation");
     options.AddUserProfilePreference("credentials_enable_service", false);
     options.AddUserProfilePreference("profile.password_manager_enabled", false);
     options.AddAdditionalCapability("useAutomationExtension", false);
     options.AddUserProfilePreference("download.prompt_for_download", false);
     options.AddUserProfilePreference("download.default_directory", downloadFilepath);
     options.AddUserProfilePreference("safebrowsing.enabled", true);
     options.AddArguments("window-size=1600,900");
     new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser); //this is the code used from the mentioned Github Repository
     _driver = new ChromeDriver(options);
} 

public void FunctionWhereIAmCallingTheWebInitFucntion()
{
     _driver = WebInit()
     ICapabilities capabilities = ((RemoteWebDriver)_driver).Capabilities; //whenever this line gets executed it throws the exception that is mentioned
}

以下是我使用的包版本

<PackageReference Include="Selenium.Support" Version="4.1.1" />
<PackageReference Include="Selenium.WebDriver" Version="4.1.1" />
<PackageReference Include="WebDriverManager" Version="2.12.4" />

请社区中的任何人都可以指导我在哪里犯了错误?非常感谢!!

好的,根据您在评论中的回复,我认为这就是您想要的。

ChromeDriver 对象有一个 Capabilities 属性 可以用来请求名称和版本。

只要您直接使用 ChromeDriver 而不是 IWebDriver,那么 属性 就可以像下面这样访问:

string? versions = driver.Capabilities.GetCapability("browserVersion").ToString();
string? name = driver.Capabilities.GetCapability("browserName").ToString();

我根据您的尝试对您的程序进行了一些修改,并将结果打印到控制台:

private static ChromeDriver WebInit()
{
    // set up options
    ChromeOptions options = new ChromeOptions();
    options.AddArguments("--start-maximized");
    
    // download latest chromedriver
    new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser); //this is the code used from the mentioned Github Repository
    
    // initialize the driver
    ChromeDriver driver = new ChromeDriver(options);

    return driver;
}

public static void Main()
{
    ChromeDriver driver = WebInit();
    
    // get the capabilities
    string? versions = driver.Capabilities.GetCapability("browserVersion").ToString();
    string? name = driver.Capabilities.GetCapability("browserName").ToString();

    Console.WriteLine(versions);
    Console.WriteLine(name);

    Console.ReadKey();
}

以上示例适用于安装了以下 NuGet 包的 .Net 6.0:

  • Selenium.Support (4.1.1)
  • Selenium.WebDriver (4.1.1)
  • WebDriverManager (2.13.0)