Объект IWebDriver должен реализовать или обернуть драйвер, реализующий IHasInputDevices. (Параметр «драйвер»)

#c# #selenium #selenium-webdriver #nunit #browserstack

Вопрос:

Я пытаюсь внедрить BrowserStack в свой проект selenium и в настоящее время получаю эту ошибку, и это было очень неприятно.

Вот мой класс TestInit, в котором содержится мой метод настройки теста и демонтаж:

 using CFSSOnlineBanking.Src.PageObject.PageObjectsAdmin;
using CFSSOnlineBanking.Src.PageObjectsAdmin;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
using System;

namespace CFSSOnlineBanking.Src.PageObject.Drivers.Utilities
{
[TestFixture]
class TestInit<TWebDriver> where TWebDriver : IWebDriver, new()
{
    //Fields
    public static IWebDriver driver;

    //Setup Method for Admin Smoke Tests that sets up the test suite by opening the browser and logging in
    [OneTimeSetUp]
    public void SetUp()
    {
        try
        {
            switch (typeof(TWebDriver).Name)
            {
                case "ChromeDriver":
                    ChromeOptions capability = new ChromeOptions();
                    capability.AddAdditionalCapability("os", "Windows", true);
                    capability.AddAdditionalCapability("os_version", "10", true);
                    capability.AddAdditionalCapability("browser", "Chrome", true);
                    capability.AddAdditionalCapability("browser_version", "latest", true);
                    capability.AddAdditionalCapability("build", "Build 1.0", true);
                    capability.AddAdditionalCapability("browserstack.local", "true", true);
                    capability.AddAdditionalCapability("browserstack.debug", "true", true);
                    capability.AddAdditionalCapability("browserstack.selenium_version", "3.14.0", true);
                    capability.AddAdditionalCapability("browserstack.user", "***************", true);
                    capability.AddAdditionalCapability("browserstack.key", "***************", true);
                    driver = new RemoteWebDriver(new Uri("https://hub-cloud.browserstack.com/wd/hub/"), capability);
                    break;
                case "FirefoxDriver":
                    FirefoxOptions capability1 = new FirefoxOptions();
                    capability1.AddAdditionalCapability("os", "Windows", true);
                    capability1.AddAdditionalCapability("os_version", "10", true);
                    capability1.AddAdditionalCapability("browser", "Firefox", true);
                    capability1.AddAdditionalCapability("browser_version", "latest", true);
                    capability1.AddAdditionalCapability("build", "Build 1.0", true);
                    capability1.AddAdditionalCapability("browserstack.local", "true", true);
                    capability1.AddAdditionalCapability("browserstack.debug", "true", true);
                    capability1.AddAdditionalCapability("browserstack.selenium_version", "3.10.0", true);
                    capability1.AddAdditionalCapability("browserstack.user", "***************", true);
                    capability1.AddAdditionalCapability("browserstack.key", "***************", true);
                    driver = new RemoteWebDriver(new Uri("https://hub-cloud.browserstack.com/wd/hub/"), capability1);
                    break;
                case "EdgeDriver":
                    EdgeOptions capability2 = new EdgeOptions();
                    capability2.AddAdditionalCapability("os", "Windows");
                    capability2.AddAdditionalCapability("os_version", "10");
                    capability2.AddAdditionalCapability("browser", "Edge");
                    capability2.AddAdditionalCapability("browser_version", "latest");
                    capability2.AddAdditionalCapability("build", "Build 1.0");
                    capability2.AddAdditionalCapability("browserstack.local", "true");
                    capability2.AddAdditionalCapability("browserstack.debug", "true");
                    capability2.AddAdditionalCapability("browserstack.selenium_version", "3.5.2");
                    capability2.AddAdditionalCapability("browserstack.user", "***************");
                    capability2.AddAdditionalCapability("browserstack.key", "***************");
                    driver = new RemoteWebDriver(new Uri("https://hub-cloud.browserstack.com/wd/hub/"), capability2);
                    break;
            }
           
            AdminLoginPage adminLoginPage = new AdminLoginPage(driver);
            AdminDashboard adminDashboard = new AdminDashboard(driver);
            WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(40));
            adminLoginPage.Login();
            WebDriverWait webDriverWait1 = new WebDriverWait(driver, TimeSpan.FromSeconds(40));
            webDriverWait1.Until(c => adminDashboard.signOffBtn);
            _ = driver.FindElement(By.Name("ctl00$HBAdminPageHeader$hlnkSignOff"));
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }

