L'initialisation d'objet est-elle la seule différence entre POM et Page Factory dans Selenium?


Réponse 1:

Les informations suivantes sont extraites de la classe PageFactory JavaDoc de la méthode initElements ():

statique publique T initElements (pilote WebDriver, classe pageClassToProxy) {T page = instantiatePage (pilote, pageClassToProxy); initElements (pilote, page); page de retour; }
  • Instancier une instance de la classe donnée et définir un proxy paresseux pour chacun des éléments WebElement et List champs qui ont été déclarés, en supposant que le nom du champ est également "id" ou "nom" de l'élément HTML.

Cela signifie que pour la classe:

classe de classe publique {WebElement privé soumettre; }

il y aura un élément qui peut être localisé en utilisant l'expression xpath

// * [@ id = 'submit'] "ou // * [@ name = 'submit']
  • Par défaut, l'élément ou la liste est recherché à chaque fois qu'une méthode est appelée dessus. Pour modifier ce comportement, il vous suffit d'annoter le champ avec l'annotation CacheLookup. Pour modifier la façon dont l'élément est localisé, utilisez l'annotation FindBy.

——————————————————————————————

Ainsi, lorsque vous utilisez PageFactory,

  1. WebElement ou List les variables sont déclarées privées dans la classe d'objet de page Si la variable WebElement a le même nom avec l'ID d'élément Web ou l'attribut de nom, il n'est pas nécessaire de spécifier un localisateur pour l'élément Sinon, le localisateur d'élément est spécifié avec une méthode annotationinitElements () FindBy définit un proxy paresseux pour chaque élément Web de la classe d'objets page; ce proxy associe l'élément web à son localisateur; mais l'élément web n'est pas recherché lorsque l'élément est utilisé (en appelant des méthodes dessus comme click (), getText (), isEnabled (), etc.), ce qui suit se produit: le localisateur associé à l'élément web pendant la classe de page l'initialisation est récupérée l'élément est recherché dans le domif du navigateur si l'élément est trouvé, le code interagit avec lui si vous ne souhaitez pas que l'élément soit recherché dans le dom du navigateur chaque fois qu'il est utilisé, l'annotation CacheLookup peut être utilisée; dans ce cas, l'élément est mis en cache après avoir été trouvé pour la première fois

Ce n'est que la courte histoire de la Page Factory.

Il est très avantageux de lire le code et d'essayer de comprendre comment il fonctionne.

Cela a fait des merveilles pour moi car, pour comprendre ce que fait le code, j'ai dû apprendre des choses que je ne connaissais pas bien comme

  • génériquesreflectionlazy initialisationproxy classes

Il a fallu un certain temps pour le comprendre, mais je suis très heureux de l'avoir fait.

Bonne chance!

Vous avez aimé cet article et souhaitez en savoir plus?

Consultez mon nouveau blog Quora:

Trucs et astuces sur le sélénium


Réponse 2:

Dans POM (Page Object Model), vous créez une nouvelle classe pour chaque nouvelle page / URL et y mettez toutes vos méthodes d'identification d'élément.

Page Factory est une annotation à l'intérieur du sélénium que vous donnez à la classe. Ainsi, lorsque vous définissez une classe en tant que fabrique de pages, tous vos éléments à l'intérieur de la classe sont chargés tandis que l'un des éléments de la classe est appelé. Th

PS - Page Factory semble être une très mauvaise pratique si vous avez des tonnes d'éléments dans une classe et que vous n'en utilisez qu'un seul.