2016-05-10 1 views
1

Classe de base:modèle objet Page ne pas étendre pilote de la classe

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); 

} 

Connexion Classe:

protected WebDriver driver; 

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

public Login Method1() 
{ 

    //Logic 

} 

LoginTest Classe:

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 
    } 

}

Question pourquoi il faut appeler setup() méthode pour chaque méthode dans la classe de test.

Je suis déjà en train de prolonger la classe alors le pilote devrait appeler automatiquement mais ce n'est pas le cas. Lorsque je n'appelle pas setup() puis obtenir Exception Nullpointer, Si je l'appelle, puis l'ouverture du système nouveau navigateur pour chaque méthode.

+0

pouvez-vous s'il vous plaît coller le message d'erreur complet que vous obtenez. Je pense que c'est parce que le script n'est pas capable d'identifier le pilote. –

+0

À première vue, le code ressemble à OK, vous n'avez pas besoin d'appeler setup dans chaque méthode, pouvez-vous partager votre journal de trace peut-être générer un autre morceau de code, –

+0

Utilisez l'annotation @BeforeTest et rendez le webdriver public. ..il fonctionne pour moi ...... je pense que cela va aussi vous aider – noor

Répondre

0

Vous utilisez @BeforeClass dans la classe Base, si vous le remplacez par @BeforeSuite, vous n'avez plus besoin d'appeler cette méthode d'installation. En général, je vais utiliser @BeforeSuite dans la classe mybase et l'étendre à toutes les classes de test pour travailler sur ce navigateur.

ci-dessous on travaillait pour moi

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()); 
} 

} 

Merci, Murali

+0

Merci, mais je reçois ** java.lang.NullPointerException ** lorsque vous utilisez @BeforeSuite. –

+0

pouvez-vous s'il vous plaît essayer une fois en changeant le pilote WebDriver protégé; au pilote WebDriver statique public; une fois –

+0

J'ai essayé, toujours la même erreur. –

0

Le problème est que @BeforeClass misses (alwaysRun=true). Donc, si dans votre classe de base, vous écrivez @BeforeClass(alwaysRun=true). Ensuite, vous n'avez pas besoin d'appeler l'installation dans les autres classes.