2016-12-26 1 views
0

Je construis un cadre de test pour un site Web en utilisant la page Object Model avec Séléniumpage Object Model Pratiques

Je pense qu'en général, si j'ai deux pages avec les contrôles utilisateur exacts et fonctions mais différentes URL je créer une classe de page père dont deux classes en héritent. Mais que se passe-t-il si j'ai les mêmes deux pages avec des localisateurs différents pour les contrôles? Qu'est-ce que tu penses? Pensez-vous que créer une classe totalement distincte pour chaque page sera une bonne pratique? ou existe-t-il un moyen de laisser les classes d'enfants remplacer les locators? sachant que j'utilise PageFactory.

Voici un exemple

public class Header 
    { 
    [FindsBy(How = How.ClassName, Using = "logout_button")] 
    public IWebElement BtnLogout { get; set; } 

    public Header() 
    { 
    PageFactory.InitElements(Browser.Driver, this); 
    } 

    public void Logout() 
    { 
     this.BtnLogout.Click(); 

    } 

} 

public class SecondHeader 
{ 
    [FindsBy(How = How.ClassName, Using = "logout")] 
    public IWebElement BtnLogout { get; set; } 

    public Header() 
    { 
    PageFactory.InitElements(Browser.Driver, this); 
    } 

    public void Logout() 
    { 
     this.BtnLogout.Click(); 

    } 

} 
+2

utiliser l'héritage, construire la page des parents (père) et passer la valeur de localisation comme param pour obtenir le contrôle. HTH. –

+0

comment passer les localisateurs lors de l'utilisation [FindsBy (How = How.method, Using = value)] –

+0

Pouvez-vous s'il vous plaît rapidement afficher l'exemple de code ici? –

Répondre

2

Vous pouvez faire comme ceci:

public class Header 
    { 
    [FindsBy(How = How.ClassName, Using = "logout_button")] 
    public virtual IWebElement BtnLogout { get; set; } 

    public Header() 
    { 
    PageFactory.InitElements(Browser.Driver, this); 
    } 

    public void Logout() 
    { 
     this.BtnLogout.Click(); 

    } 

} 

public class SecondHeader: Header 
{ 
    [FindsBy(How = How.ClassName, Using = "logout")] 
    public overidde IWebElement BtnLogout { get; set; } 
}