Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 定位器对象的SearchContext不能为空_C#_Selenium Webdriver_Nunit - Fatal编程技术网

C# 定位器对象的SearchContext不能为空

C# 定位器对象的SearchContext不能为空,c#,selenium-webdriver,nunit,C#,Selenium Webdriver,Nunit,我已经在这么多论坛上查看了许多类似的问题,但与我的问题并不完全相同。另外,我不想将我的登录方法移动到base 代码: LoginTest.cs using test_TestAutomation.PageObjects; using NUnit.Framework; namespace test_TestAutomation.TestClasses { class LoginTet { // public IWebDriver driver;

我已经在这么多论坛上查看了许多类似的问题,但与我的问题并不完全相同。另外,我不想将我的登录方法移动到base

代码:

LoginTest.cs

using test_TestAutomation.PageObjects;
using NUnit.Framework;    

namespace test_TestAutomation.TestClasses
{      
    class LoginTet
    {
       // public IWebDriver driver;

        [Test]
        public void LoginSuccessCheck()
        {    
            LoginPage login = new LoginPage();
            login.LoginSuccess();    
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;   

namespace test_TestAutomation.TestClasses
{
    class Base
    {    
        public static IWebDriver driver;       
        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();                                    
        }  

        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");    
        }    

        [TearDown]    
        public void TearDown()
        {
            driver.Close();

        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;
namespace test_TestAutomation.PageObjects
{        
    public class LoginPage
    {      
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;    

        public LoginPage()
        {    
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {               
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }    
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    public class Base
    {
        public static IWebDriver driver;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();
        }

        [TearDown]
        public void TearDown()
        {
            driver.Close();
        }
    }
}
using test_TestAutomation.PageObjects;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    class LoginTest : Base
    {
        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
        }

        [Test]
        public void LoginSuccessCheck()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
            LoginPage login = new LoginPage();
            login.LoginSuccess();
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;

namespace test_TestAutomation.PageObjects
{
    public class LoginPage
    {
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;

        public LoginPage()
        {
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }
    }
}
Base.cs

using test_TestAutomation.PageObjects;
using NUnit.Framework;    

namespace test_TestAutomation.TestClasses
{      
    class LoginTet
    {
       // public IWebDriver driver;

        [Test]
        public void LoginSuccessCheck()
        {    
            LoginPage login = new LoginPage();
            login.LoginSuccess();    
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;   

namespace test_TestAutomation.TestClasses
{
    class Base
    {    
        public static IWebDriver driver;       
        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();                                    
        }  

        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");    
        }    

        [TearDown]    
        public void TearDown()
        {
            driver.Close();

        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;
namespace test_TestAutomation.PageObjects
{        
    public class LoginPage
    {      
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;    

        public LoginPage()
        {    
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {               
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }    
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    public class Base
    {
        public static IWebDriver driver;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();
        }

        [TearDown]
        public void TearDown()
        {
            driver.Close();
        }
    }
}
using test_TestAutomation.PageObjects;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    class LoginTest : Base
    {
        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
        }

        [Test]
        public void LoginSuccessCheck()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
            LoginPage login = new LoginPage();
            login.LoginSuccess();
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;

namespace test_TestAutomation.PageObjects
{
    public class LoginPage
    {
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;

        public LoginPage()
        {
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }
    }
}
LoginPage.cs

using test_TestAutomation.PageObjects;
using NUnit.Framework;    

namespace test_TestAutomation.TestClasses
{      
    class LoginTet
    {
       // public IWebDriver driver;

        [Test]
        public void LoginSuccessCheck()
        {    
            LoginPage login = new LoginPage();
            login.LoginSuccess();    
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;   

namespace test_TestAutomation.TestClasses
{
    class Base
    {    
        public static IWebDriver driver;       
        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();                                    
        }  

        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");    
        }    

        [TearDown]    
        public void TearDown()
        {
            driver.Close();

        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;
namespace test_TestAutomation.PageObjects
{        
    public class LoginPage
    {      
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;    

        public LoginPage()
        {    
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {               
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }    
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    public class Base
    {
        public static IWebDriver driver;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();
        }

        [TearDown]
        public void TearDown()
        {
            driver.Close();
        }
    }
}
using test_TestAutomation.PageObjects;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    class LoginTest : Base
    {
        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
        }

        [Test]
        public void LoginSuccessCheck()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
            LoginPage login = new LoginPage();
            login.LoginSuccess();
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;

namespace test_TestAutomation.PageObjects
{
    public class LoginPage
    {
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;

        public LoginPage()
        {
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }
    }
}
例外情况:

结果消息: System.ArgumentException:定位器对象的SearchContext不能为空

Stackstace:

at OpenQA.Selenium.Support.PageObjects.PageFactory.InitElements(Object page, IElementLocator locator, IPageObjectMemberDecorator decorator)
at OpenQA.Selenium.Support.PageObjects.PageFactory.InitElements(ISearchContext driver, Object page)

我建议您将测试
OpenURL
Base
提取到
LoginTest
,并且只在Base中进行设置和拆卸。然后让
LoginTest
Base
继承

Base.cs

using test_TestAutomation.PageObjects;
using NUnit.Framework;    

namespace test_TestAutomation.TestClasses
{      
    class LoginTet
    {
       // public IWebDriver driver;

        [Test]
        public void LoginSuccessCheck()
        {    
            LoginPage login = new LoginPage();
            login.LoginSuccess();    
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;   

namespace test_TestAutomation.TestClasses
{
    class Base
    {    
        public static IWebDriver driver;       
        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();                                    
        }  

        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");    
        }    

        [TearDown]    
        public void TearDown()
        {
            driver.Close();

        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;
namespace test_TestAutomation.PageObjects
{        
    public class LoginPage
    {      
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;    

        public LoginPage()
        {    
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {               
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }    
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    public class Base
    {
        public static IWebDriver driver;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();
        }

        [TearDown]
        public void TearDown()
        {
            driver.Close();
        }
    }
}
using test_TestAutomation.PageObjects;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    class LoginTest : Base
    {
        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
        }

        [Test]
        public void LoginSuccessCheck()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
            LoginPage login = new LoginPage();
            login.LoginSuccess();
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;

namespace test_TestAutomation.PageObjects
{
    public class LoginPage
    {
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;

        public LoginPage()
        {
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }
    }
}
LoginTest.cs

using test_TestAutomation.PageObjects;
using NUnit.Framework;    

namespace test_TestAutomation.TestClasses
{      
    class LoginTet
    {
       // public IWebDriver driver;

        [Test]
        public void LoginSuccessCheck()
        {    
            LoginPage login = new LoginPage();
            login.LoginSuccess();    
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;   

namespace test_TestAutomation.TestClasses
{
    class Base
    {    
        public static IWebDriver driver;       
        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();                                    
        }  

        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");    
        }    

        [TearDown]    
        public void TearDown()
        {
            driver.Close();

        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;
namespace test_TestAutomation.PageObjects
{        
    public class LoginPage
    {      
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;    

        public LoginPage()
        {    
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {               
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }    
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    public class Base
    {
        public static IWebDriver driver;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();
        }

        [TearDown]
        public void TearDown()
        {
            driver.Close();
        }
    }
}
using test_TestAutomation.PageObjects;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    class LoginTest : Base
    {
        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
        }

        [Test]
        public void LoginSuccessCheck()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
            LoginPage login = new LoginPage();
            login.LoginSuccess();
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;

namespace test_TestAutomation.PageObjects
{
    public class LoginPage
    {
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;

        public LoginPage()
        {
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }
    }
}
LoginPage.cs

using test_TestAutomation.PageObjects;
using NUnit.Framework;    

namespace test_TestAutomation.TestClasses
{      
    class LoginTet
    {
       // public IWebDriver driver;

        [Test]
        public void LoginSuccessCheck()
        {    
            LoginPage login = new LoginPage();
            login.LoginSuccess();    
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;   

namespace test_TestAutomation.TestClasses
{
    class Base
    {    
        public static IWebDriver driver;       
        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();                                    
        }  

        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");    
        }    

        [TearDown]    
        public void TearDown()
        {
            driver.Close();

        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;
namespace test_TestAutomation.PageObjects
{        
    public class LoginPage
    {      
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;    

        public LoginPage()
        {    
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {               
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }    
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    public class Base
    {
        public static IWebDriver driver;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();
        }

        [TearDown]
        public void TearDown()
        {
            driver.Close();
        }
    }
}
using test_TestAutomation.PageObjects;
using NUnit.Framework;

namespace test_TestAutomation.TestClasses
{
    class LoginTest : Base
    {
        [Test]
        public void OpenURL()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
        }

        [Test]
        public void LoginSuccessCheck()
        {
            driver.Navigate().GoToUrl("http://www.example.com");
            LoginPage login = new LoginPage();
            login.LoginSuccess();
        }
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using test_TestAutomation.TestClasses;

namespace test_TestAutomation.PageObjects
{
    public class LoginPage
    {
        [FindsBy(How = How.Id, Using = "Email")]
        public IWebElement LoginEmailTxtLocator;

        [FindsBy(How = How.Id, Using = "Password")]
        public IWebElement LoginPasswordTxtLocator;

        [FindsBy(How = How.CssSelector, Using = "#loginForm > div > div > form > div:nth-child(5) > div > input")]
        private IWebElement BtnLogin;

        public LoginPage()
        {
            PageFactory.InitElements(Base.driver, this);
        }

        public LoginPage LoginSuccess()
        {
            LoginEmailTxtLocator.SendKeys("emailtest@gmail.com");
            LoginPasswordTxtLocator.SendKeys("xxxxxxx");
            BtnLogin.Click();
            return this;
        }
    }
}

您案例中的SearchContext指的是驱动程序实例。这仍然是null,因为它在从未调用的Base构造函数中实例化。如果创建的对象Base@Grasshopper-相反,如果我扩大基地怎么办?这样行吗?应该行。我对c#知之甚少,但猜测静态构造函数也可以。