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

Фотография

Не запускается пакет тестов

Selenium Eclipse

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

#1 Tishka

Tishka

    Постоянный участник

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 18 декабря 2014 - 10:36

Добрый день уважаемые форумчане. Столкнулся с такой ситуацией:

- Есть 2 теста

- По отдельности они запускаются

- Запуск FF выкинут в отдельный класс

- При запуске пакета тесты проваливаются с ошибкой "java.lang.NullPointerException".

 

Код запуска FF

protected void setUp() throws Exception {
		setDriver(new FirefoxDriver());
	
	}
	
	protected WebDriver driver;
	public void setDriver(WebDriver driver) {
	this.driver = driver;
	}

Использую связку WebDriver+Eclipse+TestNG


  • 0

#2 Petrov.Sergey

Petrov.Sergey

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

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 18 декабря 2014 - 10:46

Обычно IDE пишет, в какой строке возник NPE.


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#3 Tishka

Tishka

    Постоянный участник

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 18 декабря 2014 - 11:11

тесты останавливаются на 

driver.get("http://mytest"); 

  • 0

#4 Petrov.Sergey

Petrov.Sergey

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

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 18 декабря 2014 - 12:15

нужен код, оборачивающий оба теста.


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#5 Tishka

Tishka

    Постоянный участник

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 18 декабря 2014 - 13:39

package com.my.runtest;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.*;


public class BaseToProject {
	
	
	@BeforeSuite
	
	protected void setUp() throws Exception {
		setDriver(new FirefoxDriver());
	
	}
	
	protected WebDriver driver;
	protected void setDriver(WebDriver driver) {
	this.driver = driver;
	}
	
	@AfterSuite

	public void tearDown() throws Exception {
		driver.quit();
	}

	public WebDriver getDriver() {
		return driver;
	}

}

  • 0

#6 Tishka

Tishka

    Постоянный участник

  • Members
  • PipPipPip
  • 211 сообщений
  • ФИО:Ахрамеев Антон

Отправлено 18 декабря 2014 - 16:59

С предыдущим разобрался. подскажите в чем тут дело:

	public static  void startFF() {
	
		WebDriver driver =  (new FirefoxDriver());
		
	}
	
	
	

	protected WebElement findByxPath(String locator) {
		return driver.findElement(By.xpath(locator));
	}
	
	@AfterSuite

	public void tearDown() throws Exception {
		driver.quit();
		}
	
	protected void login() {
		driver.get("http:mysite");
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
		driver.findElement(By.name("login")).sendKeys("admin");
		driver.findElement(By.name("password")).sendKeys("admin");
		driver.findElement(By.name("yt0")).click();

после объявления все остальные "driver" с ошибкой  "driver cannot be resolved".


  • 0

#7 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 19 декабря 2014 - 14:31

А с предыдущим что было? Случайно не это:

@BeforeSuite
    
    protected void setUp() throws Exception {  // public ?

Я не очень разбираюсь, особенно не зная вашей структуры, но меня смущает, что 

public static void startFF() {
    
        WebDriver driver = (new FirefoxDriver());
        
    }

не возвращает у вас driver , а void.

Плюс опять же посмотреть верно ли protected в других местах.


  • 0

#8 igorek9191

igorek9191

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

  • Members
  • Pip
  • 22 сообщений


Отправлено 04 ноября 2016 - 10:12

Нашёл подходящую тему.

Также использую WebDriver + Eclipse + TestNg
Есть 2 теста. Запускаю Запускаю их оба сразу RunTestNg Test

1й тест проходит корректно.
2й падает сразу, с таким исключением: null value in entry: url=null. Типа не видит адрес URL, но что мне подсказывает что это не та причина почему этот тест не идёт за первым...
Прикрепил класс где идёт инициализация driver.

Подскажите пожалуйста, где у меня косяк ?

 
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.*;

public class Base {
	
	private static WebDriver driver = new FirefoxDriver();
	protected String baseUrl;
	protected boolean acceptNextAlert = true;
	
	public static WebDriver getWebDriver() {
		if (Base.driver == null){
			Base.driver = new FirefoxDriver();
		}
		return driver;
	}
	
	@BeforeSuite
	public void setUp() throws Exception {
		driver = Base.getWebDriver();
		baseUrl = "https://new.vk.com/";
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}

	@AfterSuite
	public void tearDown() throws Exception {
		driver.quit();   
	}
}

  • 0

#9 user12

user12

    Специалист

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


Отправлено 04 ноября 2016 - 12:12

2й падает сразу, с таким исключением: null value in entry: url=null. Типа не видит адрес URL, но что мне подсказывает что это не та причина почему этот тест не идёт за первым...

 

 

А просто 2й проходит ?  Т.е. запусти сначала только один тест - первый(посмотри норм ли один проходит), потом запусти только один тест-второй


  • 0

#10 igorek9191

igorek9191

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

  • Members
  • Pip
  • 22 сообщений


Отправлено 04 ноября 2016 - 13:59

 

2й падает сразу, с таким исключением: null value in entry: url=null. Типа не видит адрес URL, но что мне подсказывает что это не та причина почему этот тест не идёт за первым...

 

 

А просто 2й проходит ?  Т.е. запусти сначала только один тест - первый(посмотри норм ли один проходит), потом запусти только один тест-второй

 

Да, отдельно второй проходит нормально


  • 0

#11 user12

user12

    Специалист

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


Отправлено 04 ноября 2016 - 14:12

Ну так давай покажи тесты, так сложно что-то  сказать

 

PS у тебя код немного странный, не понятно, зачем static  к драйверу...


  • 0

#12 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 04 ноября 2016 - 16:21

что-то у вас тут какое-то масло масленное. Зачем два раза инициализировать драйвер?


  • 0

#13 igorek9191

igorek9191

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

  • Members
  • Pip
  • 22 сообщений


Отправлено 04 ноября 2016 - 19:31

Ну так давай покажи тесты, так сложно что-то  сказать

 

PS у тебя код немного странный, не понятно, зачем static  к драйверу...

"Я ещё только учусь"))

 

