Подтвердить что ты не робот

Разница между webdriver.get() и webdriver.navigate()

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

Какие-либо предложения?

4b9b3361

Ответ 1

Navigating

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

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

WebDriver будет ждать, пока страница полностью загрузится (т.е. событие onload), прежде чем вернуть управление вашему тесту или script. Стоит отметить, что если ваша страница использует большое количество 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();

(добавлен акцент)

Ответ 2

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

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

Приложения с одной страницей являются исключением из этого.

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

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

В то время как get() обновляет страницу до изменения URL-адреса.

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

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

Первоначально ответил: fooobar.com/questions/103132/...

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

Для чего это стоит, из моего тестирования 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-адреса.

Ответ 6

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

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

Ответ 7

В противном случае вам может понадобиться метод 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.

Навигация позволяет вам работать с историей браузера, насколько я понимаю.

Ответ 8

Оба выполняют ту же функцию, но driver.get(); кажется более популярным. driver.navigate().to(); лучше всего использовать, когда вы уже находитесь в середине script, и вы хотите перенаправить с текущего URL на новый. Ради дифференцирования ваших кодов вы можете использовать driver.get(); для запуска первого URL-адреса после открытия экземпляра браузера, хотя оба они будут работать в любом случае.

Ответ 9

В соответствии с javadoc для get() это синоним Navigate.to()

Просмотреть снимок экрана javadoc ниже:

javadoc screenshot

Javadoc для get() говорит все -

Загрузите новую веб-страницу в текущее окно браузера. Это делается с использованием HTTP GET, и метод будет блокироваться до тех пор, пока нагрузка не будет полный. Это будет следовать за перенаправлениями, выпущенными либо сервером, либо мета-перенаправление из возвращаемого HTML. Если мета-перенаправление "отдых" в течение любого периода времени, лучше подождать до этого таймаута закончилось, так как если основная страница изменится, пока ваш тест выполнение результатов будущих вызовов против этого интерфейса будет против только что загруженной страницы. Синоним для org.openqa.selenium.WebDriver.Navigation.to(String).

Ответ 10

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

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

Ответ 11

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

Ответ 12

СЛУЧАЙ 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() не ожидает полной или полной загрузки страницы.

Ответ 13

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

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

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

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

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

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