当我在NUnit中运行此程序时,我收到错误
对象引用未设置为对象的实例。
虽然这不是原始程序,但我也遇到了类似的错误。任何帮助赞赏。
出现例外情况driver.Navigate().GoToUrl("http://www.yahoo.com/");
计划:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
namespace Class_and_object
{
[TestFixture]
public class Class1
{
IWebDriver driver = null;
[Test]
public void test1()
{
class2 obj = new class2();
driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.google.com/");
obj.method();
}
}
public class class2
{
IWebDriver driver = null;
public void method()
{
driver.Navigate().GoToUrl("http://www.yahoo.com/");
}
}
}
答案 0 :(得分:5)
看看你的代码:
public class class2
{
IWebDriver driver = null;
public void method()
{
driver.Navigate().GoToUrl("http://www.yahoo.com/");
}
}
当然,您获得NullReferenceException
- driver
始终为null
。
目前尚不清楚您预期会发生什么 - 但也许您打算通过参数将FirefoxDriver
test1
实例化为method
?
答案 1 :(得分:2)
您在driver
中分配了Class1
,因此当它尝试在class2
method
上导航时,它会失败,因为class2
' s driver
是null
。在调用任何方法之前,需要为其赋值。
我不知道为什么你 希望它失败NullReferenceException
。
你可能想写的是:
public class class2
{
public void method(IWebDriver driver)
{
driver.Navigate().GoToUrl("http://www.yahoo.com/");
}
}
您在Class1
中调用方法的地方:
obj.method(driver);
答案 2 :(得分:2)
如果类中有对象,则需要先实例化才能使用它。可以说,最好的地方之一是你的构造函数。
像这样:public class class2
{
IWebDriver driver = null;
public class2(IWebDriver driver)
{
this.driver = driver;
}
public void method()
{
driver.Navigate().GoToUrl("http://www.yahoo.com/");
}
}
然后你的另一个类看起来像这样
public void test1()
{
driver = new FirefoxDriver();
class2 obj = new class2(driver);
driver.Navigate().GoToUrl("http://www.google.com/");
obj.method();
}
答案 3 :(得分:2)
您需要将driver
中Class1
的引用传递给Class2
并将其分配给driver
。当您通过引用传递时,您传递了内存地址,因此driver
中的Class2
与driver
中的Class1
变为相同,因为它们都指向计算机内存中的相同地址。
要通过Class1
中的引用传递驱动程序,您需要以下内容;
obj.method(driver);
您需要修改Class2
,以便它可以在IWebDriver
中收到method()
。