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");
作为源或错误。
有什么想法吗?
塔。
简答
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");