Спасылка на аб'ект не паказвае на асобнік аб'екта

Калі я запускаю гэтую праграму ў 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/");
    }
  }
}
3
У будучыні, калі вы пішаце пытанне датычная выключэнне, калі ласка, пакажыце нам <�я>, дзе адбылося выключэнне.
дададзена аўтар Jon Skeet, крыніца
У будучыні, калі вы пішаце пытанне датычная выключэнне, калі ласка, пакажыце нам <�я>, дзе адбылося выключэнне.
дададзена аўтар Jon Skeet, крыніца
У будучыні, калі вы пішаце пытанне датычная выключэнне, калі ласка, пакажыце нам <�я>, дзе адбылося выключэнне.
дададзена аўтар Jon Skeet, крыніца
Забыўся а драйвер = новы FirefoxDriver (); ў метадзе class2 ()?
дададзена аўтар rene, крыніца

8 адказы

Паглядзіце на свой код:

public class class2
{
    IWebDriver driver = null;
    public void method()
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
}

Вядома, вы атрымліваеце NullReferenceException - драйвер заўсёды нулявым .

Пакуль не ясна, што павінна было адбыцца тут - але, магчыма, вы мелі на ўвазе перадаць FirefoxDriver инстанцировании ў test1 у метад з дапамогай параметру?

5
дададзена
@jessica: Ну мы не ведаем, які аб'ект вы хочаце выклікаць метад. Тое ж самае, што вы адзін асобнік ў test1 , або іншы адзін? Калі вы досыць новае для C# (які гучыць, як гэта бывае, калі вы былі здзіўлены, атрымаўшы выключэнне тут) я б настойліва рэкамендуем аўтаматызаваць вэб-тэсты не ідэальнай адпраўной кропкай - я прапаную вывучаць ядро ​​мовы больш першай.
дададзена аўтар Jon Skeet, крыніца
Я хацеў назваць яго толькі на test1. Так, вы маеце рацыю. Im пачатковец спрабуе даведацца C #. Так што не ведаю, як выправіць памылкі. Дзякуй за прапанову і дапамогу.
дададзена аўтар jessica, крыніца
Дзякуй за прапанову. Ды я атрымліваю NullReferenceException. Так што павінна быць напісана замест Iwebdriver драйвера = NULL;
дададзена аўтар jessica, крыніца
Вы павінны стварыць асобнік аб'екта драйвера перад выклікам метаду навігацыі.
дададзена аўтар Reza Shirazian, крыніца

Паглядзіце на свой код:

public class class2
{
    IWebDriver driver = null;
    public void method()
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
}

Вядома, вы атрымліваеце NullReferenceException - драйвер заўсёды нулявым .

Пакуль не ясна, што павінна было адбыцца тут - але, магчыма, вы мелі на ўвазе перадаць FirefoxDriver инстанцировании ў test1 у метад з дапамогай параметру?

5
дададзена
@jessica: Ну мы не ведаем, які аб'ект вы хочаце выклікаць метад. Тое ж самае, што вы адзін асобнік ў test1 , або іншы адзін? Калі вы досыць новае для C# (які гучыць, як гэта бывае, калі вы былі здзіўлены, атрымаўшы выключэнне тут) я б настойліва рэкамендуем аўтаматызаваць вэб-тэсты не ідэальнай адпраўной кропкай - я прапаную вывучаць ядро ​​мовы больш першай.
дададзена аўтар Jon Skeet, крыніца
Я хацеў назваць яго толькі на test1. Так, вы маеце рацыю. Im пачатковец спрабуе даведацца C #. Так што не ведаю, як выправіць памылкі. Дзякуй за прапанову і дапамогу.
дададзена аўтар jessica, крыніца
Дзякуй за прапанову. Ды я атрымліваю NullReferenceException. Так што павінна быць напісана замест Iwebdriver драйвера = NULL;
дададзена аўтар jessica, крыніца
Вы павінны стварыць асобнік аб'екта драйвера перад выклікам метаду навігацыі.
дададзена аўтар Reza Shirazian, крыніца

Паглядзіце на свой код:

public class class2
{
    IWebDriver driver = null;
    public void method()
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
}

Вядома, вы атрымліваеце NullReferenceException - драйвер заўсёды нулявым .

Пакуль не ясна, што павінна было адбыцца тут - але, магчыма, вы мелі на ўвазе перадаць FirefoxDriver инстанцировании ў test1 у метад з дапамогай параметру?

5
дададзена
@jessica: Ну мы не ведаем, які аб'ект вы хочаце выклікаць метад. Тое ж самае, што вы адзін асобнік ў test1 , або іншы адзін? Калі вы досыць новае для C# (які гучыць, як гэта бывае, калі вы былі здзіўлены, атрымаўшы выключэнне тут) я б настойліва рэкамендуем аўтаматызаваць вэб-тэсты не ідэальнай адпраўной кропкай - я прапаную вывучаць ядро ​​мовы больш першай.
дададзена аўтар Jon Skeet, крыніца
Я хацеў назваць яго толькі на test1. Так, вы маеце рацыю. Im пачатковец спрабуе даведацца C #. Так што не ведаю, як выправіць памылкі. Дзякуй за прапанову і дапамогу.
дададзена аўтар jessica, крыніца
Дзякуй за прапанову. Ды я атрымліваю NullReferenceException. Так што павінна быць напісана замест Iwebdriver драйвера = NULL;
дададзена аўтар jessica, крыніца
Вы павінны стварыць асобнік аб'екта драйвера перад выклікам метаду навігацыі.
дададзена аўтар Reza Shirazian, крыніца

