Actualizar página usando Selenium controlador web

⚡ Resumen inteligente

Actualizar una página en Selenium WebDriver recarga la actual URL De esta forma, cada elemento se renderiza antes de que se ejecuten las aserciones, y el marco ofrece cinco comandos distintos que logran la misma recarga de diferentes maneras.

  • 🔘 Opción predeterminada: driver.navigate().refresh() es la función de recarga integrada, no toma argumentos y no devuelve ningún valor.
  • ☑️ Variantes recursivas: Pasar getCurrentUrl() a get() o navigate().to() recarga la misma dirección.
  • Ruta del teclado: sendKeys acepta Keys.F5 o el valor Unicode \uE035, pero debe apuntar a un elemento real.
  • 🧪 Ruta del script: JavascriptEl ejecutor que ejecuta location.reload() funciona cuando el comando WebDriver está bloqueado.
  • 🛠️ Después de la recarga: Cada referencia a un elemento capturada anteriormente queda obsoleta y debe localizarse de nuevo.
  • 📊 Configuración moderna: Selenium El gestor llegó con la versión 4.6, por lo que ya no es necesario configurar manualmente la ruta del controlador.

Actualizar página usando Selenium Comandos de WebDriver

Durante la automatización de pruebas de una aplicación web, surge la necesidad de actualizar la página varias veces para que todos los elementos web se carguen por completo. En la carga inicial de la página, algunos elementos web pueden cargarse, mientras que se necesita una segunda actualización de la página para que aparezcan todos. Esto se puede hacer utilizando el comando refresh proporcionado por Selenium Controlador web.

Cómo actualizar la página en Selenium

La operación de actualización del navegador se puede realizar de las siguientes maneras: Selenium. Discutiremos las formas mencionadas a continuación en detalle a lo largo del artículo.

  1. comando driver.navigate().refresh()
  2. Obtener método
  3. Comando Enviar claves
  4. Método de navegación
  5. comando driver.navigate().to()

1) Comando driver.navigate().refresh()

Este es el método integrado para realizar una operación de actualización de página proporcionado por Selenium WebDriver. Este comando es el más utilizado en la automatización de pruebas para actualizar una página. El comando refresh se puede usar de forma sencilla, como se indica a continuación.

driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();

La interfaz de navegación permite realizar diversas operaciones en el navegador, como ir a la página anterior, a la siguiente, actualizar la página y cerrar el navegador. Se puede acceder a los métodos de la interfaz de navegación mediante el comando driver.navigate(). El método refresh de la interfaz Navigation no admite argumentos ni devuelve ningún valor.

Ejemplo:

Escenario de prueba:

  1. Abra el navegador Chrome con la página web. https://demo.guru99.com/selenium/guru99home/
  2. Una vez que la página se haya cargado correctamente, actualice la página web utilizando el método driver.navigate().refresh().
  3. Cierre el navegador utilizando el método driver.close().

Code

package Guru99Demo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class RefreshDemo {
public static void main(String args[]) throws InterruptedException
{
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.manage().window().maximize();
driver.navigate().refresh();
driver.close();
}
}

⚠️ Nota de versión: Selenium El gerente envió con Selenium 4.6 y descarga automáticamente el controlador del navegador correspondiente, por lo que la línea System.setProperty anterior ya no es necesaria en una versión actual. new ChromeDriver() es suficiente. La línea original se mantiene porque sigue siendo correcta para el Selenium 3 estilos de configuración con los que se escribió el ejemplo.

Code Salida:

Al cargar la página por primera vez, la página de inicio de la demostración se muestra como se indica a continuación.

Guru99 página de inicio de demostración en la carga inicial antes de que se ejecute el comando de actualización

Tras actualizar la página, el vídeo que aparece en ella ha cambiado, lo que confirma que la recarga se ha producido correctamente.

Guru99 página de inicio de demostración después de driver.navigate().refresh() mostrando un video diferente

Otras formas de actualizar una página

El método de actualización no es la única forma de recargar la página. Las cuatro técnicas que se describen a continuación producen el mismo resultado y conviene conocerlas, ya que una aplicación con restricciones de seguridad o un navegador obstinado a veces bloquean alguna de ellas.

2) Obtener método

El método `get` se puede usar de forma recursiva para actualizar una página. Para ello, necesitamos pasar otro método como argumento al método `get`.

Ejemplo:

driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());

3) Método de navegación

Este método utiliza el mismo concepto de recursión mencionado anteriormente. El método getCurrentUrl() se pasa como argumento al método driver.navigate().to().

Ejemplo:

driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());

4) Método de envío de teclas mediante la tecla F5

Este es el segundo método más utilizado para actualizar una página en SeleniumEste método recibe como argumento la tecla de actualización (F5). Dado que sendKeys solo funciona en elementos web y no en el navegador, primero debemos identificar un elemento web válido en la página y luego usar el método sendKeys. Esto se puede lograr como se muestra a continuación.

Ejemplo:

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys(Keys.F5);

Debido a que la pulsación de tecla se entrega a un elemento en lugar de al borde del navegador, esta ruta depende de que el elemento mantenga el foco. Si el localizador Si la clave coincide con un campo que no puede recibir el foco, se ignora y la página no se vuelve a cargar.

5) Método de envío de teclas mediante ASCII Code

Este método utiliza el mismo concepto que el anterior, pero en lugar de pasar la tecla F5 como argumento, enviamos el punto de código de la tecla de actualización como argumento. Esto se puede lograr como se muestra a continuación.

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys("\uE035");

