2. Algunas definiciones y conceptos - juansedev/TestAutomationTutorial GitHub Wiki

📗 WedDriver

WebDriver habla con un navegador a través de un controlador. La comunicación es bidireccional: WebDriver pasa comandos al navegador a través del controlador y recibe información a través de la misma ruta.

El controlador es específico del navegador, como ChromeDriver para Chrome / Chromium de Google, GeckoDriver para Firefox de Mozilla, etc. El controlador se ejecuta en el mismo sistema que el navegador. Este puede ser, o no, el mismo sistema en el que se ejecutan las pruebas.

WebDriver tiene un trabajo y solo un trabajo: comunicarse con el navegador. WebDriver no sabe nada sobre pruebas: no sabe cómo comparar cosas, afirmar aprobar o reprobar, y ciertamente no sabe nada sobre informes o gramática Given / When / Then. Aquí es donde entran en juego varios marcos. Como mínimo, necesitará un marco de prueba que coincida con los enlaces de idioma, p. Ej. NUnit para .NET, JUnit para Java, RSpec para Ruby, etc. El marco de prueba es responsable de ejecutar y ejecutar su WebDriver y los pasos relacionados en sus pruebas. Como tal, puede pensar que se parece a la siguiente imagen.

🔗 Selenium WebDriver - Understanding the components

🔗 Selenium WebDriver - Driver manipulation

📘 Page Object Model

El concepto básico en el que se basa este patrón es el de representar cada una de las pantallas que componen el sitio web o la aplicación que nos interesa probar, como una serie de objetos que encapsulan las características y funcionalidades representadas en la página. De esta manera, nos permite consolidar el código para interactuar con los elementos de una página en cada uno de los PageObjects.

Al crear un PageObject, lo que estamos consiguiendo es crear una capa de abstracción entre el « ¿Qué podemos hacer/ver en la página? », y el « Cómo » se realiza esta acción, simplificando enormemente la creación de nuestras pruebas y reutilizando el código con el que interactuamos con la página en concreto. Y a la vez, cualquier cambio que se produzca en la UI únicamente afectará al PageObject en cuestión, no a los test ya implementados.

Esto se debe a que un test nunca debe manipular directamente elementos de la página (UI), si no que este manejo debe realizarse a través del PageObject correspondiente que representa la página. Para entendernos, el PageObject se convierte en una API con la que fácilmente podemos encontrar y manipular los datos de la página.

🔗 Patrones de diseño en automatización: PageObjects

🔗 ¿Qué es POM ?

📗 WebElements

WebElement representa un elemento del DOM. Los WebElements pueden ser encontrados buscando desde la raíz del documento usando una instancia de WebDriver, o buscando bajo otro WebElement.

🔗 Selenium - Web element

📙 Esperas / Waits

Cuando el navegador carga una página, los elementos dentro de esa página pueden cargarse en diferentes intervalos de tiempo. Esto dificulta la localización de elementos: si un elemento todavía no está presente en el DOM, una función de localización mostrará una excepción ElementNotVisibleException. Usando las esperas, podemos resolver este problema. La espera proporciona cierta holgura entre las acciones realizadas – la mayoría de las veces localizando un elemento o cualquier otra operación con el elemento.

Selenium Webdriver ofrece dos tipos de espera – implícita y explícita. Una espera explícita hace que WebDriver espere a que se produzca una determinada condición antes de continuar con la ejecución. Una espera implícita hace que WebDriver sondee el DOM durante cierto tiempo al intentar localizar un elemento.

🔗 Selenium - Waits

🔗 How to use Wait commands in Selenium WebDriver

🔗 ESPERAS DE CARGA CON SELENIUM

📕 Selectores

Hay ocho estrategias de ubicación de elementos integradas diferentes en WebDriver:

Locator Descripción
Class name Locates elements whose class name contains the search value (compound class names are not permitted)
CSS selector Locates elements matching a CSS selector
id Locates elements whose ID attribute matches the search value
name Locates elements whose NAME attribute matches the search value
link text Locates anchor elements whose visible text matches the search value
partial link text Locates anchor elements whose visible text contains the search value. If multiple elements are matching, only the first one will be selected.
tag name Locates elements whose tag name matches the search value
link text Locates anchor elements whose visible text matches the search value
xpath Locates elements matching an XPath expression

🔗 Selenium WebDriver - Localizando elementos

📗 Assertions / Validaciones

La afirmación determina el estado de la aplicación si es lo mismo que estamos esperando o no. Si la aserción falla, el caso de prueba falla y detiene la ejecución.

🔗 Assertions

🔗 TestNG

🔗 Selenium WebDriver - TestNG y para la gestión de casos de prueba y la generación de informes

📒 Suite

TestNG le permite ejecutar métodos de prueba, clases de prueba y casos de prueba en paralelo dentro de su proyecto. Al realizar la ejecución en paralelo, podemos reducir el "tiempo de ejecución" ya que las pruebas se inician y ejecutan simultáneamente en diferentes hilos.

🔗 TestNG: How to Run Multiple Test Suites in Selenium

🔗 Selenium and TestNG

📓 Logging / Reportes