Selenium 4 ha estado recibiendo una inmensa atención desde el momento en que fue anunciado públicamente por Simon Stewart, el miembro fundador de Selenium en agosto de 2018. Aunque no hay actualizaciones sobre la fecha de lanzamiento oficial de una versión estable de Selenium 4, desarrolladores y exploradores de Selenium, tenga la oportunidad de probar las funciones de Selenium 4 descargando la versión Alpha de Selenium 4 . Entonces, ¿qué hay de nuevo en Selenium 4 y dónde se encuentra la comparación de Selenium 3 frente a Selenium 4 en términos de características?

En este blog, profundizamos en las novedades de Selenium 4 y analizamos algunas de las "increíbles" características de Selenium 4 Alpha. En el momento de escribir este artículo, Selenium 4.0.0-alpha-7 era la última versión Alpha de Selenium 4. Si está buscando migrar de Selenium 3 a Selenium 4, este blog le servirá como guía para comprender qué es obsoleto en Selenium 4. Una mirada a las bajas en Selenium 4 ayudará a asegurar que la migración de Selenium 3 a Selenium 4 sea mucho más fluida.

Si está buscando el servidor Selenium 4 (Grid), la versión v. 4.0.0-alpha-7 se puede descargar desde aquí .

TABLA DE CONTENIDOS

¿Qué hay de nuevo en Selenium 4?

Selenium 4 está repleto de características excelentes como localizadores relativos, arquitectura Selenium Grid mejorada y un IDE de Selenium súper útil, por nombrar algunos. El cambio más significativo bajo el capó en Selenium 4 es el cumplimiento de W3C de las API de WebDriver, que se reduce a pruebas entre navegadores menos inestables y más estables.

¿Estás emocionado de probar Selenium 4 (Alpha)? Descargue Selenium 4 Alpha para su idioma preferido desde los siguientes enlaces:

IdiomaSelenium 4 (Alpha) Enlace de descarga
Javahttps://selenium-release.storage.googleapis.com/4.0-alpha-7/selenium-java-4.0.0-alpha-7.zip
Pitónhttps://pypi.org/project/selenium/4.0.0.a7/
C#https://www.nuget.org/api/v2/package/Selenium.WebDriver/4.0.0-alpha07
Rubíhttps://rubygems.org/gems/selenium-webdriver/versions/4.0.0.alpha7

Estos son algunos de los cambios significativos que experimentará con Selenium 4:

Estandarización de Selenium WebDriver W3C

En las versiones anteriores de Selenium (es decir, Selenium 3), el JSON Wire Protocol era responsable de la comunicación entre el navegador web y el código de prueba. Esto llevó a la sobrecarga adicional de codificar y decodificar las solicitudes de API utilizando el protocolo W3C. Esto está configurado para cambiar con WebDriver en Selenium 4, ya que las API de WebDriver adoptan la estandarización W3C.

Dado que los principales controladores del navegador, como geckodriver, chromedriver, etc., siguen el estándar W3C, WebDriver en Selenium 4 se comunicará directamente con el navegador web.
El protocolo Selenium vs. WebDriver W3C ha coexistido junto con el protocolo JSON Wire; será el protocolo predeterminado en Selenium 4. JSON Wire Protocol quedará obsoleto en Selenium 4.

El soporte nativo para Opera y PhantomJS se elimina en Selenium 4, ya que sus implementaciones de WebDriver ya no están en desarrollo. El navegador Opera se basa en Chromium, y los usuarios que deseen probar su implementación en Opera pueden optar por probar en el navegador Chrome. Los usuarios de PhantomJS pueden optar por realizar pruebas en Firefox y Chrome en el modo sin cabeza.

El protocolo WebDriver W3C es el mayor cambio de arquitectura que entrará en vigor en Selenium 4, y la estandarización de WebDriver W3C dará como resultado pruebas cruzadas de navegadores más estables que las versiones anteriores de Selenium.

Rejilla de selenio mejorada y optimizada

Selenium Grid, que se utiliza para la ejecución de pruebas distribuidas, se basa en la arquitectura Hub-Node. Sin embargo, el concentrador y los nodos deben iniciarse por separado al realizar las pruebas de automatización. Esto será cosa del pasado, ya que Hub y Node están empaquetados en un solo archivo jar. Una vez que se inicia el servidor, actúa como Hub y Node. Las versiones anteriores de los procesos de Enrutador, Mapa de sesión y Distribuidor compatibles con Selenium Grid. El selenio cuadrícula 4 , con una infraestructura más escalable y trazable, soporta cuatro procesos - Router, Sesión Mapa, distribuidor, y el nodo.

Grid ahora admitirá direcciones IPV6 y los usuarios pueden comunicarse con Grid utilizando el protocolo HTTPS. Sería mucho más fácil usar archivos de configuración con el Selenium Grid mejorado, ya que los usuarios pueden configurar el Grid usando el lenguaje TOML (Tom's Obvious, Minimal Language) comprensible para humanos .

El Grid en Selenium 4 tiene una GUI mejorada y fácil de usar. El soporte para Docker en Selenium Grid 4 facilita su uso en máquinas virtuales (VM). Los usuarios también tienen la flexibilidad de implementar Selenium Grid en Kubernetes. Selenium Grid 4 puede ser extremadamente útil en el proceso de DevOps, ya que admite herramientas como AWS, Azure y más.

La entusiasta comunidad de usuarios de Selenium mantendrá una estrecha vigilancia sobre lo que está en la tienda con el Grid súper mejorado en Selenium 4 .

IDE de Selenium 4 mejorado

Los ingenieros de pruebas de automatización familiarizados con las pruebas de grabación y reproducción habrían encontrado el IDE de Selenium. Es una solución llave en mano simple que está lista para la web y funciona fuera de la caja. Selenium IDE, que anteriormente solo estaba disponible como una extensión de Firefox, no tenía suficientes funciones interesantes.

Con Selenium 4, el IDE de Selenium finalmente es 'útil', ya que está disponible para los principales navegadores web como Chrome y Firefox. Se espera que el complemento (o extensión web) para Selenium IDE llegue pronto a MS Edge Store.

El IDE de Selenium se puede utilizar para realizar mejores pruebas, ya que admite un mecanismo de flujo de control (es decir, el uso de if..else, while, etc.). Junto con una interfaz de usuario brillante y fácil de usar, Selenium IDE en Selenium 4 también viene con una herramienta SIDE (Selenium IDE Runner) que le permite ejecutar un proyecto .side en una plataforma Node.js. SIDE Runner puede ejecutar pruebas de navegador cruzado en paralelo, ya sea en una cuadrícula de selenio local o una cuadrícula de selenio basada en la nube como LambdaTest.
La estrategia del localizador de elementos de respaldo se sigue en escenarios donde el elemento web no se pudo ubicar usando el localizador de elementos especificado. Esto hace que las pruebas ejecutadas en el IDE de Selenium sean más estables y confiables.

Las pruebas de automatización registradas con el IDE de Selenium ahora se pueden exportar como código para todos los enlaces de idioma oficiales como Java, C #, Python, .NET y JavaScript. ¡Esto puede ser útil para los probadores de caja negra que desean ingresar al campo de las pruebas de automatización pero tienen un conocimiento limitado de implementación en Selenium! Los archivos de configuración (en formato .yml) utilizados por el corredor SIDE se pueden personalizar fácilmente para realizar pruebas paralelas en el IDE de Selenium.

Documentación mejorada

La documentación oficial de Selenium 4 es exhaustiva y el diseño del contenido facilita el acceso a la información deseada con unos pocos clics. Dado que Selenium 4 aún se encuentra en la etapa Alfa, la documentación mejorada ayuda a comprender cómo se pueden usar las nuevas funciones (y API) de Selenium 4 en el código de prueba.

La documentación de Selenium 4 cubre todos los aspectos de Selenium Grid 4, Selenium IDE y el protocolo WebDiver W3C. Los probadores de automatización pueden usar la documentación para familiarizarse con las nuevas API que ofrece Selenium 4.

Simplificación para abrir nuevas pestañas y ventanas del navegador

Hay una serie de escenarios en los que le gustaría abrir un nuevo navegador (o pestaña) y realizar un determinado conjunto de acciones en la ventana / pestaña recién abierta. En Selenium 3, debe crear un nuevo objeto de controlador web y luego cambiar a la nueva ventana (o pestaña) usando su exclusivo WindowHandle para realizar acciones posteriores en esa ventana (o pestaña).

Selenium 4 proporciona una nueva API nueva ventana que le permite crear una nueva ventana (o pestaña) y cambia automáticamente a ella. Dado que la nueva ventana o pestaña se crea en la misma sesión, evita crear un nuevo objeto WebDriver.

Para crear una nueva pestaña en Selenium 4 y cambiar a ella, pase WindowType.TAB al método newWindow () . Para crear una nueva ventana en Selenium 4 y cambiar a ella, pase WindowType.WINDOW al método newWindow () . Como cada ventana del navegador en Selenium tiene un WindowHandle (o ID) único , el WindowHandle requerido debe pasarse al método switchTo (). Window () para cambiar entre las diferentes ventanas.

  • Abra una nueva ventana en Selenium 4
1
2
3
4
5
// Opens a new window and switches to new window
driver.switchTo().newWindow(WindowType.WINDOW);
// Opens LambdaTest homepage in the newly opened window
driver.navigate().to("https://www.lambdatest.com/");
  • Abra una nueva pestaña en Selenium 4
1
2
3
4
5
// Opens a new window and switches to new window
driver.switchTo().newWindow(WindowType.TAB);
// Opens LambdaTest homepage in the newly opened tab
driver.navigate().to("https://www.lambdatest.com/");

Localizadores relativos

En Selenium 3, no había atajos (o métodos específicos) para ubicar WebElements en relación con los elementos cercanos. La introducción de localizadores relativos es una de las características de Selenium 4 Alpha que facilitará la localización de WebElements en función de la ubicación visual relativa a otros elementos DOM.

Los localizadores relativos, también llamados localizadores amigables, ayudan a localizar WebElements que están cerca, a la izquierda, a la derecha, arriba y debajo de un elemento especificado. Los métodos de localizador relativo admiten el uso con withTagName (en Selenium 4 Java) o with_tag_name (en Selenium 4 Python). Aquí están los cinco localizadores relativos que están disponibles en Selenium 4 (Alpha):

Localizador relativoDescripción
encimaEl WebElement requerido está 'encima' de un elemento especificado (o particular).
abajoEl WebElement requerido está 'debajo' de un elemento especificado (o particular).
to_left_ofEl WebElement requerido está 'a la izquierda de' un elemento especificado (o particular).
to_right_ofEl WebElement requerido está 'a la derecha de' un elemento especificado (o particular).
cercaEl WebElement requerido está a 'como máximo 50 píxeles' del elemento especificado (o en particular).

Para aprender a usar localizadores relativos para ubicar WebElements en relación con un elemento específico en el DOM, puede consultar nuestros blogs anteriores sobre Selenium 4 Relative Locator y Selenium 4 para Python .

Supervisión

Los procesos relacionados con el registro y el seguimiento de solicitudes están bastante optimizados en Selenium 4. Estas optimizaciones ayudan a acelerar el proceso de depuración, lo que eventualmente ayuda a entregar un script de prueba de mejor calidad.

TakeElementScreenshot

En Selenium 3, existía una disposición para capturar una captura de pantalla de toda la página web. Selenium 4 en adelante, hay una nueva opción para capturar capturas de pantalla de un WebElement en particular. Por lo tanto, no es necesario utilizar herramientas de terceros como Shutterbug, Ashot, etc. (como en Selenium 3) para capturar una captura de pantalla de WebElement.

El método recientemente introducido en Selenium 4 captura la captura de pantalla de un elemento para el contexto de navegación actual. La captura de pantalla devuelta por el punto final de WebDriver está codificada en formato Base64.

Así es como puede capturar la captura de pantalla de WebElement en Selenium 4 (para Java):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.io.IOException;
  
public void test_LambdaTest_take_screenshot() throws IOException
{
    driver.navigate().to("https://accounts.lambdatest.com/login");
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
    driver.manage().window().maximize();
  
    try {
        WebElement element = driver.findElement(By.cssSelector(".btn"));
        File scrFile = ((TakesScreenshot)element).getScreenshotAs(OutputType.FILE);
        File dstFile = new File("./loginbutton.png");
        FileUtils.copyFile(scrFile, dstFile);
        Thread.sleep(2000);
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

Capturamos la captura de pantalla del 'botón de inicio de sesión' de WebElement en la página de inicio de sesión de LambdaTest en la implementación que se muestra arriba. A continuación se muestra la captura de pantalla de WebElement capturada:

La captura de pantalla capturada se almacena en la ubicación donde reside el proyecto Eclipse / IntelliJ IDEA en su máquina.

DevTools de Chrome

Selenium 4 (Alpha) proporciona soporte nativo para el protocolo Chrome DevTools a través de la interfaz 'DevTools'. Como su nombre indica, el soporte está disponible solo para el navegador Chrome. Las herramientas de CDP se utilizan para obtener propiedades de desarrollo de Chrome, como Fetch, Application Cache, Network, Performance, Profiler y más.

Chrome DevTools, un conjunto de herramientas para desarrolladores web, proporciona API a través de las cuales los ingenieros y desarrolladores de control de calidad pueden editar páginas sobre la marcha y diagnosticar problemas más rápido. Estas operaciones ayudan a que los sitios web sean eficientes y rápidos.

Las API de Chrome DevTools se pueden utilizar para emular la ubicación geográfica y las condiciones de la red. Hemos cubierto los siguientes temas en Selenium 4 con mayor detalle:

La compatibilidad nativa con el protocolo Chrome DevTools a través de la interfaz DevTools es una de las características alfa de Selenium 4 prometedoras que ayudaría a optimizar los sitios web a través de características como las pruebas de geolocalización, la emulación (o falsificación) de diferentes condiciones de red y más.

¿Qué está obsoleto y cambiado en Selenium 4?

Las mejoras significativas en Selenium 4 también van acompañadas de un par de depreciaciones en esta versión de Selenium. Es importante tener en cuenta que solo los cambios importantes en Selenium 4 afectarán la migración del código de prueba de Selenium 3 a Selenium 4.

El registro de cambios de Selenium 4 (para Java) y el registro de cambios de Selenium 4 (para .NET) son buenos puntos de partida para comprender qué hay de nuevo y qué está obsoleto en Selenium 4.

Aquí está la breve lista de lo que está desaprobado en Selenium 4:

Desactivación de las capacidades deseadas

En Selenium 3, hacemos un uso extensivo de las capacidades deseadas cuando trabajamos con un RemoteWebDriver. Esto es necesario para configurar las capacidades del navegador de modo que las pruebas se puedan ejecutar en un Selenium Grid basado en la nube como LambdaTest. Con Selenium 4, nos despedimos de DesiredCapabilities.

Los objetos de capacidades ahora se reemplazan con Options, y necesitamos crear un objeto Options para usar la clase Driver. Con Selenium 4, necesitamos establecer los requisitos de prueba necesarios (es decir, combinaciones de navegador y sistema operativo) y pasar el objeto al constructor del controlador. De ahora en adelante, el siguiente objeto de Opciones se usaría para configurar las capacidades específicas del navegador:

  • Chrome: ChromeOptions
  • Firefox - FirefoxOptions
  • Internet Explorer (IE) - Opciones de InternetExplorer
  • Safari - SafariOptions
  • Microsoft Edge - Opciones de Edge

Estos son los ejemplos que demuestran el uso del objeto 'Opciones' para configurar las capacidades del navegador:

  • ChromeDriver (Selenio 3) 🡪 Opciones de Chrome (Selenio 4)

a. Rejilla de selenio basada en la nube

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
  
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.WebDriver;
import java.net.MalformedURLException;
import org.openqa.selenium.remote.RemoteWebDriver;
  
public void testSetUp() throws Exception
{
        ChromeOptions options = new ChromeOptions();
        options.setAcceptInsecureCerts(true);
  
        options.setCapability("build", "Testing Chrome Options [Selenium 4]");
        options.setCapability("name", "Testing Chrome Options [Selenium 4]");
        options.setCapability("platformName", "Windows 10");
        options.setCapability("browserName", "Chrome");
        options.setCapability("browserVersion", "latest");
  
        try {
            driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), ((Capabilities) options));
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        }
        driver.get("https://www.lambdatest.com");
}

segundo. Rejilla de selenio local

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
  
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.WebDriver;
import java.net.MalformedURLException;
  
public void testSetUp()
{
        ChromeOptions options = new ChromeOptions();
        options.setAcceptInsecureCerts(true);
        driver.get("https://www.lambdatest.com");
}
  • FirefoxDriver (Selenium 3) 🡪 FirefoxOptions (Selenium 4)

a. Rejilla de selenio basada en la nube

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
29
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
  
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.WebDriver;
import java.net.MalformedURLException;
import org.openqa.selenium.remote.RemoteWebDriver;
  
  
public void testSetUp() throws Exception
{
        FirefoxOptions options = new FirefoxOptions();
        options.setAcceptInsecureCerts(true);
  
        options.setCapability("build", "Testing Firefox Options [Selenium 4]");
        options.setCapability("name", "Testing Firefox Options [Selenium 4]");
        options.setCapability("platformName", "Windows 10");
        options.setCapability("browserName", "Firefox");
        options.setCapability("browserVersion", "68.0");
  
        try {
            driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), ((Capabilities) options));
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        }
        driver.get("https://www.lambdatest.com");
}