1й тест

public class Vk1 extends Base {

	VkHelper vk = new VkHelper();
	
	@Test
	public void testVk() throws Exception {
		vk.driver.get(baseUrl + "/");
		vk.clearAndSendKeys("index_email", "79603236777");
		vk.clearAndSendKeys("index_pass", "gazon777");
		vk.clickAndWiat("index_login_button");
		AssertJUnit.assertEquals("Не удается войти.", vk.driver.findElement(By.cssSelector("b")).getText());
		vk.clearAndSendKeys("pass", "gazon777");
		vk.clickAndWiat("login_button");
		AssertJUnit.assertEquals("Ёк-макарёк", vk.driver.findElement(By.xpath(".//*[@id='page_info_wrap']/div[1]/h2")).getText());
		vk.driver.findElement(By.cssSelector("div.top_profile_arrow")).click();
		vk.clickAndWiat("top_logout_link");
		AssertJUnit.assertEquals("ВКонтакте для мобильных устройств | ВКонтакте", vk.driver.getTitle());
	}
}

2й тест

public class Vk2 extends Base {

	VkHelper vk = new VkHelper();
	
  @Test
  public void testVk2() throws Exception {
	  vk.driver.get(baseUrl);
	  vk.clearAndSendKeys("index_email", "79603236777");
	  vk.clearAndSendKeys("index_pass", "gazon777");
	  vk.clickAndWiat("index_login_button");
	  vk.driver.findElement(By.cssSelector(".left_label.inl_bl")).click();
	  vk.post_field_post("#post_field", "123");
	  vk.send_post_click("#send_post");
      assertEquals("123", vk.driver.findElement(By.cssSelector(".wall_post_text")).getText());
  }
}

И класс VkHelper в котором я описываю методы, которым пользуюсь в тестах:

public class VkHelper {
	
	public WebDriver driver = Base.getWebDriver();

	public void clearAndSendKeys(String locator, String keys) {
		driver.findElement(By.id(locator)).clear();
		driver.findElement(By.id(locator)).sendKeys(keys);
	}

	public void clickAndWiat(String locator) {
		driver.findElement(By.id(locator)).click();
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	}

