Actualización de la página web por WebDriver cuando se espera una condición específica

Estoy buscando una forma más elegante de actualizar la página web durante las pruebas (uso de Selenium2). Acabo de enviar la clave F5 pero me pregunto si el controlador tiene un método para actualizar toda la página web Aquí está mi código

while(driver.findElements(By.xpath("//*[text() = 'READY']")).size() == 0 ) driver.findElement(By.xpath("//body")).sendKeys(Keys.F5); //element appear after text READY is presented driver.findElement(By.cssSelector("div.column a")).click(); 

Tal vez es una mejor solución para encontrar elementos en la página actualizada manualmente

En Java o JavaScript:

 driver.navigate().refresh(); 

Esto debería actualizar la página.

En Python hay un método para hacer esto: driver.refresh() . Puede que no sea lo mismo en Java.

Alternativamente, puede driver.get("http://foo.bar"); , aunque creo que el método de actualización debería funcionar bien.

En python

Usando el método incorporado

 driver.refresh() 

o, ejecutando JavaScript

 driver.execute_script("location.reload()") 

Se encontraron varios enfoques para actualizar la aplicación en selenium:

 1.driver.navigate().refresh(); 2.driver.get(driver.getCurrentUrl()); 3.driver.navigate().to(driver.getCurrentUrl()); 4.driver.findElement(By.id("Contact-us")).sendKeys(Keys.F5); 5.driver.executeScript("history.go(0)"); 

Para ver el código en vivo, consulte el enlace http://www.ufthelp.com/2014/11/Methods-Browser-Refresh-Selenium.html

Aquí está la versión ligeramente diferente de C #:

 driver.Navigate().Refresh(); 

5 formas diferentes de actualizar una página web usando Selenium Webdriver

No hay encoding especial adicional. Acabo de usar las funciones existentes de diferentes maneras para que funcione. Aquí están :

  1. Usando el método sendKeys.Keys

     driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5); 
  2. Usando el método navigate.refresh ()

     driver.get("https://accounts.google.com/SignUp"); driver.navigate().refresh(); 
  3. Usando el método navigate.to ()

     driver.get("https://accounts.google.com/SignUp"); driver.navigate().to(driver.getCurrentUrl()); 
  4. Usando el método get ()

     driver.get("https://accounts.google.com/SignUp"); driver.get(driver.getCurrentUrl()); 
  5. Usando el método sendKeys ()

     driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035"); 

Alternativo para la actualización de página (F5)

 driver.navigate().refresh(); 

(o)

 Actions actions = new Actions(driver); actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform(); 

También puedes probar

 Driver.Instance.Navigate().Refresh(); 

Una cosa importante a tener en cuenta es que la llamada a driver.navigate (). Refresh () a veces parece ser asincrónica, lo que significa que no espera a que termine la actualización, simplemente “inicia la actualización” y no bloquea la ejecución posterior mientras el navegador está recargando la página.

Si bien esto solo parece ocurrir en una minoría de casos, pensamos que es mejor asegurarse de que esto funcione al 100% agregando un control manual para ver si la página realmente comenzó a recargarse.

Aquí está el código que escribí para eso en nuestra clase de objetos de la página base:

 public void reload() { // remember reference to current html root element final WebElement htmlRoot = getDriver().findElement(By.tagName("html")); // the refresh seems to sometimes be asynchronous, so this sometimes just kicks off the refresh, // but doesn't actually wait for the fresh to finish getDriver().navigate().refresh(); // verify page started reloading by checking that the html root is not present anymore final long startTime = System.currentTimeMillis(); final long maxLoadTime = TimeUnit.SECONDS.toMillis(getMaximumLoadTime()); boolean startedReloading = false; do { try { startedReloading = !htmlRoot.isDisplayed(); } catch (ElementNotVisibleException | StaleElementReferenceException ex) { startedReloading = true; } } while (!startedReloading && (System.currentTimeMillis() - startTime < maxLoadTime)); if (!startedReloading) { throw new IllegalStateException("Page " + getName() + " did not start reloading in " + maxLoadTime + "ms"); } // verify page finished reloading verify(); } 

Algunas notas:

  • Ya que está recargando la página, no puede simplemente verificar la existencia de un elemento dado, porque el elemento estará allí antes de que comience la recarga y después de que se haya completado. Por lo tanto, a veces puede ser cierto, pero la página ni siquiera comenzó a cargarse todavía.
  • Cuando la página se vuelve a cargar, la comprobación de WebElement.isDisplayed () arrojará una StaleElementReferenceException. El rest es solo para cubrir todas las bases
  • getName (): método interno que obtiene el nombre de la página
  • getMaximumLoadTime (): método interno que devuelve cuánto tiempo se debe permitir cargar la página en segundos
  • verify (): el método interno se asegura de que la página se cargue realmente

Nuevamente, en la gran mayoría de los casos, el ciclo do / while se ejecuta una sola vez porque el código más allá de navigate (). Refresh () no se ejecuta hasta que el navegador realmente recargó la página por completo, pero hemos visto casos donde en realidad lleva unos segundos pasar por ese ciclo porque el navegador (). refresh () no se bloqueó hasta que el navegador terminó de cargarse.

También hay un caso en el que desea actualizar solo el iframe específico en la página y no la página completa.

Lo que haces es lo siguiente:

 public void refreshIFrameByJavaScriptExecutor(String iFrameId){ String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src"; ((IJavaScriptExecutor)WebDriver).ExecuteScript(script); } 

En PHP:

 $driver->navigate()->refresh(); 

Otra forma de actualizar la página actual usando selenium en Java.

 //first: get the current URL in a String variable String currentURL = driver.getCurrentUrl(); //second: call the current URL driver.get(currentURL); 

Usar esto actualizará la página actual, como hacer clic en la barra de direcciones del navegador y presionar enter.

    Intereting Posts