El valor \uE035 es el punto de código Unicode de WebDriver que el protocolo asigna a F5, por lo que este fragmento y el anterior son equivalentes.

Cómo actualizar una página usando JavaEjecutor de secuencias de comandos

Cada navegador expone una función de recarga a los scripts de página, y Selenium puede llamarlo a través del JavascriptInterfaz del ejecutor. Esta es la opción de reserva habitual cuando la aplicación o una extensión del navegador intercepta el comando de actualización de WebDriver.

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");

Hay dos variantes que conviene recordar:

  1. ubicación.recargar() Realiza una recarga normal y puede servir la página desde la caché.
  2. historia.ir(0) es un equivalente más antiguo que todavía utilizan algunas suites heredadas.

La ruta del ejecutor se ejecuta dentro de la página, por lo que no espera al nuevo documento por sí sola. Continúe con una espera explícita exactamente como lo haría después de driver.navigate().refresh(), y recuerde que una recarga controlada por script no borrará un cuadro de diálogo a nivel del navegador. Si la aplicación bajo prueba carga su contenido de forma asíncrona, se aplica el mismo cuidado que cuando manejo de llamadas AJAX en Selenium Controlador web.

Cómo evitar la excepción StaleElementReferenceException después de una actualización

Una actualización destruye el DOM actual y crea uno nuevo. Cada elemento web capturado antes de la recarga ahora apunta a un nodo que ya no existe, por lo que la siguiente llamada sobre él genera una excepción StaleElementReferenceException. Este es el fallo más común que se produce tras una actualización de página.

Tres hábitos eliminan casi todos estos fracasos:

  1. Localizar después, nunca antes. Almacene el localizador By en lugar del WebElement y vuelva a llamar a findElement una vez que haya finalizado la recarga.
  2. Espere una señal real. Una espera explícita a que un elemento que solo existe después de la recarga sea visible es mucho más fiable que una pausa fija.
  3. Actualiza la página y vuelve a leer. Nunca transfiera un valor de texto o un atributo capturado antes de la recarga a una aserción realizada después de la misma.

El siguiente patrón se aplica a los tres:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
driver.navigate().refresh();
WebElement search = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("username")));
search.sendKeys("guru99");

WebDriverWait toma una duración en Selenium 4, lo cual supone un cambio respecto al constructor de segundos enteros utilizado en Selenium 3. En nuestra guía se tratan técnicas más amplias para estos fallos. manejo de excepciones en Selenium.

Comparación de Selenium Métodos de actualización de página

Los seis comandos recargan la página, pero difieren en lo que dependen y en cómo fallan.

Método Depende de Recargas a través de Cuando es la elección correcta
conductor.navegar().actualizar() Nada extra El comando de recarga del navegador Casi siempre: la opción predeterminada
controlador.get(controlador.getCurrentUrl()) Una corriente legible URL Una nueva navegación Cuando también quieras eliminar la entrada del historial
conductor.navegar().a(conductor.obtenerURLActual()) Una corriente legible URL Una nueva navegación Igual que lo anterior, escrito a través de la interfaz de navegación.
enviarTeclas(Teclas.F5) Un elemento enfocable Una pulsación de tecla Cuando estás probando deliberadamente la ruta del teclado
sendKeys(“\uE035”) Un elemento enfocable Una pulsación de tecla Idéntico a F5, escrito como un punto de código.
JavascriptUbicación del ejecutor.recargar() Secuencias de comandos habilitadas Un script de página Cuando el comando WebDriver está bloqueado

Comience con el comando de actualización y recurra a otra fila solo cuando falle por una razón que comprenda. El mismo orden de preferencia se aplica cuando maximizar o cambiar el tamaño de la ventana del navegador: se prefiere la llamada nativa de WebDriver y se trata la ruta del script como alternativa.

Preguntas Frecuentes

Puede ser. Si la página actual se generó mediante una solicitud POST, el navegador puede solicitar que se reenvíen los datos y la recarga se detiene detrás de ese cuadro de diálogo. Navegando a la URL De nuevo, con get() se evita por completo la solicitud.

Los nombres de enlace difieren, pero el comando es el mismo: driver.refresh() en Python, driver.Navigate().Refresh() en C# y driver.navigate().refresh() en JavaLos tres emiten la misma instrucción WebDriver.

No. Al recargar la página, se conservan las cookies, el almacenamiento de sesión y el almacenamiento local del mismo origen, por lo que actualizar la página no es una buena manera de restablecer el estado. En su lugar, elimine las cookies explícitamente o inicie una nueva sesión del navegador.

Los motores de autorreparación vuelven a determinar un localizador a partir de varios atributos cuando el DOM recargado ya no coincide, y los modelos de análisis de fallos agrupan los problemas de sincronización de la recarga para que el equipo solucione una sola espera en lugar de cincuenta pruebas.

Sí, y la sugerencia de actualización de una sola línea funciona correctamente de forma consistente. El problema radica en la espera que debe seguir, así que revise cualquier tiempo de espera generado y compárelo con la forma en que la aplicación se carga realmente.

No existe un comando específico. Los equipos lo simulan enviando Ctrl y F5 simultáneamente a través de la clase Actions, o desactivando la caché mediante las opciones del navegador, que es la opción más fiable.

No con el comando de actualización, que siempre recarga el documento superior. Cambia al marco y recárgalo con un script, o restablece su atributo de origen, y luego vuelve al contenido predeterminado.

No intente adivinar con un tiempo de espera fijo. Use una espera explícita de diez a treinta segundos bajo una condición que solo se cumpla después de la recarga, de modo que la prueba continúe en el momento en que la página esté lista.

Resumir este post con: