web-dev-qa-db-ja.com

webdriver.get()とwebdriver.navigate()の違い

get()メソッドとnavigate()メソッドの違いは何ですか?これまたは別の方法のいずれかがページコンテンツの読み込みを待機しますか?本当に必要なのは、Seleniums 1.0WaitForPageToLoadbut for using viawebdriver`のようなものです。

助言がありますか?

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

(エンファシスを追加)

94
Matt Ball

どちらも、指定されたWebページに移動し、@ mattの回答を引用しているようです。

navigate().to()get()はまったく同じことを行います。

シングルページアプリケーションはこれの例外です。

これら2つのメソッドの違いは、動作にあるのではなく、アプリケーションの動作とブラウザーの処理方法にある動作にあります。

navigate().to()は、前方/後方ナビゲーションのようにURLを変更してページに移動します。

一方、get()はページを更新してURLを変更します。

そのため、アプリケーションドメインが変更された場合、両方のメソッドは同様に動作します。つまり、どちらの場合もページが更新されます。ただし、単一ページのアプリケーションでは、navigate().to()はページを更新しませんが、get()は更新します。

さらに、これが、get()が使用されているときにブラウザの履歴が失われる理由です。これは、アプリケーションが更新されるためです。

当初の回答: https://stackoverflow.com/a/33868976/3619412

16
Manu

driver.get()特定のWebサイトにアクセスするために使用されますが、ブラウザの履歴とCookieが保持されないため、クリックすると、進むボタンと戻るボタンを使用できません、ページはスケジュールを取得しません

driver.navigate()特定のWebサイトにアクセスするために使用されますが、ブラウザの履歴とCookieを保持するため、テストケースのコーディング中にページを移動するために前後のボタンを使用できます

8
Arpan Saini

ここにも当てはまりませんが、分度器の場合、navigate().to(...)を使用する場合は履歴が保持されますが、get()を使用する場合は失われます。

get()を2回続けて使用してからnavigate().back()を実行したため、テストの1つが失敗しました。履歴が失われたため、戻るとaboutページに移動してエラーがスローされました。

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

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

どちらも同じ機能を実行しますが、driver.get();より人気があるようです。 driver.navigate().to();は、すでにスクリプトの途中で、現在のURLから新しいURLにリダイレクトする場合に最適です。コードを区別するために、ブラウザインスタンスを開いた後、driver.get();を使用して最初のURLを起動できますが、どちらも機能します。

0
user7123229

Get()のjavadocによると、Navigate.to()の同義語です。

以下のjavadocスクリーンショットを表示します。

javadoc screenshot

get()のJavadocはそれをすべて言います-

現在のブラウザウィンドウに新しいWebページをロードします。これはHTTP GET操作を使用して行われ、メソッドはロードが完了するまでブロックします。これは、サーバーまたは発行されたHTML内からのメタリダイレクトとして発行されたリダイレクトに従います。メタリダイレクトが任意の期間「休憩」する場合、テストが実行中にこのページに対する基本的なページが変更され、このインターフェイスに対する将来の呼び出しの結果が新たにロードされたものになるため、このタイムアウトが終了するまで待つのが最善ですページ。 org.openqa.Selenium.WebDriver.Navigation.to(String)の同義語

0
Ashish Rana

driver.get()は、特定のURL(ウェブサイト)をナビゲートし、ページがロードされるまで待機するために使用されます。

driver.navigate()は特定のURLに移動するために使用され、ページの読み込みを待機しません。ブラウザの履歴またはCookieを保持して、前後に移動します。

0

それをよりよく理解するには、Selenium WebDriverのアーキテクチャを確認する必要があります。

https://github.com/SeleniumHQ/Selenium/wiki/JsonWireProtocol にアクセスするだけです

「新しいURLに移動する」を検索します。テキスト。 GETとPOSTの両方のメソッドが表示されます。

したがって、以下に示す結論:

driver.get()メソッドは、GetリクエストをSelenium Server Standaloneに内部的に送信します。一方、driver.navigate()メソッドはPostリクエストをSelenium Server Standaloneに送信します。

それが役に立てば幸い

0
Hemant Madan

driver.get(url)navigate.to(url)は両方とも特定のWebページに移動するために使用されます。主な違いは、driver.get(url):ブラウザの履歴とCookieを保持せず、ページが完全にロードされるまで待機することです。 driver.navigate.to(url):また、特定のWebページに移動するために使用されます。ブラウザの履歴とCookieを保持します。

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

            }

ケース-2:

以下のコードでは、get()の代わりにnavigate()を使用しましたが、スニペット(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