Déterminer l'appelant de la page qui a la page commune que la composition
On suppose que je suis à la page: J'ai cliqué sur le lien « Créer livre », me prend à la page Book Creator et quand je clique sur démarrer Livre créateur, il me renvoie Page principale
Je suppose que je suis dans une page de résultats de recherche: J'ai cliqué sur le lien "Créer un livre", j'arrive à la page Book Creator et quand je clique sur Démarrer le créateur du livre, il me renvoie recherche page de résultats
vous pouvez tester ce scénario dans le lien Wikipedia page
même dans le code:
public class CommonItem {
Class<?> Calle
CommonItem(Class<?> Calle) {
this.calle = calle;
}
public PageX clickLink() {
return new PageX(Class<?> Calle);
}
}
public class PageA {
// WebDriver driver;
CommonItem ci;
PageA() {
ci = new CommonItem(PageA.class);
}
public PageX commonItemClick() {
PageX axp = ci.clickLink();
return axp;
}
}
public class PageB {
CommonItem ci;
PageB() {
ci = new CommonItem(PageB.class);
}
public PageX commonItemClick() {
PageX bxp = ci.clickLink();
return bxp;
}
}
public class PageX {
Class<?> calle;
PageX(Class<?> calle){
this.calle = calle;
}
public void someLink() {
// Click some Link here
// return pageA or PageB (depends on which page called this method, How to determine?)
return calle;
}
}
Mise à jour-1: J'ai mis en suggestion ci-dessus. Maintenant, j'ai une méthode d'essai qui appelle la méthode pageX.someLink(), retourne PageA ou PageB, la syntaxe serait
PageX xp = pageA.commonItemClick();
Class<?> caller = xp.someLink();
// how to access method of page A via caller variable ?
Ajoutez un champ de classe > callee à la classe CommonItem, modifiez ou ajoutez un autre constructeur pour obtenir la valeur de ce champ d'appel et l'initialiser. Ainsi, votre constructeur PageA aura une nouvelle ligne CommonItem (PageA.class). La classe CommonItem sait maintenant quelle classe a créé un objet. – Grasshopper
Ajout de la mise à jour 1 à la question. Pas sûr, comment accéder à la méthode de la page de résultats. –