2017-02-10 1 views
0

Ceci est susceptible d'être plus d'une question java que le sélénium, mais depuis que je suis très nouveau à Java, je ne connais pas la réponse. J'écris des tests de sélénium en utilisant le modèle d'objet page. J'ai les pages dans une classe, et les tests dans un autre. Cependant, je suis en train de n'exécuter PageFactory.initelements une fois par classe de test, donc je n'ai pas ajouter la ligne dans chaque test (dans cette classe, de toute façon, je veux faire quelque chose comme ceci:Selenium PageFactory: initelements une fois par classe?

import com.company.pages.LoginPage 

public class LoginTests { 

    LoginPage login = PageFactory.initElements(driver, LoginPage.class); 

    @Test 
    public void test1() { 
     login.method(); 
    } 

    @Test 
    public void test2() { 
     login.methodTwo(); 
    } 
} 

Mais je continuer à obtenir un NullPointerException sur un objet que j'ai défini dans la classe LoginPage. Cela me dit que la page n'a jamais été initialisée.Mais comme je suis relativement nouveau à Java, je ne sais pas comment l'initialiser.Merci pour votre aide!

Répondre

1

Essayez ceci:

LoginPage login; 

@Before 
public void beforeTest() { 
    login = PageFactory.initElements(driver, LoginPage.class); 
} 

Selon this:

Annoter une méthode void publique avec @Before provoque l'exécution de cette méthode avant le T méthode est.

Cela aidera à réduire la verbosité de vos tests.

+0

Cela n'a pas fonctionné, mais cela m'a conduit à la réponse. J'ai mes définitions de pilote dans une autre classe en utilisant '@ BeforeMethod' de TestNG, donc j'ai ajouté un autre' @ BeforeMethod' dans la classe de test réelle qui est exécutée après la première, et y place le code! – kroe761

1

La variable que vous avez déclarée doit être initialisée à une valeur

int a; // This is a declaration a = 0; // This is an initialization int b = 0; // This is a declaration and initialization

En termes de pageObejcts, compte tenu Page d'accueil en tant que classe, vous pouvez initialiser WebElement comme ci-dessous

private static WebElement element = null; 
+0

Merci. Je comprends que. Je dis que j'ai * pensé * J'ai initialisé la classe 'LoginPage' en haut de la classe, mais j'ai toujours l'erreur. – kroe761

+0

Le point de 'PageFactory.initElements' est que je ne devrais pas avoir besoin d'initialiser des éléments individuels, mais plutôt d'initialiser la page et d'obtenir les éléments avec la page. Si j'inclus 'LoginPage login = PageFactory.initElements (pilote, LoginPage.class)' dans chaque '@ Test', le code fonctionne sans problèmes. J'espérais juste initialiser la page une seule fois par classe et réduire la verbosité des tests. – kroe761