Blog
Las 50 preguntas y respuestas más populares de Selenium
En esta sección hemos seleccionado las preguntas más frecuentes sobre Selenium que pueden hacerte durante una entrevista. Entre ellas puedes encontrar preguntas sobre Selenium IDE, Selenium RC, Grid y WebDriver. Nuestras preguntas están estructuradas para que puedas prepararte mejor a las preguntas que te pueden realizar durante una entrevista aunque también te van a servir para que te habitúes a los conceptos básicos de Selenium.
Automation testing o Test Automation es un proceso de automatización del proceso manual para probar la aplicación o poner el sistema bajo prueba. La prueba de automatización implica usar una herramienta de prueba separada que le permite crear scripts de prueba que pueden ejecutarse en forma repetida y no necesita intervención manual.
Beneficios de pruebas de automatización son:
- Ayuda a comprobar una matriz grande de prueba
- Activa la ejecución paralela.
- Alienta el proceso de ejecución desatendida
- Mejora la precisión y disminuye los errores que genera el hombre.
- Permite el ahorro de tiempo y dinero
- Apoya la ejecución de casos de repetición de pruebas
Selenium
- Es gratis y open source (código abierto)
- Por tener una base de usuarios grande y ayudar a las comunidades.
- tiene compatibilidad entre varios navegadores como: (Explorer, Chrome, Internet, Firefox Safari, etc.)
- Tiene gran compatibilidad de plataforma como:(Windows, Linux, etc.)
- soporta múltiples lenguajes de programación (Mac OS, Linux, Java, C #, Ruby, Windwos, Python, Pearl, etc.)
- Tiene desarrollos de repositorio nuevo y regular.
- Soporta muchas pruebas distribuidas
Selenium es una de las suites de pruebas automatizadas muy populares, diseñado para soportar y fomentar las pruebas de automatización, de aspectos funcionales de aplicaciones que se basan en la web, y una amplia gama de navegadores y plataformas. Existe en la comunidad de código abierto, convertida en herramienta muy aceptada entre los profesionales de pruebas.
Selenium no es solo una herramienta sino un paquete de varias herramientas de prueba, por ello, se lo llama Suite. Cada herramienta está diseñada para satisfacer distintas pruebas y requisitos de entorno de prueba.
El paquete de la suite contiene los siguientes conjuntos de herramientas:
- Selenium Integrated Development Environment (IDE) : Selenium IDE u herramienta de grabación y reproducción. Se distribuye como complemento de Firefox.
- Selenium Remote Control (RC): Selenium RC un servidor que permite a un usuario crear scripts de prueba en cualquier lenguaje de programación, que permite ejecutar scripts de prueba, dentro de cualquier navegador.
- Selenium WebDriver – WebDriver: herramienta distinta a las otras, tiene varias ventajas sobre Selenium RC. WebDriver se comunica en forma directa con el navegador web y usa su compatibilidad nativa para automatizar.
- Selenium Grid : se usa para distribuir su ejecución de prueba en muchas plataformas y entornos simultáneamente.
Selenium soporta:
- Las pruebas funcionales
- Las pruebas de regresión
Limitaciones de Selenium:
- Admite pruebas de aplicaciones que se basan únicamente en la web
- Las aplicaciones móviles, son imposibles de probar usando Selenium
- Lectores de Captcha y Código de barras no pueden ser probados con Selenium
- Los informes se pueden generar usando sólo herramientas de terceros como TestNG o JUnit.
- Selenium es una herramienta gratuita, no hay proveedor de soporte para que el usuario pueda ubicar muchas comunidades de ayuda.
- El usuario debe poseer conocimientos previos de lenguaje de programación.
Característica | Selenio IDE | Selenio RC | WebDriver |
Compatibilidad del navegador | viene como un complemento de Firefox, solo es compatible con el mismo. | admite muchas versiones de Firefox, Opera. Google Chrome, Mozilla Internet y Explorer | admite varias versiones de Firefox, Internet Google Chrome, Mozilla Explorer y Opera. es compatible también con HtmlUnitDriver, navegador sin GUI o sin interfaz. |
Grabar y reproducir | admite función de grabación y reproducción | no admite la función de grabación y reproducción. | no admite la función de grabación y reproducción |
Requisito del servidor | no requiere iniciarse ningún servidor antes de ejecutar los scripts de prueba | Necesita que el servidor se inicie antes de ejecutar los scripts de prueba. | no necesita que se inicie ningún servidor antes de ejecutar los scripts de prueba |
Arquitectura | un framework basado en Javascript | un Framework basado en JavaScript. | utiliza la compatibilidad nativa del navegador con la automatización |
Orientado a objetos | no es herramienta orientada a objetos | herramienta semi orientada a objetos. | herramienta solamente orientada a objetos. |
Buscadores dinámicos (para localizar elementos web en una página web) |
no soporta buscadores dinámicos | no soporta buscadores dinámicos. | soporta buscadores dinámicos |
Manejo de Alertas, Navegaciones, Dropdowns. | no proporciona ayudas para manejar alertas, navegaciones, menús desplegables | no proporciona explícitamente ayudas para manejar alertas, navegaciones, menús desplegables. | ofrece utilidades y clases que ayudan a manejar navegadores alertas, y menús desplegables de manera eficiente y efectiva. |
Pruebas WAP (iPhone / Android) | no admite la prueba de aplicaciones iPhone / Andriod | no admite la prueba de aplicaciones iPhone / Android. | diseñado de manera que sea compatible con las pruebas de aplicaciones iPhone / Android. La herramienta viene con muchoscontroladores para pruebas basadas en WAP. Por ejemplo, AndroidDriver, iPhoneDriver |
Apoyo del oyente | no soporta oyentes | no soporta oyentes. | apoya el implemento de Listeners |
Velocidad | es rápido, conectado con el navegador web que inicia la prueba, el IDE y el navegador se comunican directamente. | es lento, no se comunica directamente con el navegador; envía 'comandos selenese' a Selenium Core, que a su vez se comunica con el navegador. | se comunica directamente con los navegadores web. Haciéndolo mucho más rápido. |
Selenium IDE, la herramienta simple y sencilla del paquete Selenium. Su función de grabación y reproducción, son fácil de aprender sólo necesitas mínimo conocimiento de cualquier lenguaje de programación. Es una herramienta ideal para un usuario ingenuo.
Selenese es el lenguaje usado para escribir scripts de prueba en Selenium IDE.
Diferentes tipos de localizadores en Selenium:
- ID
- ClassName
- Name
- TagName
- LinkText
- PartialLinkText
- Xpath
- CSS Selector
- DOM
Assert: Assert command comprueba si la condición dada es verdadera o falsa.
Verify: el comando verifica si la condición dada es verdadera o falsa y sin importar cual sea, la ejecución del programa no se detiene, o sea, cualquier falla mientras dure la verificación no va a parar la ejecución y se ejecutarán todos los pasos de prueba.
XPath: significa Extensible Markup Language y se utiliza para almacenar, organizar y transportar datos arbitrarios, en un par clave- valor, muy similar a las etiquetas HTML. También es usado para localizar un elemento web que este basado en su ruta XML. XML.
El elemento esencial detrás de la ubicación de los elementos que usa XPath, es el desplazamiento entre varios elementos en toda la página y, por lo que, permite al usuario conseguir un elemento con la referencia de otro elemento.
Slash único “/”: la barra única es usada para crear Xpath con una ruta absoluta, es decir, la ruta se crea para comenzar la selección desde el nodo de documento / inicio.
Slash Doble “//”: la barra doble se usa para crear Xpath con una ruta relativa, es decir, la ruta se crea para comenzar la selección desde cualquier lugar dentro del documento.
La política de origen no permite acceder al DOM de un documento desde un origen que sea distinto del origen al que intentamos entrar.
Origin es una combinación secuencial de esquema, host y puerto de la URL.
Por ello, el Selenium Core (Programa JavaScript) no puede entrar a los elementos desde un origen que sea distinto donde se lanzó
Entonces, para manejar la misma política de origen, se introdujo Selenium Remote Control.
Selenium Grid se usa para ejecutar scripts de prueba iguales o diferentes en muchas plataformas y navegadores simultáneamente con el fin de lograr una ejecución de prueba distribuida, realizar pruebas en distintos entornos y ahorrar un tiempo de ejecución notable.
Selenium RC y WebDriver en combinación se les conoce popularmente como Selenium 2. El Selenium RC solo es conocido como Selenium 1.
WebDriver
Se puede usar la siguiente sintaxis, para iniciar el navegador:
WebDriver driver= new FirefoxDriver (); WebDriver driver= new ChromeDriver (); WebDriver driver= new InternetExplorerDriver ();
Controladores disponibles en WebDriver son:
- InternetExplorerDriver
- ChromeDriver
- SafariDriver
- OperaDriver
- AndroidDriver
- IPhoneDriver
- Firefox
- FirefoxDriver
- HtmlUnitDriver
1.-Espera implícita (implicit wait): se usan para suministrar un tiempo de espera predeterminado (ejemplo, 30 segundos) entre cada paso / comando de prueba consecutivo en todo el script de prueba. Por lo que, el siguiente paso de prueba se ejecuta cuando haya transcurrido el tiempo de 30 segundos, después de ejecutar el comando / paso de prueba anterior.
Espera explícita (explicit wait): se usa para detener la ejecución hasta el momento en que se cumple una condición particular o ha transcurrido el tiempo máximo. Las esperas explícitas son aplicables solo para una instancia en particular.
El usuario puede usar sendKeys ("Cadena a ingresar") para escribir en el cuadro de texto.
Sintaxis:
WebElement username = drv.findElement(By.id(“Email”)); // insertar usuario username.sendKeys(“sth”);
WebDriver permite al usuario, utilizar varios métodos para verificar la visibilidad de los elementos web. Estos elementos web pueden ser botones, drop boxes, checkboxes, botones de radio, etiquetas, etc.
- isDisplayed()
- isSelected()
- isEnabled()
Sintaxis:
isDisplayed(): boolean buttonPresence = driver.findElement(By.id(“gbqfba”)).isDisplayed(); isSelected(): boolean buttonSelected = driver.findElement(By.id(“gbqfba”)).isSelected(); isEnabled(): boolean searchIconEnabled = driver.findElement(By.id(“gbqfb”)).isEnabled();
El comando Get se usa para recuperar el texto interno del elemento web especificado. El comando no requiere ningún parámetro pero devuelve un valor de cadena. También es uno de los comandos más utilizados para la verificación de mensajes, etiquetas, errores, etc. que se muestran en las páginas web.
Sintaxis:
String Text = driver.findElement(By.id(“Text”)).getText();
El valor en el menú desplegable se puede seleccionar usando la clase Select de WebDriver.
Sintaxis:
selectByValue: Select selectByValue = new Select(driver.findElement(By.id(“SelectID_One”))); selectByValue.selectByValue(“greenvalue”); selectByVisibleText: Select selectByVisibleText = new Select (driver.findElement(By.id(“SelectID_Two”))); selectByVisibleText.selectByVisibleText(“Lime”); selectByIndex: Select selectByIndex = new Select(driver.findElement(By.id(“SelectID_Three”))); selectByIndex.selectByIndex(2);
Los siguientes son los comandos de navegación :
navigate().back() : el comando anterior no requiere parámetros y lleva al usuario a la página web anterior en el historial del navegador web.
Código de ejemplo:
driver.navigate().back();
navigate().forward() : este comando le permite al usuario navegar a la siguiente página web con referencia al historial del navegador.
Código de ejemplo:
driver.navigate().forward();
navigate().refresh(): este comando le permite al usuario actualizar la página web actual allí recargando todos los elementos web.
Código de ejemplo:
driver.navigate().refresh();
navigate().to() : este comando le permite al usuario iniciar una nueva ventana del navegador web y navegar a la URL especificada.
Código de ejemplo:
driver.navigate().to(“https://google.com”);
driver.findElement(By.linkText(“Google”)).click();
El comando encuentra el elemento usando el texto del enlace y luego hace clic en el elemento y, por ello, el usuario será redirigido a la página correspondiente.
De igual manera, se puede entrar al enlace mencionado mediante el siguiente comando.
driver .findElement (By.partialLinkText ( "Goo" )). click ();
El comando anterior encuentra el elemento basado en la subcadena del enlace provisto entre paréntesis y, por lo tanto, partialLinkText () consigue el elemento web con la subcadena especificada y luego hace clic en él.
Un frame (marco) como por ejemplo un iframe se usa para introducir otro documento dentro del documento HTML actual o en una página web habilitando el anidamiento.
Seleccione iframe por id
driver .switchTo (). Frame ( " ID del marco " );
Localización del iframe usando tagName
driver.switchTo (). Frame (driver.findElements (By.tagName ("iframe"). Get (0));
Localización de iframe usando el Index
frame (index)
driver.switchTo (). frame (0);
frame (Nombre del frane)
driver.switchTo (). frame (“nombre del cuadro”);
frame (elemento WebElement)
Seleccionar ventana principal (parent window)
driver.switchTo (). defaultContent ();
findElement(): La usamos para conseguir el primer elemento en la página web actual que coincida con el valor del localizador especificado. Tome en cuenta que solo se buscará el primer elemento coincidente.
Sintaxis:
Elemento WebElement = controlador .findElements (By.xpath ( “// div [@ id = 'example'] // ul // li” ));
findElements (): findElements () se usa para encontrar todos los elementos en la página web actual que coinciden con el valor del localizador especificado. Tome nota de que todos los elementos coincidentes se buscarán y almacenarán en la lista de WebElements.
Sintaxis:
List <WebElement> elementList = driver .findElements (By.xpath ( “// div [@ id = 'example'] // ul // li” ));
Mediante una sola pieza de código. Se puede encontrar elementos del mismo tipo, como imágenes, hipervínculos múltiples, etc., organizados en una lista ordenada o desordenada. Por lo que, tiene sentido tratar con dichos elementos con un solo fragmento de codigo usando WebElement List.
Código de muestra:
// guardando la lista List <WebElement> elementList = driver.findElements(By.xpath("//div[@id='example']//ul//li")); // tamaño de la lista int listSize = elementList.size(); for (int i=0; i<listSize; i++) { // hacer click en cada link de servicio de proveedor serviceProviderLinks.get(i).click(); // navegar a la pagina anterior que guarda los link de los proveedores de servicios driver.navigate().back(); }
close () : el método close () de WebDriver cierra la ventana del navegador web en la que el usuario trabaja actualmente, o se puede decir, la ventana a la que está entrando actualmente el WebDriver. El comando no necesita ningún parámetro ni devuelve ningún valor.
quit () :el método quit () cierra todas las ventanas que el programa ha abierto. Sin embargo, al igual que el método close (), el comando no necesita ningún parámetro ni lo hace es devolver ningún valor.
Selenium solo admite pruebas de aplicaciones web. Por ello, las ventanas emergentes no se pueden manejar usando Selenium.
WebDriver ofrece a los usuarios manejar ventanas emergentes mediante la interfaz de Alert . Los métodos que se usan junto con la interfaz de Alert son:
- void dismiss(): el método de dismiss() hace clic en el botón "Cancelar" en cuanto aparece la ventana emergente.
- void accept (): el método accept () hace clic en el botón "Aceptar" en cuanto aparece la ventana emergente.
- String getText (): el método getText () devuelve el texto que se muestra en el cuadro de alerta.
- void sendKeys (String stringToSend): el método sendKeys () ingresa el patrón de cadena (string pattern) especificado en el cuadro de alerta.
Sintaxis:
// aceptar alerta de javascript Alert alert = driver.switchTo().alert(); alert.accept();
Selenium es una herramienta de pruebas de automatización que solo admite pruebas de aplicaciones web, (no admite pruebas de aplicaciones basadas en Windows). Sin embargo, junto con algunas intervenciones de terceros, este problema se puede superar. Hay herramientas de terceros disponibles para manejar ventanas emergentes, basadas en ventanas junto con el selenio como AutoIT, Robot class, etc.
// Verifique el título de la página web
assertTrue ("El título de la ventana es incorrecto", driver.getTitle (). equals ("Título de la página"));
WebDriver ofrece la interfaz de acción (Action interface), una de las utilidades que simula las interacciones de un solo usuario.
En el siguiente escenario, hemos usado Action interface para desplazar el mouse en un menú desplegable que luego abre una lista de opciones.
Código de muestra:
// Inicializar Action Interface Actions actions=new Actions(driver); actions.moveToElement(driver.findElement(By.id("id of the dropdown"))).perform(); // Hacer click en uno de los objetos de la lista de opciones WebElement subLinkOption=driver.findElement(By.id("id of the sub link")); subLinkOption.click();
Las propiedades css se pueden recuperar utilizando un método get ():
Sintaxis:
driver.findElement (By.id ( "id ")). GetCssValue ( "name of css attribute" ); driver.findElement (By.id ( "id ")). getCssValue ( "font-size" );
import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class CaptureScreenshot { WebDriver driver; @Before public void setUp() throws Exception { driver = new FirefoxDriver(); driver.get("https://google.com"); } @After public void tearDown() throws Exception { driver.quit(); } @Test public void test() throws IOException { // codigo para capturar el screenshot File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //codigo para copiar el screenshot en una localizacion deseada FileUtils.copyFile(scrFile, new File("C:\\Screenshot\\google.jpg")) } }
Junit es un marco de pruebas unitarias introducido por Apache, basado en Java.
Las anotaciones de JUni sont:
- @Test: es un método de prueba. Puede haber varios métodos de prueba en un solo script de prueba.
- @Before: el método anotado como @before permite al sistema saber que este método se ejecutará cada vez antes de cada uno de los métodos de prueba.
- @ After: Método anotado como @ after, el sistema sabe que este método se ejecutará cada vez que se realice cada uno de los métodos de prueba.
- @BeforeClass: el método anotado como @BeforeClass le permite al sistema saber que este método se ejecutará una vez antes que cualquiera de los métodos de prueba.
- @AfterClass: el método anotado como @AfterClass le permite al sistema saber que este método se ejecutará una vez después de cualquiera de los métodos de prueba.
- @Ignore: el método anotado como @Ignore le permite al sistema saber que este método no debe ejecutarse.
TestNG es un framework avanzado, diseñado para aprovechar beneficios de los desarrolladores y evaluadores. Con el inicio de los frameworks, JUnit ganó una popularidad en las aplicaciones Java, los desarrolladores de Java y los probadores de Java con un aumento notable de la calidad del código. Es fácil de usar y sencillo, JUnit tiene sus propias limitaciones que dan lugar a la necesidad de llevar a TestNG a la imagen. TestNG es un framework de código abierto, se distribuye bajo licencia de software de Apache y esta disponible para su descarga.
TestNG con WebDriver suministra un formato de resultados de prueba eficiente y efectivo que puede compartirse con las partes interesadas para tener una idea del estado del producto / aplicación, eliminando el inconveniente de incapacidad de WebDriver para producir informes de prueba. TestNG tiene un mecanismo de manejo de excepciones incorporado, el cual permite que el programa se ejecute sin terminar inesperadamente.
Ventajas que hacen que TestNG sea superior a JUnit.
- Anotaciones anticipadas y fáciles agregadas
- patrones de ejecución que se pueden establecer
- Ejecución concurrente de scripts de prueba.
- Se pueden configurar dependencias de casos de prueba.
Establecimiento de prioridad en TestNG
Fragmento de código:
package TestNG; import org.testng.annotations.*; public class SettingPriority { @Test(priority=0) public void method1() { } @Test(priority=1) public void method2() { } @Test(priority=2) public void method3() { } }
Secuencia de ejecución de prueba:
- Método 1
- Método 2
- Método 3
Es la combinación constructiva de varias directrices, jerarquías de proyectos procesos estándares de conceptos codificación, prácticas, modularidad, mecanismo de informes, inyecciones de datos de prueba, etc. para pruebas de automatización de pilares.
La ventaja de automatización de pruebas.
- Se puede reutilizar el código
- Tiene máxima cobertura
- Presenta escenario de recuperación
- Su mantenimiento es a bajo costo
- La Intervención manual es mínima
- Los informes son fáciles
- Framework de prueba basado en módulo: El marco divide la "Aplicación bajo prueba" en cantidad de módulos lógicos y aislados. Para cada módulo, se crea un script de prueba separado e independiente. Por lo tanto, cuando estos scripts de prueba se toman juntos, se crea un script de prueba más grande que representa más de un módulo.
- Framework de prueba de la arquitectura de la biblioteca: el fundamento básico detrás del marco, es conocer los pasos comunes y agruparlos en funciones en una biblioteca y llamar a esas funciones en los scripts de prueba cuando sea necesario.
- Data Driven Testing Framework: Data Driven Testing Framework ayuda al usuario a separar la lógica del script de prueba y los datos de prueba entre sí. Permite al usuario guardar los datos de prueba en una base de datos externa, en pares de "clave-valor". Por lo que, la clave se puede usar para entrar y completar los datos dentro de los scripts de prueba.
- Keyword Driven Testing Framework: The Keyword Driven testing framework: una extensión de Data-Based Testing Framework en el sentido de que separa los datos de prueba de los scripts, y también mantiene el determinado conjunto de código que pertenece al script de prueba, en un externo archivo de datos.
- Framework de prueba híbrido: es una combinación de más de uno de los marcos nombrados que aprovecha los beneficios de todo tipo de marcos asociados.
- Behavior Driven Development Framework: Behavior Driven Development framework permite la automatización de validaciones funcionales en un formato fácil de leer y comprender, para los evaluadores, analistas negocios, desarrolladores, etc.
Desde Excel usando JXL o API de POI.
# | JXL Jar | POI Jar |
1 | Es compatible con el formato ".xls", es decir, formato binario, no admite Excel 2007 y el formato ".xlsx", basado en XML | El POI jar soporta todos estos formatos |
2 | JXL API se actualizó la última vez en 2009 | POI se actualiza y publica regularmente |
3 | JXL no posee una documentación tan completa como la de POI | POI con documentación bien preparada y completa. |
4 | La API no admite el formato de texto enriquecido | La API admite el formato de texto enriquecido |
5 | Su API es más rápida que la de POI | La API más lenta que la de JXL |
Característica | Selenium | Quick test professional (QTP) |
Compatibilidad del navegador | Selenium es compatible con mayoría de navegadores como Chrome, Safari, Firefox, Internet Explorer, Opera, etc. | QTP es compatible con Chrome , Firefox, Internet Explorer. QTP solo es compatible con el sistema operativo Windows |
Distribución | Selenium se distribuye como herramienta de código abierto y disponible gratuitamente. | QTP se distribuye como herramienta licenciada y se comercializa. |
Aplicación bajo prueba | Selenium admite pruebas de aplicaciones basadas únicamente en la web | QTP admite la prueba tanto de la aplicación basada en web como de Windows. |
Repositorio de objetos | El repositorio de objetos debe crearse como una entidad separada. | QTP crea y mantiene automáticamente el repositorio de objetos. |
Ayuda de idioma | Selenium es compatible con muchos lenguajes de programación como, C #, Ruby, Python, Java Perl, etc. | QTP solo admite VB Script. |
Apoyo del vendedor | Como Selenium es gratuita, el usuario no obtiene el soporte del proveedor para solucionar problemas. | Los usuarios pueden obtener el soporte del proveedor en caso de problema. |
WebDriver no prueba aplicaciones móviles. WebDriver es una herramienta de prueba que se basa en la web, por lo que, las aplicaciones en los navegadores móviles pueden ser probadas.
No, el captcha y el lector de código de barras no se pueden automatizar.
Object Repository : término usado para referirse a la colección de elementos web que pertenecen a Application Under Test (AUT) junto a sus valores de localización. Por lo tanto, siempre que se necesite el elemento dentro del script, el valor del localizador se puede completar desde el Repositorio de objetos. El repositorio de objetos se usa para guardar localizadores en una ubicación centralizada en lugar de codificarlos dentro de los scripts.
En Selenium, los objetos se pueden guardar en una hoja de Excel, que se puede rellenar dentro del script cuando se necesite.
hello
Muy bueno espero tener mas documentado de lo mismo , y donde encontrar mas información , .
Gracias
Buenísimo el post, gracias por compartirlo.
Tal vez valga la pena agregar la info del uso diferentes ventanas/pestañas.