POO y Selenium
¡Hola a todos! En esta oportunidad, continuaremos con el contenido de pruebas de automatización con Selenium y nos enfocaremos en algunos criterios muy útiles, tales como detectar errores en los drivers de mi navegador, la Programación Orientada a Objetos (POO), clases, métodos y funciones.
Creando nuestro código con navegador Firefox
Como primer paso, verificaremos la versión del navegador. Para ello, ingresamos a la sección de Ajustes, como se muestra en la siguiente imagen:
He colocado en marcador la versión del navegador:
A continuación, buscamos el driver del navegador insertando Gecko Driver en la búsqueda. Puedes obtener el driver aquí.
Cómo solucionar problemas de incompatibilidad en los navegadores
Uno de los errores más comunes cuando inicializamos nuestro proyecto (y al momento de ejecutarlo) son los de incompatibilidad en la versión del navegador. Eso arroja un error como éste:
Como se visualiza en la imagen anterior, inicialicé mi proyecto y se presentaron estos errores. Por ello se muestra el mensaje:
1678737408688 geckodriver INFO Listening on 127.0.0.1:47986” y “1678737409590 mozrunner::runner INFO Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "--marionette" "-no-remote" "-profile" "C:\\Users\\marce\\AppData\\Local\\Temp\\rust_mozprofile4LyXvM".
En dicho mensaje se muestra el comando ejecutado. Como en todas las tecnologías, debemos considerar que, todos los años, tendremos nuevas actualizaciones (como en este caso, donde la versión ya no es compatible con Selenium), por lo que no nos permite ejecutar nuestro proyecto.
Solucionar este error en consola es sencillo. Solo debes realizar los pasos que mencionamos de la instalación del driver y asegurarte de colocar el nuevo archivo en la ruta donde indicaste que se inicializará tu navegador. ¡Listo!
System.setProperty("webdriver.gecko.driver", "C:\\Users\\marce\\OneDrive\\Documentos\\AUTOMATIZACION\\lib-firefox\\geckodriver.exe" );
Acto seguido, creamos nuestra clase para inicializar nuestro navegador. Recuerda: crear tu proyecto > crear tus paquetes > crear tus clases.
Ejemplo de clase con navegador Firefox
package com.pruebas.automatizacion2;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class NavegadorFirefox {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("webdriver.gecko.driver", "C:\\Users\\marce\\OneDrive\\Documentos\\AUTOMATIZACION\\lib-firefox\\geckodriver.exe" );
//instanciar navegador
WebDriver driver = new FirefoxDriver();
driver.get("https://www.google.com/");
driver.manage().window().maximize();
driver.close();
}
}
POO
Para crear nuestros scripts es necesario entender un poco sobre la programación en Java. La base para ello es tener conocimientos de Programación Orientada a Objetos (POO), clases, métodos, funciones, tipos de datos y atributos, entre otros. Veamos un poco a qué se refieren estos conceptos y cómo ponerlos en práctica.
¿Qué es la Programación Orientada a Objetos o POO?
POO es un paradigma de programación que nos brinda una ayuda o guía sobre cómo podemos desarrollar de manera clara y estructurada. Puede ser utilizado en diferentes lenguajes de programación, dependiendo la necesidad o la arquitectura.
En la Programación Orientada a Objetos, el principal objetivo es movilizar el enfoque de la lógica y enfocarse en los objetos. Trabajar con POO facilita mucho el desarrollo de sistemas robustos, ya que se piensa en grandes componentes, interacciones y relaciones entre los componentes del aplicativo.
El programa completo se ejecuta cuando los objetos interactúan entre sí.
Los 4 Principios de la Programación Orientada a Objetos son:
1. Encapsulación
Su principal objetivo es mantener toda la información clave de un objeto dentro de sí mismo y solo ser utilizado cuando la información sea previamente solicitada para su interacción.
2. Abstracción
Es un principio que permite, de manera simple, ver la forma en la que un usuario interactúa con un objeto complejo en un desarrollo de software.
3. Herencia
Permite la creación de relaciones jerárquicas entre clases, de manera que atributos y métodos comunes puedan ser reutilizados.
La herencia en POO es el principio que permite crear relaciones jerárquicas entre las clases, y así los métodos y atributos puedan ser reutilizados en diferentes ocasiones cuando el desarrollo lo solicite.
4. Polimorfismo
El polimorfismo dentro de POO facilita que un objeto interactúe de diferentes maneras.
¿Qué es una clase en Java?
Una clase es una construcción que se utiliza como plantilla para crear objetos de ese tipo.
¿Cuáles son los elementos de una clase en Java?
- Constructores.
- La sentencia o instrucción package.
- La sentencia import.
- Comentarios.
- Las declaraciones y definiciones de la clase.
- Variables.
- Métodos.
¿Qué son los atributos?
Los atributos son las partes individuales que permiten que un objeto sea diferenciado de otro. Se guardan en variables, por ejemplo: int cantidad = 2; String usuario = “Marcela Amaya”;
Aquí podemos ver cómo se guardan los atributos dentro de las variables declaradas.
¿Qué es un método?
Un método en Java es un conjunto de instrucciones definidas dentro de una clase, que realizan una función y a las que podemos invocar mediante un nombre para cumplir una determinada acción.
Cuando trabajamos con métodos debemos considerar lo siguiente:
- Todo desarrollo en Java contiene un método main. Todos los programas en Java deben comenzar por este método para su ejecución, que es de entrada y de salida del aplicativo.
- Un método inicia al representarse con una llave { y su finalización se indica con la llave opuesta }. También es posible cuando utilizamos la palabra clave return.
- La palabra return puede estar en cualquier lugar dentro del método, por lo que no es obligación que siempre sea utilizada al final.
- Dentro de un método podemos invocar otro método.
- Los métodos en Java siempre pertenecen a una clase.
1. Estructura de un método Java
[acceso] tipoDeDato nombreMetodo([parametros]) [Excepciones]
{
// bloque de instrucciones
[return resultado;]
}
- acceso (opcional): especifica el tipo de acceso al método.
- tipoDeDato: especifica el tipo de dato o valor que este método devuelve.
- nombreMetodo: es el nombre que se le da al método.
- parámetros (opcional): son llamados también datos de entrada y su principal función es indicarle al método si utilizará parámetros de entrada para la ejecución del mismo. Un método puede recibir uno o muchos parámetros, por lo que se debe especificar el tipo de parámetro. Si, en dado caso, el método no lleva parámetros o argumentos, los paréntesis siempre deben ir, solo que en este caso irán vacíos.
- Excepciones (opcional): es un indicador de excepciones que puede contener nuestro método. Muchas veces, el IDE puede sugerirlo.
- return: se utiliza para devolver un valor. Algunas características de return dentro de un método:
-Se coloca luego de una expresión que evaluaremos para obtener un dato de return. Esta expresión puede ser un dato de tipo primitivo o una constante.
-El tipo del valor debe coincidir con el tipoDeDato que se ha indicado en la declaración del método. Por ejemplo, si tipoDeDato es un int entonces return es un int.
- Si un método no devuelve nada (tipoDeDato = void), la instrucción return es opcional para el usuario, ya que no estamos esperando ningún tipo de dato para devolver.
2. Puesta en marcha de un método en Java
Los pasos para implementar un método son:
- Especificar lo que el método debería hacer.
- Declarar las entradas del método.
- Establecer los tipos de datos de entrada que el método esperaría.
- Definir los datos que el método debe regresar y su tipo.
- Colocar las instrucciones que permitirán la creación del método (puedes basarte en el ejemplo anterior).
Ejemplo de método: Tenemos el método llamado sumaDatos, que recibirá dos números enteros y, como resultado, devuelve su suma.
import java.util.Scanner;
public class EjemploMetodo{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1, num2, resultado;
System.out.print("Introduce el primer numero: ");
num1 = sc.nextInt();
System.out.print("Introduce el segundo numero: ");
num2 = sc.nextInt();
resultado = suma(num1, num2);
System.out.println("Suma: " + resultado);
}
//método sumaDatos
public static int suma(int a, int b){
int c;
c = a + b;
return c;
}
}
El método se llama sumaDatos. Recibe dos números enteros a y b que son los argumentos de entrada. El método devuelve un valor de tipo int.
El flujo del programa ejecutado es el siguiente:
- En el método main, cuando hacemos la llamada al método sumaDatos, los valores de las variables num1 y num2 se copian en las variables a y b. Las variables a y b son los argumentos del método.
- El flujo de ejecución del programa pasa al método sumaDatos.
- El método suma los dos números y guarda el resultado en c.
- El método regresa, por medio de la instrucción return, la suma calculada.
- Finaliza la ejecución del método.
- El flujo de ejecución continúa en el método main a partir de donde se produjo el método sumaDatos.
- El valor devuelto por el método es lo que se asigna a la variable resultado en el método main.
En el ejemplo anterior, el método sumaDatos no regresa un valor entero que después vamos a mostrar. En esta opción, pudimos haber hecho la llamada al método directamente dentro del:
System.out.println:
System.out.println("Suma: " + sumaDatos (num1, num2));
Llegaremos hasta aquí. Espero que hayas aprendido un poco sobre la Programación Orientada a Objetos. En la próxima entrada, pondremos en práctica lo aprendido orientándonos a pruebas automatizadas, pero es necesario haber visto un poco este tema de POO para continuar con un aprendizaje sin vacíos.
¡Nos leemos pronto!
Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.