1

Je suis novice dans le domaine du sélénium et de l'arquillien. J'essaye d'implémenter le modèle d'objet de page. Les capacités du navigateur Webdriver sont sauvegardées dans un fichier xml arquillien.Initialiser les objets Page - Arquillian - Selenium

J'utilise TestNG et a créé les classes suivantes:

public class Test{ 
    @Drone 
    Webdriver driver; 
    @Page 
    Login login; 
    @Page 
    Home home; 
    public void createOrderTest(){ 
    login.navigateURL(); 
    login.setcredentials(); 
    home.createOrder(); 
    } 
} 

public class Login{ 
    // Webelements needed in methods below are declared here 
    public void navigateURL(){ 
    driver.get("//url/login.aspx"); 
    } 
    public void setCredentials(){ 
    // code to enter username, password and click login 
    Graphene.waitAjax().until().element(signIn).is().not().visible(); 
    } 
} 

public class Home{ 
    // Webelements needed in methods below are declared here 
    public void createOrder(){ 
    // code to create order 
    } 
} 

Énoncé du problème: Je ne sais pas comment naviguer entre Login et Home pages dans le code. Une fois que l'utilisateur se connecte en utilisant les méthodes de page Login, comment Webdriver peut-il utiliser les méthodes de page Home pour continuer le test?

Erreur:

test fonctionne très bien avec navigateURL et setcredentials méthodes. Cependant, le test ne parvient pas à accéder à la méthode createOrder comme suit:

WARNING: Argument 1 for UpdateTestResultBeforeAfter.update is null. It won't be invoked. 
FAILED CONFIGURATION: @BeforeMethod arquillianBeforeTest(public void Test.createOrder() throws javax.mail.MessagingException,java.io.IOException,java.security.GeneralSecurityException) 
org.jboss.arquillian.graphene.enricher.exception.PageObjectInitializationException: Can not instantiate Page Object class Home 

S'il vous plaît me guider. Je vous remercie.

+0

questions visant à obtenir l'aide de débogage (« ** pourquoi est-ce pas le code de travail? ** ») doit inclure le comportement souhaité, un problème _specific ou ERROR_ et _la necessary_ de code le plus court pour le reproduire ** dans la question lui-même **. Les questions sans ** un énoncé de problème clair ** ne sont pas utiles aux autres lecteurs. Voir: [mcve]. – JeffC

+0

@JeffC Merci pour la suggestion.J'ai édité ma question pour la rendre plus lisible. – newuser

Répondre

3

La page d'accueil est-elle une page statique? Je suppose que vous ne devez pas rediriger la page de connexion vers la page d'accueil. Cela devrait être fait par l'application elle-même. Autrement dit, l'utilisateur final accédera à la page de connexion avec l'URL. après toutes les navigations devraient être faites par l'application elle-même.

@RunAsClient 
public class Test extends Arquillian{ 

    @Drone 
    Webdriver driver; 

    @Page 
    Login login; 

    @Page 
    Home home; 

    public void createOrderTest(){ 
    login.navigateURL(); 
    login.setcredentials(); 

    //you do not need this 
    //home = Graphene.goTo(Home.class) 

    //use graphene fluent wait API to wait for the page load 
    home.createOrder(); 
    } 
} 
+0

L'application navigue jusqu'à la page d'accueil après les connexions de l'utilisateur. J'ai supprimé l'instruction Graphene.goTo et ajouté l'attente jusqu'à ce que le bouton de connexion ne soit pas visible, mais cela n'a pas aidé. J'ai essayé de supprimer l'annotation @Location dans la page d'accueil. L'erreur persiste toujours. J'ai modifié le code pour refléter mes nouveaux changements. – newuser

+0

Le localisateur d'un objet à l'intérieur de la page d'accueil est incorrect en raison de l'échec de l'exécution. Changé le className de l'objet et cela a bien fonctionné. Merci. – newuser