Los formularios son los elementos fundamentales de la web para recibir información de los visitantes del sitio web. Los formularios web tienen diferentes elementos de GUI como cuadros de texto, campos de contraseña, casillas de verificación, botones de radio, menús desplegables, entradas de archivos, etc.
Veremos cómo acceder a estos diferentes elementos de formulario utilizando Selenium Web Driver con Java. Selenium encapsula cada elemento del formulario como un objeto de WebElement. Proporciona API para encontrar los elementos y tomar medidas sobre ellos como ingresar texto en cuadros de texto, hacer clic en los botones, etc. Veremos los métodos que están disponibles para acceder a cada elemento del formulario.
En este tutorial, veremos cómo identificar los siguientes elementos del formulario
- Introducción a WebElement, findElement (), findElements ()
- Caja de entrada
- Introducción de valores en cuadros de entrada
- Eliminar valores en cuadros de entrada
- Botones
- Enviar botones
- Código completo
- Solución de problemas
Introducción a WebElement, findElement (), findElements ()
Selenium Web Driver encapsula un elemento de formulario simple como un objeto de WebElement.
Existen varias técnicas mediante las cuales WebDriver identifica los elementos del formulario en función de las diferentes propiedades de los elementos web, como ID, Nombre, Clase, XPath, Nombre de etiqueta, Selectores de CSS, Texto de enlace, etc.
Web Driver proporciona los siguientes dos métodos de WebElement para encontrar los elementos.
- findElement () : busca un solo elemento web y lo devuelve como un objeto WebElement Selenium.
- findElements () : devuelve una lista de objetos WebElement que coinciden con los criterios del localizador.
Veamos los fragmentos de código para obtener un solo elemento: Campo de texto en una página web como un objeto de WebElement usando el método findElement (). Cubriremos el método findElements () de encontrar múltiples elementos en tutoriales posteriores.
Paso 1: Necesitamos importar este paquete para crear objetos de Web Elements
Paso 2: Necesitamos llamar al método findElement () disponible en la clase WebDriver y obtener un objeto de WebElement.
Consulte a continuación para ver cómo se hace.
Caja de entrada
Los cuadros de entrada se refieren a cualquiera de estos dos tipos:
- Campos de texto: cuadros de texto de entrada de selenio que aceptan valores escritos y los muestran como están.
- Campos de contraseña : cuadros de texto que aceptan valores escritos pero los enmascaran como una serie de caracteres especiales (comúnmente puntos y asteriscos) para evitar que se muestren valores confidenciales.
Localizadores
El método findElement () toma un parámetro que es un localizador del elemento. Diferentes localizadores como By.id (), By.name (), By.xpath (), By.CSSSelector () etc. localizan los elementos en la página usando sus propiedades como `` '' id, nombre o ruta, etc.
Puede usar complementos como Fire path para obtener ayuda para obtener la identificación, xpath, etc. de los elementos.
Usando el sitio de ejemplo http://demo.guru99.com/test/login.html que se proporciona a continuación, se encuentra el código para ubicar el campo de texto "Dirección de correo electrónico" usando el localizador de identificación y el campo "Contraseña" usando el localizador de nombres.
- El campo de texto del correo electrónico está ubicado por Id.
- El campo de contraseña se encuentra por nombre
sendkeys en selenio
sendkeys () en Selenium es un método utilizado para ingresar contenido editable en los campos de texto y contraseña durante la ejecución de la prueba. Estos campos se identifican mediante localizadores como nombre, clase, id, etc. Es un método disponible en el elemento web. A diferencia del método type, el método sendkeys () no reemplaza el texto existente en ningún cuadro de texto.
Introducción de valores en cuadros de entrada
Para ingresar texto en los campos de texto y los campos de contraseña, sendKeys () es el método disponible en WebElement en Selenium.
Usando el mismo ejemplo del sitio http://demo.guru99.com/test/login.html, así es como encontramos el campo Texto y los campos Contraseña e ingresamos texto en Selenium.
- Busque el campo de texto "Dirección de correo electrónico" utilizando el localizador de identificación.
- Busque el campo "Contraseña" con el localizador de nombres
- Ingrese texto en la "Dirección de correo electrónico" utilizando el método de teclas de envío de Selenium.
- Ingrese una contraseña en el campo "Contraseña" usando el método sendKeys ().
Eliminar valores en cuadros de entrada
El método clear () se utiliza para eliminar el texto en un cuadro de entrada. Este método no necesita un parámetro . El siguiente fragmento de código borrará el texto de los campos de correo electrónico o contraseña.
Botones
Se puede acceder al botón de clic de Selenium usando el método de clic ().
En el ejemplo anterior
- Encuentra el botón para iniciar sesión
- Haga clic en el botón "Iniciar sesión" en la página de inicio de sesión del sitio para iniciar sesión en el sitio.
Enviar botones
Los botones de envío se utilizan para enviar el formulario completo al servidor. Podemos usar el método click () en el elemento web como un botón normal como lo hemos hecho anteriormente o usar el método submit () en cualquier elemento web en el formulario o en el botón enviar en sí.
Cuando se usa submit (), WebDriver buscará el DOM para saber a qué formulario pertenece el elemento y luego activará su función de envío.
Código completo
Aquí está el código de trabajo completo
import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.chrome.ChromeDriver;importar org.openqa.selenium. *;Formulario de clase pública {public static void main (String [] args) {// declaración e instanciación de objetos / variablesSystem.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/login.html";driver.get (baseUrl);// Obtenga el WebElement correspondiente a la dirección de correo electrónico (TextField)WebElement email = driver.findElement (By.id ("email"));// Obtenga el WebElement correspondiente al campo de contraseñaWebElement contraseña = driver.findElement (By.name ("passwd"));email.sendKeys (" Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verla");contraseña.sendKeys ("abcdefghlkjl");System.out.println ("Conjunto de campos de texto");// Eliminando valores en el cuadro de textoemail.clear ();contraseña.clear ();System.out.println ("Campo de texto borrado");// Encuentra el botón de enviarWebElement login = driver.findElement (By.id ("SubmitLogin"));// Usando el método de clic para enviar el formularioemail.sendKeys (" Esta dirección de correo electrónico está protegida contra spambots. Necesita tener JavaScript habilitado para verla"); contraseña.sendKeys ("abcdefghlkjl"); login.click (); System.out.println ("Inicio de sesión hecho con clic"); // usando el método de envío para enviar el formulario. Enviar utilizado en el campo de contraseña driver.get (baseUrl); driver.findElement (By.id ("email")). sendKeys (" Esta dirección de correo electrónico está protegida contra spambots. Necesita activar JavaScript para verla"); driver.findElement (By.name ("passwd")). sendKeys ("abcdefghlkjl"); driver.findElement (By.id ("SubmitLogin")). submit (); System.out.println ("Inicio de sesión completado con Enviar"); //driver.close (); }}
Solución de problemas
Si encuentra NoSuchElementException () mientras busca elementos, significa que el elemento no se encuentra en la página en el punto en que el controlador web accedió a la página.
- Verifique su localizador nuevamente usando Firepath o Inspect Element en Chrome.
- Verifique si el valor que usó en el código es diferente al del elemento en Firepath ahora.
- Algunas propiedades son dinámicas para pocos elementos. En caso de que encuentre que el valor es diferente y está cambiando dinámicamente, considere usar By.xpath () o By.cssSelector (), que son formas más confiables pero complejas.
- A veces, también podría ser un problema de espera, es decir, el controlador web ejecutó su código incluso antes de que la página se cargara por completo, etc.
- Agregue una espera antes de findElement () usando esperas implícitas o explícitas.
Resumen
- La siguiente tabla resume los comandos para acceder a cada tipo de elemento discutido anteriormente.
Elemento | Mando | Descripción |
---|---|---|
Caja de entrada | sendKeys () | utilizado para ingresar valores en cuadros de texto |
claro() | utilizado para borrar los cuadros de texto de su valor actual | |
Enlaces | hacer clic() | utilizado para hacer clic en el enlace y esperar a que se complete la carga de la página antes de continuar con el siguiente comando. |
Botón de enviar | enviar() |
- WebDriver permite la selección de más de una opción en un elemento SELECT múltiple.
- Puede utilizar el método submit () en cualquier elemento del formulario. WebDriver activará automáticamente la función de envío del formulario al que pertenece ese elemento.