segundo. Rejilla de selenio local

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
dieciséis
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
  
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.WebDriver;
import java.net.MalformedURLException;
  
public void testSetUp()
{
        FirefoxOptions options = new FirefoxOptions();
        options.setAcceptInsecureCerts(true);
        driver.get("https://www.lambdatest.com");
  
}
  • IEDriver (Selenium 3) 🡪 InternetExplorerOptions (Selenium 4)

a. Rejilla de selenio basada en la nube

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;
  
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.WebDriver;
import java.net.MalformedURLException;
import org.openqa.selenium.remote.RemoteWebDriver;
  
public void testSetUp() throws Exception
{
        InternetExplorerOptions options = new InternetExplorerOptions();
        options.setAcceptInsecureCerts(true);
  
        options.setCapability("build", "Testing IE Options [Selenium 4]");
        options.setCapability("name", "Testing IE Options [Selenium 4]");
        options.setCapability("platformName", "Windows 10");
        options.setCapability("browserName", "Internet Explorer");
        options.setCapability("browserVersion", "11.0");
  
        try {
            driver = new RemoteWebDriver(new URL("http://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), ((Capabilities) options));
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        }
      driver.get("https://www.lambdatest.com");
}

segundo. Rejilla de selenio local

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;
  
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.WebDriver;
import java.net.MalformedURLException;
  
public void testSetUp()
{
        InternetExplorerOptions options = new InternetExplorerOptions();
        options.setAcceptInsecureCerts(true);
        driver.get("https://www.lambdatest.com");
}
  • SafariDriver (Selenium 3) 🡪 SafariOptions (Selenium 4)

a. Rejilla de selenio basada en la nube

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.safari.SafariOptions;
  
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.WebDriver;