Voici comment j'ai réussi à surmonter cela. J'ai gardé différents fichiers de propriétés d'éléments pour différents environnements.
Disons l'environnement A, B Dans mon projet je garde deux fichiers de propriétés nommés Elements_A.properties et Elements_B.properties Ces fichiers de propriétés ont tous les éléments de la page. Si un élément diffère de l'autre, cela ne posera aucun problème car, lors de l'exécution du script en fonction de l'environnement, vous pouvez référencer le fichier de propriétés pertinent dans le script.
Disons dans A et B dans HomePage il y a une zone de texte avec différents locators.
Donc, dans le dossier de la propriété A, on peut citer l'élément comme HomePage_Name_TextBox = id_NameInA « id_NameInA » est la valeur de localisation et « HomePage_Name_TextBox » est la chaîne que vous allez utiliser pour faire référence cet élément particulier.
Comme sage dans le dossier de la propriété A, on peut citer le même élément que HomePage_Name_TextBox = id_NameInB « id_NameInB » est la valeur de localisation et « HomePage_Name_TextBox » est la chaîne que vous allez utiliser pour faire référence cet élément particulier.
Vous pouvez remarquer que les deux éléments portent le même nom (HomePage_Name_TextBox) et que les valeurs de localisation sont différentes.
Dans chaque classe de page j'ai déclaré une carte et maintenant vous avez plusieurs options pour décider comment vous allez initialiser les éléments pour votre page.
public class HomePage {
Map<String, String> elementsMap = new HashMap<String, String>();
//Option 1
public HomePage(Map<String, String> elementMapObj) {
elementsMap = elementMapObj;
}
//Option 2
public HomePage() {
Properties prop = new Properties();
FileReader reader;
HashMap<String, String> propertyMap = new HashMap<String, String>();
try {
reader = new FileReader(new File("CommonConfig.properties"));
prop.load(reader);
for (String key : prop.stringPropertyNames())
{
String value = prop.getProperty(key);
propertyMap.put(key, value);
}
} catch (Exception e) {
//System.out.println(e.toString());
}
try {
reader = new FileReader(new File(propertyMap.get("ElementPropFilePath")));
prop.load(reader);
for (String key : prop.stringPropertyNames())
{
String value = prop.getProperty(key);
elementsMap.put(key, value);
}
} catch (Exception e) {
//System.out.println(e.toString());
}
}
}
- Vous pouvez déclarer un constructeur paramétrés et passer un objet de la carte où vous avez tous les éléments lire avant d'initialiser un objet de HomePage (dans votre classe principale, vous pouvez lire le fichier de propriétés d'élément correspondant et passer la carte OU vous pouvez lire un fichier de propriétés commun dans le constructeur HomePage lui-même où vous pouvez mentionner le chemin du fichier de propriétés d'éléments. ex: CommonConfig.properties ce fichier peut contenir tous les détails de configuration tels que l'environnement dans lequel vous exécutez les scripts et les chemins de fichiers communs à lire (tels que le chemin du fichier d'élément) et ce fichier seront lus dans le constructeur fichier de configuration ressemblera à ceci
ElementPropFilePath = Ressources/Elements_A.properties
Lorsque vous voulez exécuter des scripts en A, vous pouvez changer le « ElementPropFilePath » dans le fichier de propriété commune à « Ressources/Elements_A.properties "avant de courir. Lorsque vous voulez exécuter des scripts dans B, vous pouvez remplacer "ElementPropFilePath" dans le fichier de propriétés commun par "Resources/Elements_B.properties" avant de l'exécuter (il s'agit de l'emplacement du fichier dans la machine). Pour dire simplement, si vous gérez des fichiers de propriétés contenant tous les éléments pour chaque environnement, et fournissez ces détails de propriété et remplissez l'elementMap que vous avez à l'intérieur de chaque classe de page, vous pourrez référencer cet élément avec le commun string que vous avez utilisé pour les deux environnements (qui est HomePage_Name_TextBox dans cet exemple)
Utilisez-vous l'annotation 'FindBy' dans vos classes PageObject? Ou utilisez-vous findElement du code? – Grasshopper
Im utilisant @FindBy annotations – Cathal