Разница между webdriver.get () и webdriver.navigate () - PullRequest
54 голосов
/ 14 апреля 2011

В чем разница между get() и navigate() методами? Любой из этих или, возможно, другой метод ожидает загрузки содержимого страницы? Что мне действительно нужно, так это что-то вроде селена s 1.0 WaitForPageToLoad but for using via webdriver`.

Есть предложения?

Ответы [ 13 ]

93 голосов
/ 14 апреля 2011

Навигация

Первое, что вам нужно сделать с помощью WebDriver, - это перейти на страницу.Обычный способ сделать это - позвонить get:

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

WebDriver будет ждать, пока страница полностью не загрузится (то есть событие onload сработало), прежде чем вернуть управление в ваш тест илискрипт.Стоит отметить, что если ваша страница использует много AJAX при загрузке, то WebDriver может не знать, когда он полностью загрузится.Если вам необходимо убедиться, что такие страницы полностью загружены, вы можете использовать waits.

Навигация: история и местоположение

Ранее мы рассмотрели переход на страницу с помощьюкоманда get (driver.get("http://www.example.com")) Как вы видели, WebDriver имеет несколько меньших, ориентированных на задачи интерфейсов, и навигация является полезной задачей.Поскольку загрузка страницы является таким фундаментальным требованием, способ сделать это основан на основном интерфейсе WebDriver, но это просто синоним:

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

Чтобы повторить: navigate().to() и get() сделать то же самое .Одного набрать намного проще, чем другого!

Интерфейс navigate также предоставляет возможность перемещаться назад и вперед в истории вашего браузера:

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

(Выделение добавлено)

16 голосов
/ 23 ноября 2015

Кажется, что они оба переходят на данную веб-страницу и цитируют ответ @matt:

navigate().to() и get() делают одно и то же.

Одностраничные приложения являются исключением из этого.

Разница между этими двумя методами обусловлена ​​не их поведением, а поведением в том, как работает приложение и как браузер справляется с ним.

navigate().to() переходит на страницу путем изменения URL-адреса, как при переходе вперед / назад.

Принимая во внимание, что get() обновляет страницу для изменения URL.

Таким образом, в случаях, когда изменяется домен приложения, оба метода ведут себя одинаково. То есть страница обновляется в обоих случаях. Но в одностраничных приложениях navigate().to() не обновляет страницу, get() делает.

Более того, по этой причине история браузера теряется при использовании get() из-за обновления приложения.

Первоначально ответил: https://stackoverflow.com/a/33868976/3619412

8 голосов
/ 26 февраля 2017

driver.get(): Он используется для перехода на конкретный веб-сайт, но он не поддерживает историю браузера и файлы cookie, поэтому мы не можем использовать кнопки «вперед» и «назад», если мы нажмем на них., страница не получит расписание

driver.navigate(): она используется для перехода на конкретный веб-сайт, но поддерживает историю браузера и файлы cookie, поэтому мы можем использовать кнопки перемещения вперед и назад для навигациимежду страницами во время кодирования Testcase

3 голосов
/ 20 февраля 2014

Не уверен, что это применимо и здесь, но в случае транспортира при использовании navigate().to(...) история сохраняется, но при использовании get() она теряется.

Один из моих тестов не удался, потому что я использовал get() 2 раза подряд, а затем выполнял navigate().back(). Поскольку история была утеряна, при возврате она перешла на страницу about и была выдана ошибка:

Error: Error while waiting for Protractor to sync with the page: {}
2 голосов
/ 12 мая 2015

Что бы это ни стоило, из моего тестирования IE9 похоже, что есть разница для URL, которые содержат хэш-банг (одностраничное приложение, в моем случае):

http://www.example.com#page

Метод driver.get("http://www.example.com#anotherpage") обрабатывается браузером как идентификатор фрагмента, а переменные JavaScript сохраняются из предыдущего URL.

Хотя метод navigate().to("http://www.example.com#anotherpage") обрабатывается браузером как ввод адреса / местоположения / строки URL-адреса, а переменные JavaScript не сохраняются из предыдущего URL.

1 голос
/ 05 февраля 2018

navigate (). To () и get () будут работать одинаково при первом использовании.Если вы используете его более одного раза, то с помощью navigate (). To () вы можете в любой момент перейти на предыдущую страницу, тогда как вы можете сделать то же самое с помощью get ().

Вывод: navigate (). To () содержит всю историю текущего окна, а get () просто перезагружает страницу и хранит любую историю.

0 голосов
/ 25 мая 2019

Чтобы лучше понять это, нужно увидеть архитектуру Selenium WebDriver.

Просто посетите https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol

и выполните поиск «Перейти к новому URL».текст.Вы увидите оба метода GET и POST.

Отсюда вывод, приведенный ниже:

Метод driver.get () внутренне отправляет запрос Get на Selenium Server Standalone.Принимая во внимание, что метод driver.navigate () отправляет запрос Post автономному серверу Selenium.

Надеюсь, это поможет

0 голосов
/ 19 июня 2018

CASE-1

В приведенном ниже коде я перешел к 3 различным URL-адресам, и когда выполнение переходит к команде навигации, он возвращается к 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();
                }

            }

CASE-2:

В приведенном ниже коде я использовал navigate () вместо get (), но оба фрагмента (Case-1 и Case-2) работают точно так же, только время выполнения case-2 меньше, чем 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();
                }

            }
  • Таким образом, основное различие между get () и navigate () состоит в том, что оба выполняя ту же задачу, но с помощью navigate () вы можете перемещать назад () или вперед () в истории вашего сеанса.
  • navigate () работает быстрее, чем get (), потому что navigate () не ожидает страница для полной или полной загрузки.
0 голосов
/ 17 апреля 2018

driver.get(url) и navigate.to(url) оба используются для перехода на определенную веб-страницу.Основное отличие состоит в том, что driver.get(url): он не поддерживает историю браузера и файлы cookie и ожидает полной загрузки страницы.driver.navigate.to(url): Он также используется для перехода на определенную веб-страницу. Он поддерживает историю браузера и файлы cookie, не загружает страницу полностью и не имеет навигации между страницами назад, вперед и обновлением.

0 голосов
/ 16 июня 2017

driver.get() используется для навигации по определенному URL-адресу (веб-сайту) и ожидания загрузки страницы.

driver.navigate() используется для навигации по определенному URL-адресу и не ожидает загрузки страницы.Он поддерживает историю браузера или куки для навигации назад или вперед.

...