76

get()navigate()メソッドの違いは何ですか?この方法または別の方法のいずれかがページコンテンツの読み込みを待機しますか?私が本当に必要としているのは、Selenium 1.0のようなものですWaitForPageToLoadが、viaを使用するためのものwebdriverです。

助言がありますか?

4

15 に答える 15

119

ナビゲート

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

(強調追加)

于 2011-04-14T15:00:17.240 に答える
23

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

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

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

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

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

一方、get()URLを変更するためにページを更新します。

したがって、アプリケーションドメインが変更された場合、どちらの方法も同じように動作します。つまり、どちらの場合もページが更新されます。ただし、シングルページアプリケーションではnavigate().to()、ページを更新しませんが、更新しますget()

get()また、これが、アプリケーションの更新により使用時にブラウザの履歴が失われる理由です。

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

于 2015-11-23T10:46:21.917 に答える
18

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

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

于 2017-02-26T07:38:03.707 に答える
4

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

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

Error: Error while waiting for Protractor to sync with the page: {}
于 2014-02-20T15:43:33.923 に答える
2

私の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から保持されません。

于 2015-05-12T16:49:26.823 に答える
2

get()のjavadocによると、これはNavigate.to()の同義語です。

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

javadocスクリーンショット

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

現在のブラウザウィンドウに新しいWebページをロードします。これはHTTPGET操作を使用して実行され、ロードが完了するまでメソッドはブロックします。これは、サーバーによって発行されたリダイレクト、または返されたHTML内からのメタリダイレクトとして発行されたリダイレクトに従います。メタリダイレクトの「休止」が一定期間続く場合は、このタイムアウトが終了するまで待つことをお勧めします。これは、テストの実行中に基になるページが変更された場合、このインターフェイスに対する今後の呼び出しの結果が、新しくロードされたものに対して行われるためです。ページ。org.openqa.selenium.WebDriver.Navigation.to(String)の同義語 。

于 2017-01-31T10:27:52.747 に答える
2

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

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

于 2017-06-16T11:41:37.030 に答える
2

navigate().to()get()初めて使用するときも同じように機能します。複数回使用するnavigate().to()場合は、いつでも前のページに移動できますが、を使用すると同じことができますget()

結論:navigate().to()現在のウィンドウの履歴全体を保持しget()、ページをリロードして履歴を保持するだけです。

于 2018-02-05T20:30:12.483 に答える
1

webdriver.get()と方法にはいくつかの違いがありwebdriver.navigate()ます。


得る()

API Docs に従って、 WebDriverインターフェイスのget()メソッドはSearchContextを拡張し、次のように定義されます。

/**
 * Load a new web page in the current browser window. This is done using an HTTP POST operation,
 * and the method will block until the load is complete.
 * This will follow redirects issued either by the server or as a meta-redirect from within the
 * returned HTML.
 * Synonym for {@link org.openqa.selenium.WebDriver.Navigation#to(String)}.
 */
void get(String url);
    
  • 使用法:

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

ナビゲート()

一方、navigate()は、 WebDriverインスタンス、つまりブラウザの履歴にアクセスしたり、特定のURLに移動したりできるようにする抽象化です。方法と使用法は次のとおりです。driver

  • to(java.lang.String url):現在のブラウザウィンドウに新しいWebページをロードします。

    driver.navigate().to("https://www.google.com/");
    
  • to(java.net.URL url):URLの受け渡しを容易にするto(String)のオーバーロードバージョン。

  • refresh():現在のページを更新します。

    driver.navigate().refresh();
    
  • back():ブラウザの履歴内の単一の「アイテム」に戻ります。

    driver.navigate().back();
    
  • forward():ブラウザの履歴で単一の「アイテム」を前方に移動します。

    driver.navigate().forward();
    
于 2020-07-26T17:25:25.923 に答える
0

それ以外の場合は、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.

ナビゲートを使用すると、私が理解している限り、ブラウザの履歴を操作できます。

于 2011-04-14T15:01:31.810 に答える
0
  1. driver.get("url")両方ともdriver.navigate( ).to("url")同じ/同義です。

  2. to("url")内部でget("url")メソッドを呼び出します。以下の画像を参考にしてください。

  3. どちらも履歴を保存しません-これはほとんどのブログ/ウェブサイトで利用できる間違った情報です。

  4. 以下では、ステートメント1、2、および3、4は同じことを実行します。つまり、指定されたURLに到達します。

    statemnt 1: driver.get("http://www.google.com");   
    statemnt 2: driver.navigate( ).to("http://www.amazon.in");
    
    statemnt 3: driver.get("http://www.google.com");  
    statemnt 4: driver.get("http://www.amazon.in");
    
  5. navigate()異なること、つまり前後に移動することしかできません。しかし、to("url")方法はできません。

get()メソッドのフーバー

于 2021-07-20T08:23:24.943 に答える
-1

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

于 2016-11-07T14:51:52.587 に答える
-1

driver.get(url)両方ともnavigate.to(url)特定のWebページに移動するために使用されます。主な違いは 次のdriver.get(url)とおりです。ブラウザの履歴とCookieを維持せず、ページが完全に読み込まれるまで待機します。 driver.navigate.to(url):特定のWebページに移動するためにも使用されます。ブラウザの履歴とCookieを維持し、ページが完全に読み込まれるまで待機せず、ページ間を前後に移動して更新します。

于 2018-04-17T07:49:43.653 に答える
-1

ケース-1

以下のコードでは、3つの異なるURLに移動し、navigateコマンドを実行すると、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()よりも高速です。
于 2018-06-19T11:28:16.197 に答える
-1

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

https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocolにアクセスしてください

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

したがって、以下の結論は次のとおりです。

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

于 2019-05-25T13:36:30.937 に答える