	public void post_field_post(String locator, String value) {
		driver.findElement(By.cssSelector(locator)).click();
		driver.findElement(By.cssSelector(locator)).clear();
		driver.findElement(By.cssSelector(locator)).sendKeys(value);
	}
	
	public void send_post_click (String locator){
		driver.findElement(By.cssSelector(locator)).click();
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	}
}

  • 0

#14 elvis

elvis

    Постоянный участник

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 05 ноября 2016 - 12:53

зачем изобретать велосипеды?        

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

это не есть ожидание


  • 0

#15 igorek9191

igorek9191

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

  • Members
  • Pip
  • 22 сообщений


Отправлено 06 ноября 2016 - 12:37

Ребят, ну не оставьте.
Знакомого программиста - автоматизатора нет.
У меня всего 4 класса. Base, VkHelper, Vk1, Vk2.
По отдельности каждый тест проходит нормально, но запустить последовательно группой не выходит. Второй тест валится на первой строчке.


  • 0

#16 user12

user12

    Специалист

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


Отправлено 06 ноября 2016 - 14:57

Последовательно не выходит, потому что при последовательном запуске во втором тесте baseUrl = null, т.к. BeforeSuite вызывается только один раз.

 

Решение:

1. 

вынести baseUrl  в константу, т.е. в классе Base добавь строку:

public static final String BASE_URL = "https://new.vk.com/";

2. В @BeforeSuite удалить строку baseUrl = "https://new.vk.com/";

 

3. В тестах пишешь:

vk.driver.get(Base.BASE_URL);

Так будет работать 


  • 0

#17 igorek9191

igorek9191

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

  • Members
  • Pip
  • 22 сообщений


Отправлено 07 ноября 2016 - 06:49

Да, спасибо, теперь 2й тест запускается после первого :smile:

 

Второй раз убеждаюсь, чтобы автоматизировать надо уметь программировать, "более лименее")))


  • 0

#18 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


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

Есть и альтернативный вариант - использование аннотации @BeforeMethod для методов, которые необходимо запускать именно перед каждым тестом (если один тест = один метод, если один тест = один класс - есть аннотация @BeforeClass), а не Suit.


  • 0

#19 ifrOSt

ifrOSt

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

  • Members
  • Pip
  • 6 сообщений

Отправлено 28 ноября 2016 - 09:20

Всем привет. Подскажите из-за чего может не запускаться тест ?

Использую Selenium + Junit

import org.junit.After;
import org.junit.Before;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;

public class FireFoxSettings {

    protected WebDriver driver;

    @Before
    public void SetUp() {
        System.setProperty("webdriver.gecko.driver", "/Users/temaustimcik/Desktop/TestQAProject/geckodriver");
        driver = new FirefoxDriver();
        driver.get("http://facebody54.ru/");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS.SECONDS);
    }

    @After
    public void Closed(){
        driver.close();
    }
}
package Predictions;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class Main {
    private WebDriver driver;

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

    By CallBackButton = By.id("_21");

    public void ClickCallBackButton(){
        driver.findElement(CallBackButton).click();
    }
}
package Tests;

import BrowserSettings.FireFoxSettings;
import Predictions.Main;
import org.junit.Test;

public class Tests extends FireFoxSettings {

    @Test
    public void TestCallBack() throws InterruptedException{
        Main main = new Main(driver);
        main.ClickCallBackButton();
    }
}

Проблема в том что выполняется только шаги описанные в @Before и все. И пишет что тест прошел успешно. Нету клика по элементу и закрытия браузера. Подскажите что не так ? 


  • 0

#20 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 28 ноября 2016 - 10:03

А запускаете как?
что в pom?

Дебажить пробовали?
Добавить в SetUp System.out.println(this.getClass) и узнать какой класс выполняет Before.
Распечатать this из Before и Test, убедится, что объект один.
Проверить что в тесте объект driver тот-же, что и в бефоре
Напечатать что-нибудь из after метода, чтоб увидеть, что он запускается.
  • 0



Темы с аналогичным тегами Selenium, Eclipse

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

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