¿La inicialización de objetos es la única diferencia entre POM y Page Factory en Selenium?


Respuesta 1:

La siguiente información se toma de la clase PageFactory JavaDoc del método initElements ():

público estático T initElements (controlador WebDriver, clase pageClassToProxy) {T página = instantiatePage (controlador, pageClassToProxy); initElements (controlador, página); volver a la página; }
  • Instanciar una instancia de la clase dada y establecer un proxy diferido para cada elemento web y lista campos que se han declarado, suponiendo que el nombre del campo también sea el "id" o "nombre" del elemento HTML.

Esto significa que para la clase:

Página de clase pública {WebElement privado enviar; }

habrá un elemento que puede ubicarse usando la expresión xpath

// * [@ id = 'submit'] "o // * [@ name = 'submit']
  • Por defecto, el elemento o la lista se busca cada vez que se llama a un método. Para cambiar este comportamiento, simplemente anote el campo con la anotación CacheLookup. Para cambiar la ubicación del elemento, use la anotación FindBy.

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

Entonces, cuando se usa PageFactory,

  1. WebElement o List las variables se declaran como privadas en la clase de objeto de página Si la variable WebElement tiene el mismo nombre con la identificación del elemento web o el atributo de nombre, no es necesario especificar un localizador para el elemento De lo contrario, el localizador del elemento se especifica con un método FindBy annotationinitElements () establece un proxy diferido para cada elemento web de la clase de objeto de página; este proxy asocia el elemento web con su localizador; pero el elemento web aún no se busca cuando se usa el elemento (llamando a métodos como click (), getText (), isEnabled (), etc.), sucede lo siguiente: el localizador asociado con el elemento web durante la clase de página se recupera la inicialización el elemento se busca en el navegador si se encuentra el elemento, el código interactúa con él si no desea que se busque el elemento en el navegador cada vez que se usa, se puede usar la anotación CacheLookup; en este caso, el elemento se almacena en caché después de ser encontrado por primera vez

Esta es solo la historia corta de Page Factory.

Es muy beneficioso leer el código y tratar de entender cómo funciona.

Esto me hizo maravillas ya que, para comprender lo que hace el código, tuve que aprender cosas que no sabía bien, como

  • genericsreflectionlazy initializationproxy clases

Me tomó un tiempo resolverlo, pero estoy muy contento de haberlo hecho.

¡Buena suerte!

¿Te gustó este artículo y quieres leer más?

Mira mi nuevo blog de Quora:

Consejos y trucos de selenio


Respuesta 2:

En POM (Page Object Model), crea una nueva clase para cada nueva página / URL y coloca todos sus métodos de identificación de elementos en ella.

Page Factory es una anotación dentro del selenio que le das a la clase. Entonces, cuando define cualquier clase como fábrica de páginas, todos sus elementos dentro de la clase se cargarán mientras se llama a cualquiera de los elementos de la clase. Th

PD: Page Factory parece una muy mala práctica si tienes toneladas de elementos en una clase y estás usando solo uno.