Вы прызначаючы драйвер у Class1 , таму, калі ён спрабуе перайсці на class2 <�код /> 's метад яго выходзіць з ладу, як class2 's драйвера з'яўляецца Null . Вам трэба прысвоіць яму значэнне перад выклікам якіх-небудзь метадаў на ім.

Я не ведаю, чаму вы <�моцны> б не чакаць, што яна не ў стане з NullReferenceException .

Тое, што вы, верагодна, меў на ўвазе, каб напісаць было:

  public class class2
  {
    public void method(IWebDriver driver)
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
  }

і дзе вы выклікаеце метад у Class1 :

    obj.method(driver);
2
дададзена
дадаюць @jessica.
дададзена аўтар It'sNotALie., крыніца
Дзякуй. Я цаню вашу дапамогу.
дададзена аўтар jessica, крыніца
Ды я атрымліваю NullReferenceException. Так што павінна быць напісана замест Iwebdriver драйвера = NULL;
дададзена аўтар jessica, крыніца

Вы прызначаючы драйвер у Class1 , таму, калі ён спрабуе перайсці на class2 <�код /> 's метад яго выходзіць з ладу, як class2 's драйвера з'яўляецца Null . Вам трэба прысвоіць яму значэнне перад выклікам якіх-небудзь метадаў на ім.

Я не ведаю, чаму вы <�моцны> б не чакаць, што яна не ў стане з NullReferenceException .

Тое, што вы, верагодна, меў на ўвазе, каб напісаць было:

  public class class2
  {
    public void method(IWebDriver driver)
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
  }

і дзе вы выклікаеце метад у Class1 :

    obj.method(driver);
2
дададзена
дадаюць @jessica.
дададзена аўтар It'sNotALie., крыніца
Дзякуй. Я цаню вашу дапамогу.
дададзена аўтар jessica, крыніца
Ды я атрымліваю NullReferenceException. Так што павінна быць напісана замест Iwebdriver драйвера = NULL;
дададзена аўтар jessica, крыніца

Калі ў вас ёсць аб'ект у класе Ён павінен быць асобнік, перш чым выкарыстоўваць яго. Магчыма адзін з самых лепшых месцаў, каб зрабіць гэта ў вас канструктару.

як гэта:

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();
 }
2
дададзена
Вы не можаце стварыць новы асобнік інтэрфейсу ... Вам трэба стварыць асобнік класа, які рэалізуе інтэрфейс.
дададзена аўтар It'sNotALie., крыніца
Як мяркуецца, гэта FirefoxDriver.
дададзена аўтар It'sNotALie., крыніца
@newStackExchangeInstance Я не думаю, што адказвае аказвае рэальны код, але накіроўваючы ОП, што рабіць. Ніхто не ведае, што канкрэтны тып ..
дададзена аўтар nawfal, крыніца
@reza Вялікі дзякуй. Мая праграма працуе ў цяперашні час. Я хацеў бы ведаць, як выклікаць метады з дапамогай стварэння аб'екта. Я ведаю, што ўвагнутасць работы, таму што я паставіў яго страціўшым, але я не ведаю, альтэрнатыўны спосаб, каб напісаць яго. Гэта тое, што я хацеў. Дзякуй зноў.
дададзена аўтар jessica, крыніца
Вы маеце рацыю, я зразумеў, IWebDriver з'яўляецца інтэрфейсам. фіксаваны яго
дададзена аўтар Reza Shirazian, крыніца

Вам трэба перадаць спасылку на драйвер у Class1 у class2 і прызначыць яго на драйвер там. Калі вы праходзіце па спасылцы, вы перадаеце адрас памяці, так што драйвер у Class2 становіцца такой жа драйвер у Class1 таму што яны паказваюць на адзін і той жа адрас у памяці кампутара.

Каб перадаць драйвер па спасылцы ў Class1 вам трэба ніжэй;

obj.method(driver);

Вам трэба змяніць Class2 , каб ён мог атрымаць IWebDriver у () метад .

2
дададзена
Дзякуючы. Ён працуе ў цяперашні час.
дададзена аўтар jessica, крыніца

Вам трэба перадаць спасылку на драйвер у Class1 у class2 і прызначыць яго на драйвер там. Калі вы праходзіце па спасылцы, вы перадаеце адрас памяці, так што драйвер у Class2 становіцца такой жа драйвер у Class1 таму што яны паказваюць на адзін і той жа адрас у памяці кампутара.

Каб перадаць драйвер па спасылцы ў Class1 вам трэба ніжэй;

obj.method(driver);

Вам трэба змяніць Class2 , каб ён мог атрымаць IWebDriver у () метад .

2
дададзена
Дзякуючы. Ён працуе ў цяперашні час.
дададзена аўтар jessica, крыніца