我在一个文件中有以下方法
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,我收到以下消息:
Automation.SmokeTest.SearchForProduct: System.NullReferenceException:未将对象引用设置为对象的实例。
Nunit指向Login.LogIn("myEnv", "user");
作为来源或错误。
有什么想法吗?
的Ta。
答案 0 :(得分:1)
简短回答
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");
}
}
答案 1 :(得分:0)
一种方法是将登录方法更改为如下所示:
public static void LogIn(string Env, string User, IWebDriver driver)
通过添加传递驱动程序作为var。这样测试保持单线
Login.LogIn("myEnv", "user");