Selenium C#中两个类的调用方法

考拉

这可能是一个愚蠢的问题,但我还没有找到可以将我引向解决方案的答案

说我有一个测试方法来验证登录门户的功能。它在TestClassA中。我想在TestClassB的TestInitialize方法中运行该方法,这样我就可以可靠地让硒在空白板上启动,以测试通过该登录门户的功能。

这是有问题的测试代码

using Login_Elements;
using Dashboard;

namespace Test_Dashboard_Elements
{
[TestClass]
public class DashboardTests
{
    IWebDriver _driver;
    DashboardElements dash;

    [TestInitialize]
    public void Test_Setup()
    {
        dash = new DashboardElements(_driver);
        LoginPage login = new LoginPage(_driver);
        _driver = new FirefoxDriver();
        _driver.Navigate().GoToUrl("exampleurl/login");
        login.Login();
    }
}

它调用DashboardElements的一个实例并传递硒Webdriver,然后调用LoginPage的实例并传递硒WebDriver(我认为是问题),并从LoginPage调用login方法。

    IWebDriver _driver;

    //Username field
    [FindsBy(How = How.Id, Using = "username")]
    private IWebElement userName;

    //Password field
    [FindsBy(How = How.Id, Using = "password")]
    private IWebElement password;

    //Submit Button
    [FindsBy(How = How.ClassName, Using = "btn")]
    private  IWebElement submit_button;

    //Constructor
    public LoginPage(IWebDriver driver)
    {
        this._driver = driver;
        PageFactory.InitElements(driver, this);
    }

    //Sends passed string to username field
    public void sendUserName(string strUsername)
    {
        userName.SendKeys(strUsername);
    }

    //Sends passed string to password field
    public void sendPassword(string strPassword)
    {
        password.SendKeys(strPassword);
    }

    //Clicks submit button
    public void submit()
    {
        submit_button.Click();
    }

    public void Login()
    {
        sendUserName("username");
        sendPassword("password!");
        submit();
    }

这返回

>Message: Initialization method Test_Dashboard_Elements.DashboardTests.Test_Setup threw exception.  System.ArgumentNullException: System.ArgumentNullException: searchContext may not be null Parameter name: searchContext

我觉得这与两次传递_driver有关,但我不确定该怎么做

堆栈跟踪:

>Test Name: Test_Link_Reports
Test FullName:  Test_Dashboard_Elements.DashboardTests.Test_Link_Reports
Test Source:    c:\Users\%USER%\Documents\Visual Studio 2013\Projects\%PATH TO DIR%\Page Tests\Dashboard Tests.cs : line 29
Test Outcome:   Failed
Test Duration:  0:00:06.0255821

结果消息:

>Initialization method Test_Dashboard_Elements.DashboardTests.Test_Setup threw exception. System.ArgumentNullException: System.ArgumentNullException: searchContext may not be null
Parameter name: searchContext.
Result StackTrace:  
at OpenQA.Selenium.Support.PageObjects.DefaultElementLocatorFactory.LocateElement(ISearchContext searchContext, IEnumerable`1 bys)
   at OpenQA.Selenium.Support.PageObjects.WebElementProxy.get_WrappedElement()
   at OpenQA.Selenium.Support.PageObjects.WebElementProxy.SendKeys(String text)
   at Login_Elements.LoginPage.sendUserName(String strUsername) in c:\Users\%USER%\Documents\Visual Studio 2013\Projects\%PATH TO DIR%\Page Elements\Login Elements.cs:line 39
   at Login_Elements.LoginPage.Login() in c:\Users\%USER%\Documents\Visual Studio 2013\Projects\%PATH TO DIR%\Page Elements\Login Elements.cs:line 56
   at Test_Dashboard_Elements.DashboardTests.Test_Setup() in c:\Users\%USER%\Documents\Visual Studio 2013\Projects\%PATH TO DIR%\Page Tests\Dashboard Tests.cs:line 24
DefaultElementLocatorFactory.LocateElement(ISearchContext searchContext, IEnumerable 1 bys)
WebElementProxy.get_WrappedElement()
WebElementProxy.SendKeys(String text)
LoginPage.sendUserName(String strUsername)
LoginPage.Login()
DashboardTests.Test_Setup()
赛富尔

似乎问题在于他的driver实例化。您没有将实例化的驱动程序传递给DashboardElements()要解决此问题:

  • 首先实例化driver
  • 通过实例化driverPageObject

     using Login_Elements;
     using Dashboard;
    
    namespace Test_Dashboard_Elements
    {
        [TestClass]
        public class DashboardTests
        {
           IWebDriver _driver;
           DashboardElements dash;
    
        [TestInitialize]
        public void Test_Setup()
        {
          _driver = new FirefoxDriver();
           dash = new DashboardElements(_driver);
           LoginPage login = new LoginPage(_driver);
           _driver.Navigate().GoToUrl("exampleurl/login");
           login.Login();
        }
    }  
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Selenium [C#]中添加单个等待两个不同的元素

如何使用单个 Selenium c# Webdriver/ChromeDriver 在两个选项卡中打开 2 个不同的链接?

Selenium 通过类名两个参数查找元素

使用Selenium在同一类的两个不同的div中查找不同的元素

Selenium 在 C# 中调用异步 JavaScript

使用 c# 和 selenium webdriver 比较两个图像

在 Selenium Python 中同时运行两个用户

为什么 C# 单例类有时会在多线程中调用两个方法?

如何让 Selenium 仅使用一个驱动程序 selenium(使用 c# 和 chromedriver)来操作两个浏览器窗口?

Selenium,如何在c#中获取类的最后一个元素

Selenium / Java:是否可以将拖放动作分成两个属于两个单独类的动作?

C# 中的 Selenium UrlContains

在OpenQA.Selenium(C#)中找不到WebDriverWait类

如何从两个父类中调用“重写”方法?

C#扩展Selenium Webdriver类

C#中这两个方法调用之间有什么区别?

当两个面板具有相同的类名时,如何使用Selenium Webdriver设置默认类名

Selenium 在 C# 程序中抛出“OpenQA.Selenium.NoSuchElementException”

如何使用TestNG从Selenium中的主类调用全局方法来类

在 Python Selenium 中使用两个标准查找元素

等待执行两个动作-Selenium / Java

使用Selenium获取两个标签之间的HTML

使用Selenium(Python)运行两个不同版本的chrome

selenium 通过两个标签选择 css

比较两个列表的内容,Java,Selenium

启动Selenium Chromedriver时使用两个excludeSwitch?

在Selenium Unittest中同时声明两个语句为真

希望使用Selenium将两个列表写到csv文件的一列中-Python

(Selenium - Python) 在 webDriver 中查找两个元素之一