web-dev-qa-db-fra.com

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

Quelle est la différence entre les méthodes get() et navigate()? Une de ces méthodes, voire une autre, attend-elle le chargement du contenu de la page? Ce dont j'ai vraiment besoin est quelque chose comme Seleniums 1.0WaitForPageToLoadbut for using viawebdriver`. 

Aucune suggestion?

51
Invy

Navigation

La première chose que vous voudrez faire avec WebDriver est de naviguer vers une page. Pour ce faire, appelez 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 rendre le contrôle à votre test ou à votre script. Il convient de noter que si votre page utilise beaucoup de AJAX au chargement, WebDriver peut ne pas savoir quand il est complètement chargé. Si vous devez vous assurer que ces pages sont entièrement chargées, vous pouvez utiliser waits.

Navigation: Histoire et localisation

Nous avons déjà expliqué comment naviguer vers une page à l’aide de la commande get (driver.get("http://www.example.com")). Comme vous l’avez vu, WebDriver propose un certain nombre d’interfaces plus petites et centrées sur les tâches; Le chargement d’une page étant une exigence fondamentale, la méthode pour ce faire réside dans l’interface principale de WebDriver, mais c’est simplement un synonyme de:

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

Pour répéter: navigate().to() et get() font exactement la même chose. L'un est juste beaucoup plus facile à taper que l'autre!

L’interface navigate permet également d’avancer dans l’historique de votre navigateur:

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

(Soulignement ajouté)

91
Matt Ball

Ils semblent tous les deux naviguer sur la page Web donnée et citer la réponse @matt:

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

Les applications à une seule page font exception.

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 s'en occupe.

navigate().to() navigue vers la page en changeant l'URL comme faire la navigation en avant/en arrière.

Alors que get() rafraîchit la page pour changer 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. Toutefois, dans les applications à page unique, alors que navigate().to() n’actualise pas la page, get() do.

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.

Réponse originale: https://stackoverflow.com/a/33868976/3619412

13
Manu

driver.get(): Il sert à accéder au site Web concerné. Toutefois, l'historique du navigateur et les cookies ne sont pas conservés. Nous ne pouvons donc pas utiliser le bouton Précédent/Suivant. Si nous cliquons sur cette page, le calendrier ne sera pas affiché. 

driver.navigate(): il est utilisé pour accéder au site Web concerné, mais il conserve l'historique du navigateur et les cookies afin que nous puissions utiliser le bouton Précédent/Suivant pour naviguer entre les pages lors du codage de Testcase

7
Arpan Saini

Je ne suis pas sûr que cela s'applique ici aussi, mais dans le cas d'un rapporteur d'angle lorsque vous utilisez navigate().to(...), l'historique est conservé, mais lorsque vous utilisez get(), il est perdu.

L'un de mes tests échouait car j'utilisais get() 2 fois de suite, puis une navigate().back(). Parce que l'histoire était perdue, en revenant à la page à propos et une erreur était lancée:

Error: Error while waiting for Protractor to sync with the page: {}
3
Răzvan Flavius Panda

En ce qui concerne ce que cela vaut, d'après mes tests avec IE9, il semble y avoir une différence pour les URL contenant un hashbang (une application à une seule page, dans mon cas):

http://www.example.com#page

La méthode driver.get("http://www.example.com#anotherpage") est gérée par le navigateur comme identifiant de fragment et les variables JavaScript sont conservées depuis l'URL précédente.

Alors que la méthode navigate().to("http://www.example.com#anotherpage") est gérée par le navigateur comme une entrée de barre d'adresse/d'emplacement/d'URL et les variables JavaScript ne sont pas conservées de l'URL précédente.

2
timborden

browse (). to () et get () fonctionneront de la même façon lors de la première utilisation. Lorsque vous l'utilisez plus d'une fois, vous pouvez accéder à la page précédente à tout moment à l'aide de browse (). To (). Vous pouvez également utiliser la méthode get (). 

Conclusion: browse (). To () contient l’ensemble de l’historique de la fenêtre en cours et get () recharge simplement la page et conserve l’historique.

1
Balaji Dinakaran

Les deux remplissent 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 rediriger une URL à 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, bien que les deux fonctionneront dans les deux sens.

0
user7123229

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

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

 javadoc screenshot

Javadoc pour get () dit tout -

Chargez une nouvelle page Web dans la fenêtre actuelle du navigateur. Ceci est fait en utilisant une opération HTTP GET, et la méthode bloquera jusqu'à ce que le chargement soit Achevée. Cela suivra les redirections émises par le serveur ou en tant que une méta-redirection à partir du code HTML renvoyé. Si une méta-redirection "reste" pour n'importe quelle durée de temps, il est préférable d'attendre jusqu'à ce délai d'attente est terminée, car la page sous-jacente doit-elle changer pendant que votre test est L’exécution des résultats des prochains appels sur cette interface sera contre la page fraîchement chargée. Synonyme de org.openqa.Selenium.WebDriver.Navigation.to (String) .

0
Ashish Rana

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

driver.navigate() est utilisé pour naviguer vers une URL particulière et n'attend pas le chargement de la page. Il conserve l'historique du navigateur ou les cookies pour naviguer en arrière ou en arrière.

0
Arvind Katheriya

Pour mieux comprendre, il faut voir l’architecture de Selenium WebDriver.

Il suffit de visiter https://github.com/SeleniumHQ/Selenium/wiki/JsonWireProtocol

et recherchez "Naviguer vers une nouvelle URL". texte. Vous verrez les deux méthodes GET et POST.

D'où la conclusion ci-dessous:

la méthode driver.get () envoie en interne la requête Get à Selenium Server Standalone. Attendu que la méthode driver.navigate () envoie une requête Post à Selenium Server Standalone.

J'espère que ça aide

0
Hemant Madan

driver.get(url) et navigate.to(url) sont tous deux 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 entièrement chargée .driver.navigate.to(url): il est également utilisé pour accéder à une page Web particulière. Il conserve également l’historique du navigateur et les cookies. pas de pages entièrement chargées et navigation entre les pages suivantes, suivantes et suivantes.

0
user9657263

CAS 1  

Dans le code ci-dessous, j'ai navigué vers 3 URL différentes et lorsque l'exécution vient à naviguer, il est retourné à facebook page d'accueil.

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();
                }

            }

CAS-2:

Dans le code ci-dessous, j'ai utilisé browse () au lieu de get (), mais les deux extraits (Case-1 et Case-2) fonctionnent exactement de la même manière, seul le temps d'exécution de cas-2 est inférieur à celui de cas-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();
                }

            }
  • Ainsi, la principale différence entre get () et browse () est que les deux exécutent la même tâche, mais que, avec browse (), vous pouvez déplacer Back () ou forward () dans l'historique de votre session.
  • browse () est plus rapide que get (), car browse () n'attend pas que la page se charge complètement ou complètement.
0
user9959971

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.

0
atamur