Diferencia entre webdriver.get () y webdriver.navigate ()

¿Cuál es la diferencia entre los métodos get() y navigate() ? ¿Alguno de este o quizás otro método espera a que se cargue el contenido de la página? Lo que realmente necesito es algo así como Selenium s 1.0 WaitForPageToLoad but for using via webdriver`.

¿Alguna sugerencia?

Navegando

Lo primero que querrá hacer con WebDriver es navegar a una página. La forma normal de hacerlo es llamando a get :

 driver.get("http://www.google.com"); 

WebDriver esperará hasta que la página se haya cargado por completo (es decir, se haya onload evento de carga) antes de devolver el control a su prueba o secuencia de comandos. Vale la pena señalar que si su página usa mucho AJAX en carga, es posible que WebDriver no sepa cuándo se ha cargado por completo. Si necesita asegurarse de que dichas páginas estén completamente cargadas, puede usar waits .

Navegación: historia y ubicación

Anteriormente, cubrimos la navegación a una página usando el comando get ( driver.get("http://www.example.com") ) Como has visto, WebDriver tiene una serie de interfaces más pequeñas enfocadas en tareas y navegación es una tarea útil. Como cargar una página es un requisito fundamental, el método para hacerlo está en la interfaz principal de WebDriver, pero es simplemente un sinónimo de:

 driver.navigate().to("http://www.example.com"); 

Para reiterar: navigate().to() To navigate().to() y get() hacen exactamente lo mismo . ¡Uno es mucho más fácil de escribir que el otro!

La interfaz de navigate también expone la capacidad de avanzar y retroceder en el historial de su navegador:

 driver.navigate().forward(); driver.navigate().back(); 

(Énfasis añadido)

Ambos parecen navegar a la página web dada y citando la respuesta @matt:

navigate().to() y get() hacen exactamente lo mismo.

Las aplicaciones de una sola página son una excepción a esto.

La diferencia entre estos dos métodos no proviene de su comportamiento, sino del comportamiento en la forma en que funciona la aplicación y cómo lo maneja el navegador.

navigate().to() navega a la página al cambiar la URL, como hacer la navegación hacia adelante o hacia atrás.

Mientras que, get() actualiza la página para cambiar la URL.

Entonces, en los casos donde el dominio de la aplicación cambia, ambos métodos se comportan de manera similar. Es decir, la página se actualiza en ambos casos. Pero, en las aplicaciones de una sola página, mientras que navigate().to() no actualiza la página, get() do.

Además, esta es la razón por la que el historial del navegador se pierde cuando se usa get() debido a que la aplicación se actualiza.

Originalmente respondida: https://stackoverflow.com/a/33868976/3619412

driver.get() : Se utiliza para ir al sitio web en particular, pero no mantiene el historial del navegador y las cookies, por lo que no podemos usar el botón hacia adelante y hacia atrás, si hacemos clic en eso, la página no recibirá el cronogtwig

driver.navigate() : se usa para ir al sitio web en particular, pero mantiene el historial del navegador y las cookies, por lo que podemos usar el botón avanzar y retroceder para navegar entre las páginas durante la encoding de Testcase

No estoy seguro de que se aplique aquí también, pero en el caso del transportador cuando se usa navigate().to(...) el historial se mantiene pero cuando se usa get() se pierde.

Una de las pruebas estaba fallando porque estaba usando get() 2 veces seguidas y luego navigate().back() . Debido a que se perdió la historia, cuando retrocedió fue a la página sobre y se arrojó un error:

 Error: Error while waiting for Protractor to sync with the page: {} 

Por lo que vale, a partir de mi prueba de IE9, parece que hay una diferencia para las URL que contienen un hashbang (una aplicación de una sola página, en mi caso):

 http://www.example.com#page 

El navegador maneja el método driver.get("http://www.example.com#anotherpage") como un identificador de fragmento y las variables de JavaScript se retienen de la URL anterior.

Mientras, el navigate().to("http://www.example.com#anotherpage") maneja el método navigate().to("http://www.example.com#anotherpage") como una entrada de barra de dirección / ubicación / URL y las variables de JavaScript no se retienen de la URL anterior.

navigate (). to () y get () funcionarán igual cuando lo use por primera vez. Cuando lo usa más de una vez, luego de navegar (). A () puede acceder a la página anterior en cualquier momento, mientras que puede hacer lo mismo con get ().

Conclusión: navigate (). To () contiene todo el historial de la ventana actual y get () simplemente recarga la página y mantiene el historial.

Si tiene más lugares donde el comportamiento asíncrono es importante, puede echarle un vistazo al lib windowlicker perfecto que le permite manejarlo: http://code.google.com/p/windowlicker/

De lo contrario, probablemente quieras el método get:

 Load a new web page in the current browser window. This is done using an HTTP GET operation, and the method will block until the load is complete. 

Navigate le permite trabajar con el historial del navegador hasta donde yo lo entiendo.

De acuerdo con el javadoc for get (), es el sinónimo de Navigate.to ()

Ver la captura de pantalla de javadoc a continuación:

captura de pantalla de javadoc

Javadoc for get () lo dice todo:

Cargue una nueva página web en la ventana actual del navegador. Esto se hace usando una operación HTTP GET, y el método se bloqueará hasta que se complete la carga. Esto seguirá los redireccionamientos emitidos por el servidor o como un meta-redireccionamiento desde el HTML devuelto. En caso de que un meta-redireccionamiento “descanse” por algún tiempo, es mejor esperar hasta que este tiempo haya expirado, ya que si la página subyacente cambia mientras su prueba se está ejecutando, los resultados de las llamadas futuras contra esta interfaz serán contra el recién cargado página. Sinónimo de org.openqa.selenium.WebDriver.Navigation.to (String) .

driver.get() se usa para navegar en una URL particular (sitio web) y esperar hasta que la página se cargue.

driver.navigate() se usa para navegar a una URL en particular y no espera a cargar la página. Mantiene el historial del navegador o las cookies para navegar hacia atrás o hacia adelante.

Ambos realizan la misma función pero driver.get (); parece mas popular driver.navigate().to(); se utiliza mejor cuando ya se encuentra en medio de un script y desea redirigir desde el URL actual a uno nuevo. Por el bien de diferenciar sus códigos, puede usar driver.get(); para ejecutar la primera URL después de abrir una instancia del navegador, aunque ambas funcionarán en ambos sentidos.

driver.get(url) y navigate.to(url) ambos se usan para ir a una página web en particular. La diferencia clave es que driver.get(url) : no mantiene el historial del navegador y las cookies, y espera hasta que la página se cargue por completo. driver.navigate.to(url) : también se utiliza para ir a una página web determinada. Mantiene el historial del navegador y las cookies, y no carga completamente la página y tiene navegación entre las páginas hacia atrás, hacia adelante y refresca.

CASO 1

En el siguiente código navegué a 3 URL diferentes y cuando la ejecución llega para navegar por el comando, navegaba de regreso a la página de inicio de Facebook .

 public class FirefoxInvoke { @Test public static void browserInvoke() { System.setProperty("webdriver.gecko.driver", "gecko-driver-path"); WebDriver driver=new FirefoxDriver(); System.out.println("Before"+driver.getTitle()); driver.get("http://www.google.com"); driver.get("http://www.facebook.com"); driver.get("http://www.india.com"); driver.navigate().back(); driver.quit(); } public static void main(String[] args) { // TODO Auto-generated method stub browserInvoke(); } } 

CASO-2:

En el código siguiente, he usado navigate () en lugar de get (), pero los dos fragmentos (Case-1 y Case-2) funcionan exactamente igual, solo el tiempo de ejecución de case-2 es menor que el de case-1

 public class FirefoxInvoke { @Test public static void browserInvoke() { System.setProperty("webdriver.gecko.driver", "gecko-driver-path"); WebDriver driver=new FirefoxDriver(); System.out.println("Before"+driver.getTitle()); driver.navigate().to("http://www.google.com"); driver.navigate().to("http://www.facebook.com"); driver.navigate().to("http://www.india.com"); driver.navigate().back(); driver.quit(); } public static void main(String[] args) { // TODO Auto-generated method stub browserInvoke(); } } 
  • Entonces, la principal diferencia entre get () y navigate () es que ambos realizan la misma tarea, pero con el uso de navigate () puede retroceder () o reenviar () en el historial de la sesión.
  • navigate () es más rápido que get () porque navigate () no espera a que la página se cargue por completo o completamente.