    //Teardown Method to close all driver instances.
    [OneTimeTearDown]
    public void TearDown()
    {
        driver.Quit();
    }

}
}
 

Вот тест, который я пытаюсь выполнить:

     //Open Add Promotion screen
    [Test, Category("Smoke Test Admin")]
    [Category("Connect Native")]
    public void AddPromotionDisplay()
    {
        var addPromotionPage = new AddPromotionPage(driver);
        var adp = new AdminDashboard(driver);
        Actions action = new Actions(driver); // **LINE 91 IN STACKTRACE**
        WebDriverWait webDriverWait = new(driver, TimeSpan.FromSeconds(30));

        //Click Add Promotion Page validate Elements are present
        action.MoveToElement(webDriverWait.Until(c => adp.promotionsOption)).Perform();
        adp.addPromotionOption.Click();
        Assert.IsTrue(webDriverWait.Until(c => addPromotionPage.promotionNameField).Displayed);
        Assert.IsTrue(webDriverWait.Until(c => addPromotionPage.beginingMonthField).Displayed);
        Assert.IsTrue(webDriverWait.Until(c => addPromotionPage.beginigDayField).Displayed);
        Assert.IsTrue(webDriverWait.Until(c => addPromotionPage.beginingYearField).Displayed);
    }
 

Когда я отлаживаю, и это приводит меня к моим объектам на странице, перечисленным ниже:

var adp = новая панель администратора(драйвер);

 namespace CFSSOnlineBanking.Src.PageObject.PageObjectsAdmin
{
class AdminDashboard
{
    //Fields
    private IWebDriver driver;

    //Constructor
    public AdminDashboard(IWebDriver driver)
    {
        this.driver = driver;
    }

    //Admin Dashboard elements
    public IWebElement signOffBtn => driver.FindElement(By.Id("ctl00_HBAdminPageHeader_hlnkSignOff"));
    public IWebElement promotionsOption => driver.FindElement(By.LinkText("Promotions"));
    public IWebElement eStmtPromotionOption => driver.FindElement(By.LinkText("eStmt Promotion"));
}
}
 

var addPromotionPage = new AddPromotionPage(driver);

 using OpenQA.Selenium;

namespace CFSSOnlineBanking.Src.PageObject.PageObjectsAdmin
{
class AddPromotionPage
{
    //Fields
    private IWebDriver driver;

    //Constructor
    public AddPromotionPage(IWebDriver driver)
    {
        this.driver = driver;
    }

    //Add Promotion Page Elements
    public IWebElement promotionNameField => driver.FindElement(By.Id("ctl00_ContentPlaceHolder_ctrPromotionDetail_txtPromoName"));
    public IWebElement beginingMonthField => driver.FindElement(By.Id("ctl00_ContentPlaceHolder_ctrPromotionDetail_txtBeginMonth"));
    public IWebElement beginigDayField => driver.FindElement(By.Id("ctl00_ContentPlaceHolder_ctrPromotionDetail_txtBeginDay"));
    public IWebElement beginingYearField => driver.FindElement(By.Id("ctl00_ContentPlaceHolder_ctrPromotionDetail_txtBeginYear"));
}
}
 

Что затем говорит о том, что драйвер равен нулю. Я не уверен, почему он равен нулю… Я не знаю, связано ли это с общим вопросом, но это то, о чем я думаю. Есть ли способ это исправить?

Трассировка стека:

введите описание изображения здесь