Перейти к содержимому

Фотография

Проблемы с вызовом метода из другого класа


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 Alena*

Alena*

    Новый участник

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Алена Бартош
  • Город:Винница

Отправлено 08 ноября 2012 - 09:12

В package Global есть class Metods в котором 2 метода
public static String offer; // получает заголовок Публичной оферты (метод - getOfferTitle)
public void enterAdmin3()// вход в систему для получения данных
	{
		((JavascriptExecutor) driver).executeScript("window.open(arguments[0])", "http://admin3.hotels24.stage/"); // открытие нового окна
		switchWindow(1); // переход к окну
		driver.findElement(By.xpath("//tr[1]/td[2]/input")).sendKeys("login");
		driver.findElement(By.name("password")).sendKeys("password");
		driver.findElement(By.xpath("//input[@value='Войти']")).click();
	}
	
		
	public void getOfferTitle() // получение нужной строки
         {
		enterAdmin3(); // вход в систему
		driver.findElement(By.linkText("Гостинницы")).click(); // переход к странице
		driver.findElement(By.xpath("//a[19]/b")).click(); // переход к странице
		driver.findElement(By.linkText("Публичная оферта")).click(); // переход к странице
		driver.switchTo().frame("text_desc___Frame"); // переход во внутренний фрейм 
		driver.switchTo().frame(driver.findElement(By.xpath("//td [@id='xEditingArea']//iframe"))); // переход на фрейм страницы
		offer = driver.findElement(By.xpath("//body/p[1]/strong")).getText(); // присвоение строки глобальной переменной
	}
А в package AC в class F_05 я пытаюсь эти методы использовать
public void test() throws Exception {
		driver.get(baseUrl + "/all_cities/"); // переход на страницу
		driver.findElement(By.linkText("Публичная оферта")).click(); 
		Metods getTitle = new Metods();
		getTitle.getOfferTitle(); // использование метода
		assertEquals(getTitle.offer, driver.findElement(By.cssSelector("h1")).getText()); // проверка соответствия текста на странице глобальной переменной
		
	}

Ошибка отдается на строке getTitle.getOfferTitle() - java.lang.NullPointerException

Помогите плиз понять в чем проблема.

P.S. ​Еще полный нуб в программировании так что если это самая ээлементарная ошибка прошу сильно не ругать :biggrin:
  • 0

#2 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 08 ноября 2012 - 09:26

Ошибка отдается на строке getTitle.getOfferTitle() - java.lang.NullPointerException

Помогите плиз понять в чем проблема.

P.S. ​Еще полный нуб в программировании так что если это самая ээлементарная ошибка прошу сильно не ругать :biggrin:

Учимся задавать вопрос: нужен полный код класса, а так же полный стектрейс ошибки.
Пришлете это дадим вразумительный ответ, пока эе грешу только на то, что driver нигде не инициализирован.
  • 0
Алексей Булат
Про Тестинг

#3 Alena*

Alena*

    Новый участник

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Алена Бартош
  • Город:Винница

Отправлено 08 ноября 2012 - 09:30

Полный код)
package Global;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class Metods {
	private WebDriver driver;
	private String baseUrl;
	private StringBuffer verificationErrors = new StringBuffer();
	
	public static String offer; // получает заголовок Публичной оферты (метод - getOfferTitle)
	
	
	@Before
	public void setUp() throws Exception {
		driver = new FirefoxDriver();
		baseUrl = "http://hotels24.stage/";
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}
	public void enterAdmin3()
	{
		((JavascriptExecutor) driver).executeScript("window.open(arguments[0])", "http://admin3.hotels24.stage/");
		switchWindow(1);
		driver.findElement(By.xpath("//tr[1]/td[2]/input")).sendKeys("alena.bartosh@gmail.com");
		driver.findElement(By.name("password")).sendKeys("hotels24");
		driver.findElement(By.xpath("//input[@value='Войти']")).click();
	}
	
		
	public void getOfferTitle(){
		enterAdmin3();
		driver.findElement(By.linkText("Гостинницы")).click();
		driver.findElement(By.xpath("//a[19]/b")).click();
		driver.findElement(By.linkText("Публичная оферта")).click();
		driver.switchTo().frame("text_desc___Frame"); // переход во внутренний фрейм
		driver.switchTo().frame(driver.findElement(By.xpath("//td [@id='xEditingArea']//iframe"))); // переход на фрейм страницы
		offer = driver.findElement(By.xpath("//body/p[1]/strong")).getText();
	}
	
	
	
	
	@Test
	public void testUntitled() throws Exception {
		
				
	}
	
	@After
	public void tearDown() throws Exception {
		driver.quit();
		String verificationErrorString = verificationErrors.toString();
		if (!"".equals(verificationErrorString)) {
			fail(verificationErrorString);
		}
	}
	public void switchWindow(int numberOfWindow) {
		String handle = driver.getWindowHandles().toArray()[numberOfWindow].toString();
		driver.switchTo().window(handle);
	}
	private boolean isElementPresent(By by) {
		try {
			driver.findElement(by);
			return true;
		} catch (NoSuchElementException e) {
			return false;
		}
	}
}

