#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"));
}
}
Что затем говорит о том, что драйвер равен нулю. Я не уверен, почему он равен нулю… Я не знаю, связано ли это с общим вопросом, но это то, о чем я думаю. Есть ли способ это исправить?
Трассировка стека: