selenium - usar - Actualización de la página web por WebDriver cuando se espera una condición específica
que es selenium webdriver (12)
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();
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
Aquí está la versión ligeramente diferente de C #:
driver.Navigate().Refresh();
En Java o JavaScript:
driver.navigate().refresh();
Esto debería actualizar la página.
En PHP:
$driver->navigate()->refresh();
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 selenio:
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
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);
}
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 resto 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.
5 formas diferentes de actualizar una página web usando Selenium Webdriver
No hay codificación especial adicional. Acabo de usar las funciones existentes de diferentes maneras para que funcione. Aquí están :
Usando el método sendKeys.Keys
driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
Usando el método navigate.refresh ()
driver.get("https://accounts.google.com/SignUp"); driver.navigate().refresh();
Usando el método navigate.to ()
driver.get("https://accounts.google.com/SignUp"); driver.navigate().to(driver.getCurrentUrl());
Usando el método get ()
driver.get("https://accounts.google.com/SignUp"); driver.get(driver.getCurrentUrl());
Usando el método sendKeys ()
driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys("/uE035");
Otra forma de actualizar la página actual usando selenio 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.