it-roy-ru.com

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

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

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

51
Invy

Навигация

Первое, что вы захотите сделать с 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();

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

91
Matt Ball

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

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

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

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

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

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

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

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

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

13
Manu

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

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

7
Arpan Saini

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

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

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

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

2
timborden

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

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

1
Balaji Dinakaran

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

0
user7123229

Согласно javadoc для get (), это синоним Navigate.to ()

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

 javadoc screenshot

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

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

0
Ashish Rana

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

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

0
Arvind Katheriya

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

0
user9657263

СЛУЧАЙ 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 () вы можете перемещать Back () или forward () в истории вашего сеанса.
  • navigate () работает быстрее, чем get (), потому что navigate () не ожидает страницы для полной или полной загрузки.
0
user9959971

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

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

0
atamur