PhantomJS和Selenium - 测试从另一个文件调用方法(NullReferenceException)

本文关键字:方法 调用 NullReferenceException 文件 另一个 Selenium 测试 PhantomJS | 更新日期: 2023-09-27 18:36:34

>我在一个文件中得到了以下方法

public class Login
    {
         static IWebDriver driver;
          public static void LogIn(string Env, string User)
          {
            driver.Navigate().GoToUrl(Env);
            driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(3000));
            driver.FindElement(By.XPath("//*[@ng-model='email']")).SendKeys(User);
            driver.FindElement(By.XPath("//*[@ng-model='password']")).SendKeys("1234");
            driver.FindElement(By.XPath("//*[@id='"ui-view'"]/div/div/div[1]/form/div[2]/button")).Click();
            System.Threading.Thread.Sleep(2000);
            NUnit.Framework.Assert.IsTrue(driver.FindElement(By.Name("some element")).Displayed,
                "Login failed, home page did not display");
        }
    }
}

我想从另一个测试中调用上述方法

[TestFixture]
    public class SmokeTest 
    {
        private IWebDriver driver;
        [SetUp]
        public void SetUp()
        {
            driver = new PhantomJSDriver();
        }
        [Test]
        public void Test1()
        {
            **Login.LogIn("myEnv", "user");**
        }
     }

我可以毫无问题地编译,但是一旦运行Test1,我就会收到以下消息:

自动化.烟雾测试.搜索产品:System.NullReferenceException :对象引用未设置为对象的实例。

Nunit 指向Login.LogIn("myEnv", "user");作为源或错误。

有什么想法吗?

塔。

PhantomJS和Selenium - 测试从另一个文件调用方法(NullReferenceException)

简答

static IWebDriver driver; << NULL here

长答案

您应该在 [测试] 中通过登录名传递驱动程序。它应该是这样的

    [Test]
    public void Test1()
    {
        var loginPage = new Login(driver);            
        loginpage.LogIn("myEnv", "user");**
    }

对于您的登录名,可能会像以下一样进行更改

public class Login
{
    /// <summary>
    /// Get or set driver
    /// </summary>
    public IWebDriver Driver { get; set; }
    public Login(IWebDriver driver)           
    {
        this.Driver = driver;
    }
    public static void LogIn(string Env, string User)
      {
        Driver.Navigate().GoToUrl(Env);
        Driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(3000));
        Driver.FindElement(By.XPath("//*[@ng-model='email']")).SendKeys(User);
        Driver.FindElement(By.XPath("//*[@ng-model='password']")).SendKeys("1234");
        Driver.FindElement(By.XPath("//*[@id='"ui-view'"]/div/div/div[1]/form/div[2]/button")).Click();
        System.Threading.Thread.Sleep(2000);
        NUnit.Framework.Assert.IsTrue(Driver.FindElement(By.Name("some element")).Displayed,
            "Login failed, home page did not display");
    }
}

一种方法是将登录方法更改为如下所示:

public static void LogIn(string Env, string User, IWebDriver driver) 

通过将传递驱动程序添加为 var。这样,测试将保持为单衬

Login.LogIn("myEnv", "user");