Клас где вызываю данные методы
package AC;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

import Global.Metods;

public class F_05 {
	private WebDriver driver;
	private String baseUrl;
	private StringBuffer verificationErrors = new StringBuffer();
	@Before
	public void setUp() throws Exception {
		driver = new FirefoxDriver();
		baseUrl = "http://hotels24.stage/";
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}

	@Test
	public void testF02() throws Exception {
		driver.get(baseUrl + "/all_cities/");
		driver.findElement(By.linkText("Публичная оферта")).click();
		Metods getTitle = new Metods();
		getTitle.getOfferTitle();
			assertEquals(getTitle.offer, driver.findElement(By.cssSelector("h1")).getText());
		
	}

	@After
	public void tearDown() throws Exception {
		driver.quit();
		String verificationErrorString = verificationErrors.toString();
		if (!"".equals(verificationErrorString)) {
			fail(verificationErrorString);
		}
	}

	private boolean isElementPresent(By by) {
		try {
			driver.findElement(by);
			return true;
		} catch (NoSuchElementException e) {
			return false;
		}
	}
}



Ошибка
java.lang.NullPointerException
at Global.Metods.getOfferTitle(Metods.java:38)
at AC.F_05.testF02(F_05.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  • 0

#4 _Yura

_Yura

    Новый участник

  • Members
  • Pip
  • 50 сообщений
  • ФИО:n/a

Отправлено 08 ноября 2012 - 09:57

@Before
        public void setUp() throws Exception {
                driver = new FirefoxDriver();
                baseUrl = "http://hotels24.stage/";
                driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        }
                
        public void getOfferTitle(){
Может, следует вынести всё, кроме setUp() в @Test?
  • 0

#5 Alena*

Alena*

    Новый участник

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Алена Бартош
  • Город:Винница

Отправлено 08 ноября 2012 - 10:14

@Before
        public void setUp() throws Exception {
                driver = new FirefoxDriver();
                baseUrl = "http://hotels24.stage/";
                driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        }
                
        public void getOfferTitle(){
Может, следует вынести всё, кроме setUp() в @Test?

Не помогло(
  • 0

#6 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 08 ноября 2012 - 10:21

Алена, зачем тебе 2 одинаковых SetUp и 2 одинаковых tearDown ?
  • 0

#7 Alena*

Alena*

    Новый участник

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Алена Бартош
  • Город:Винница

Отправлено 08 ноября 2012 - 10:34

Алена, зачем тебе 2 одинаковых SetUp и 2 одинаковых tearDown ?

Так на всякий случай наверное :pardon:
Но даже если их убрать ошибка остается все таже.
  • 0

#8 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 08 ноября 2012 - 13:32

Алёна по-моему пора начинать пользоваться отладчиком. Устанавливаем точку останова, запускаем в режиме дебага, и по шагам смотрим переменные. Каждый раз на форум не набегаешься.

PS: Ты создаешь новый экземпляр объекта Metods. В методе getOfferTitle() ты используешь driver, который инициализируется в методе setUp, который не вызывается. Следовательно, переменная driver в методе getOfferTitle() имеет значение null.
  • 0

#9 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 08 ноября 2012 - 13:44

Ну видимо вебдрайвер внутри класса Methods не инциализируется.

Удалите из класса Methods setUp но добавьте конструктор:

public Methods(WebDriver driver) {
	this.driver = driver;
}


И далее в тестах передавайте в Methods уже инициализированный в F_05 driver как:

@Test
public void testF02() throws Exception {
	driver.get(baseUrl + "/all_cities/");
	driver.findElement(By.linkText("Публичная оферта")).click();
	Metods getTitle = new Metods(driver);
	getTitle.getOfferTitle();
	assertEquals(getTitle.offer, driver.findElement(By.cssSelector("h1")).getText());               
}

  • 0

#10 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 08 ноября 2012 - 13:44

Ну и да - купите книжку по ООП ;)
  • 0

#11 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 08 ноября 2012 - 13:45

Ну как я в принципе и думал, у вас driver не определен.

В методе testF02() вы вызываете:

Metods getTitle = new Metods();
    getTitle.getOfferTitle();

А в классе Metods конструктора-то нет. Вызывается дефолтовый. В итоге driver нигде не инициализируется. Попробуйте в классе Metods создать конструктор с инициализацей драйвера или с передачей драйвера в конструкор из метода testF02(), типа:

public Metods(WebDriver driver) {
        this.driver = driver;
    }

тогда вызов будет вот такой:

Metods getTitle = new Metods(driver);
    getTitle.getOfferTitle();

  • 0
Алексей Булат
Про Тестинг

#12 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 08 ноября 2012 - 13:46

Ну и да - купите книжку по ООП ;)



Согласен!!! Это первое, что вообще нужно было сделать, до того как начинать писать код!!!
  • 0
Алексей Булат
Про Тестинг

#13 Alena*

Alena*

    Новый участник

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Алена Бартош
  • Город:Винница

Отправлено 08 ноября 2012 - 15:01

Заработало :yahoo:
Всем большое спасибо

P.S. Книгу по ООП куплю обязательно! :blush:
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных