2016-05-10 1 views
1

Базовый класс:страница объектной модели не расширяя водителя от класса

protected WebDriver driver; 
protected String URL = "https://www.example.com/"; 
public static String SignupURL = "https://www.example.com/login"; 
public Login loginpage; 

@BeforeClass 
public void setup() 
{ 

    System.setProperty("webdriver.chrome.driver","E:\\Selenium-Webdriver\\Chrome_Driver\\chromedriver.exe"); 
    driver = new ChromeDriver(); 
    driver.manage().window().maximize(); 
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    driver.navigate().to(URL); 
    loginpage = PageFactory.initElements(driver,Login.class); 

} 

Войти Класс:

protected WebDriver driver; 

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

public Login Method1() 
{ 

    //Logic 

} 

LoginTest Класс:

public class LoginTest extends Base { 

    @Test 
public void method1() 
{ 
     setup() //Have to Call it 
     //Logic 

    } 

@Test 
public void method2 
{ 
    setup() //Have to Call it 
    //Logic 
    } 

}

Вопрос: Зачем ему нужно позвонить setup() метод для каждого метода в тестовом классе.

Я уже расширяю класс, тогда водитель должен позвонить автоматически, но это не так. Когда я не звоню setup(), то получение Nullpointer Exception, Если я его назову, тогда система откроет новый браузер для каждого метода.

+0

Вы можете вставить полное сообщение об ошибке, которое вы получаете. Я думаю, это связано с тем, что сценарий не может идентифицировать драйвер. –

+0

На первый взгляд код выглядит как OK. Вам не нужно вызывать настройку в каждом методе, вы можете поделиться своим журналом трассировки, может быть, он генерирует nullpointer какой-либо другой фрагмент кода, –

+0

Используйте аннотацию @BeforeTest и сделайте веб-страницу общедоступной. .. это работает для меня ...... я думаю, что это также поможет u – noor

ответ

0

Вы используете @BeforeClass в базовом классе, если изменить его на @BeforeSuite, тогда не нужно называть этот метод установки. Обычно я буду использовать @BeforeSuite в классе mybase и распространять его на все тестовые классы для работы с этим браузером.

ниже один работал для меня

import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.testng.annotations.BeforeSuite; 

public class Base { 


protected WebDriver driver; 
protected String URL = "https://www.google.com/"; 
public static String SignupURL = "https://www.google.com/"; 
//public Login loginpage; 

@BeforeSuite 
public void setup() 
{ 

    // System.setProperty("webdriver.chrome.driver","E:\\Selenium-Webdriver\\Chrome_Driver\\chromedriver.exe"); 
    driver = new FirefoxDriver(); 
    driver.manage().window().maximize(); 
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    driver.navigate().to(URL); 
    // loginpage = PageFactory.initElements(driver,Login.class); 

} 


} 


import org.testng.annotations.Test; 

public class TestCasePage1 extends Base{ 

@Test 
public void testit(){ 
    System.out.println(driver.getTitle()); 
} 

@Test 
public void testit1(){ 
    System.out.println(driver.getTitle()); 
} 

} 

Спасибо, Murali

+0

Спасибо, но я получаю ** java.lang.NullPointerException ** при использовании @BeforeSuite. –

+0

вы можете попробовать один раз, изменив защищенный драйвер WebDriver; для публичного статического драйвера WebDriver; один раз –

+0

Я пробовал, все та же ошибка. –

0

Вопрос заключается в том, что @BeforeClass промахов (alwaysRun=true). Поэтому, если в вашем базовом классе вы пишете @BeforeClass(alwaysRun=true). Тогда вам не нужно вызывать настройку в других классах.

Смежные вопросы