Différence entre webdriver.get () et webdriver.navigate ()

Quelle est la différence entre les méthodes get() et navigate() ? Est-ce que l’une de ces méthodes, ou peut-être une autre, attend le chargement du contenu de la page? Ce dont j’ai vraiment besoin est quelque chose comme selenium s 1.0 WaitForPageToLoad but for using via webdriver`.

Aucune suggestion?

Naviguer

La première chose à faire avec WebDriver est de naviguer sur une page. La manière normale de le faire est d’appeler get :

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

WebDriver attendra que la page soit complètement chargée (c’est-à-dire que l’événement onload s’est déclenché) avant de retourner le contrôle à votre test ou à votre script. Il est à noter que si votre page utilise beaucoup d’AJAX en charge, WebDriver peut ne pas savoir quand il est complètement chargé. Si vous devez vous assurer que ces pages sont complètement chargées, vous pouvez utiliser les waits .

Navigation: Histoire et localisation

Auparavant, nous avons abordé la navigation vers une page à l’aide de la commande get ( driver.get("http://www.example.com") ). Comme vous l’avez vu, WebDriver possède un certain nombre d’interfaces de navigation plus petites est une tâche utile. Le chargement d’une page étant une exigence fondamentale, la méthode utilisée pour le faire repose sur l’interface WebDriver principale, mais elle est simplement synonyme de:

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

Pour réitérer: navigate().to() To navigate().to() et get() font exactement la même chose . L’un est beaucoup plus facile à taper que l’autre!

L’interface de navigate expose également la possibilité de se déplacer dans l’historique de votre navigateur:

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

(Soulignement ajouté)

Ils semblent tous deux naviguer vers la page Web donnée et citer @matt répondre:

navigate().to() et get() font exactement la même chose.

Les applications à page unique font exception à cette règle.

La différence entre ces deux méthodes ne provient pas de leur comportement, mais du comportement de l’application et de la manière dont le navigateur le gère.

navigate().to() navigue jusqu’à la page en changeant l’URL comme pour la navigation avant / arrière.

Attendu que get() rafraîchit la page en modifiant l’URL.

Ainsi, dans les cas où le domaine d’application change, la méthode se comporte de la même manière. C’est-à-dire que la page est actualisée dans les deux cas. Mais, dans les applications à une seule page, alors que navigate().to() ne rafraîchit pas la page, get() fait.

De plus, c’est la raison pour laquelle l’historique du navigateur est perdu lorsque get() est utilisé en raison de l’actualisation de l’application.

A l’origine répondu: https://stackoverflow.com/a/33868976/3619412

driver.get() : Il est utilisé pour aller sur le site Web particulier, mais il ne conserve pas l’historique du navigateur et les cookies, donc nous ne pouvons pas utiliser le bouton avant et arrière, si nous cliquons dessus, la page n’obtiendra pas de calendrier

driver.navigate() : il est utilisé pour accéder au site Web en question, mais il conserve l’historique du navigateur et les cookies, nous pouvons donc utiliser le bouton avant et arrière pour naviguer entre les pages lors du codage de Testcase.

Pas sûr que cela s’applique ici aussi, mais dans le cas de protractor lorsque vous utilisez navigate().to(...) l’historique est conservé mais en utilisant get() il est perdu.

Un de mes tests échouait parce que j’utilisais get() 2 fois de suite et ensuite navigate().back() . L’historique ayant été perdu, il a été renvoyé à la page d’informations et une erreur a été générée:

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

Pour ce que cela vaut, d’après mes tests IE9, il semble qu’il y ait une différence pour les URL contenant un hashbang (une application sur une seule page, dans mon cas):

 http://www.example.com#page 

La driver.get("http://www.example.com#anotherpage") est gérée par le navigateur en tant qu’identificateur de fragment et les variables JavaScript sont conservées à partir de l’URL précédente.

Bien que la méthode navigate().to("http://www.example.com#anotherpage") soit gérée par le navigateur en tant qu’entrée / emplacement / barre de saisie, les variables JavaScript ne sont pas conservées à partir de l’URL précédente.

browse (). to () et get () fonctionneront de la même manière lorsque vous utiliserez pour la première fois. Lorsque vous l’utilisez plus d’une fois, alors vous pouvez accéder à la page précédente à tout moment à l’aide de naviguer (). À (), alors que vous pouvez faire la même chose avec get ().

Conclusion: browse (). To () contient l’historique complet de la fenêtre en cours et get () ne fait que recharger la page et conserver l’historique.

Si vous avez plus d’endroits où le comportement asynchrone est important, vous pouvez jeter un coup d’oeil à un windowlicker lib qui permet d’y faire face: http://code.google.com/p/windowlicker/

Sinon, vous voulez probablement la méthode 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. 

Naviguer vous permet de travailler avec l’historique du navigateur dans la mesure où je le comprends.

Selon le javadoc pour get (), c’est le synonyme de Navigate.to ()

Voir la capture d’écran javadoc ci-dessous:

javadoc capture d'écran

Javadoc pour get () dit tout –

Chargez une nouvelle page Web dans la fenêtre du navigateur en cours. Ceci est fait en utilisant une opération HTTP GET, et la méthode bloquera jusqu’à ce que le chargement soit terminé. Cela suivra les redirections émises par le serveur ou en tant que méta-redirection à partir du code HTML renvoyé. Si une méta-redirection “rest” pour une durée quelconque, il est préférable d’attendre la fin de ce délai, car si la page sous-jacente change pendant l’exécution du test, les résultats des futurs appels sur cette interface page. Synonyme de org.openqa.selenium.WebDriver.Navigation.to (Ssortingng) .

driver.get() est utilisé pour naviguer dans une URL particulière (site Web) et attendre le chargement de la page.

driver.navigate() permet d’accéder à une URL particulière et n’attend pas le chargement de la page. Il maintient l’historique du navigateur ou les cookies pour naviguer en arrière ou en avant.

Les deux exécutent la même fonction mais driver.get (); semble plus populaire. driver.navigate().to(); est mieux utilisé lorsque vous êtes déjà au milieu d’un script et que vous souhaitez redirect l’URL actuelle vers une nouvelle. Pour différencier vos codes, vous pouvez utiliser driver.get(); pour lancer la première URL après avoir ouvert une instance de navigateur, les deux fonctionneront dans les deux cas.

driver.get(url) et navigate.to(url) deux sont utilisés pour accéder à une page Web particulière. La principale différence est que driver.get(url) : il ne conserve pas l’historique du navigateur et les cookies et attend que la page soit complètement chargée. driver.navigate.to(url) : Il est également utilisé pour accéder à certaines pages Web. Il conserve l’historique des navigateurs et les cookies, ne charge pas les pages intégralement et permet de naviguer entre les pages, de les transférer et de les actualiser.

CAS 1

Dans le code ci-dessous, je naviguais vers 3 URL différentes et lorsque l’exécution venait à naviguer dans la commande, elle retournait à la page d’ accueil 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(Ssortingng[] args) { // TODO Auto-generated method stub browserInvoke(); } } 

CASE-2:

Dans le code ci-dessous, j’ai utilisé browse () au lieu de get (), mais les snippets (Case-1 et Case-2) fonctionnent exactement de la même manière, mais le temps d’exécution case-2 est inférieur à celui 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(Ssortingng[] args) { // TODO Auto-generated method stub browserInvoke(); } } 
  • Donc, la principale différence entre get () et navigate () est que les deux exécutent la même tâche mais avec la commande browse (), vous pouvez revenir en arrière () ou en avant () dans l’historique de votre session.
  • browse () est plus rapide que get () car browse () n’attend pas le chargement complet ou complet de la page.