を使用してページを更新 Selenium ウェブドライバー
⚡ スマートサマリー
ページを更新すると Selenium WebDriver は現在の URL これにより、すべての要素がアサーションが実行される前にレンダリングされ、フレームワークは、同じリロードを異なる方法で実現する5つの異なるコマンドを提供します。
Web ベース アプリケーションのテスト自動化中に、すべての Web 要素が完全に読み込まれるようにページを複数回更新する必要が生じます。最初のページ読み込みでは一部の Web 要素が読み込まれるかもしれませんが、すべての要素が表示されるには 2 回目のページ更新が必要になる場合があります。これは、以下の機能によって提供される refresh コマンドを使用して実行できます。 Selenium ウェブドライバー。
ページを更新する方法 Selenium
ブラウザの更新操作は、以下の方法で実行できます。 Selenium。この記事では、以下で説明する方法について詳しく説明します。
- driver.navigate().refresh() コマンド
- 取得メソッド
- キーの送信コマンド
- ナビゲートメソッド
- driver.navigate().to() コマンド
1) driver.navigate().refresh() コマンド
これは、ページ更新操作を実行するための組み込みメソッドです。 Selenium WebDriver。このコマンドは、テスト自動化においてページ更新操作を実行するために最も一般的に使用されるコマンドです。更新コマンドは、以下に示すように簡単に使用できます。
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
ナビゲーションは、前のページへの移動、次のページへの移動、ページの更新、ブラウザの閉じるなど、さまざまなブラウザ操作を実行するために使用されるインターフェースです。ナビゲーションインターフェースのメソッドは、コマンド driver.navigate() を使用してアクセスできます。ナビゲーションインターフェースの refresh メソッドは引数を取らず、値を返しません。
例:
テストシナリオ:
- Chromeブラウザでウェブページを開きます。 https://demo.guru99.com/selenium/guru99home/
- ページが正常に読み込まれたら、driver.navigate().refresh() メソッドを使用してウェブページを更新します。
- driver.close() メソッドを使用してブラウザを閉じます。
Code
package Guru99Demo; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class RefreshDemo { public static void main(String args[]) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/selenium/guru99home/"); driver.manage().window().maximize(); driver.navigate().refresh(); driver.close(); } }
⚠️ バージョンノート: Selenium マネージャーには Selenium 4.6 そして、対応するブラウザドライバを自動的にダウンロードするため、現在のバージョンでは上記の System.setProperty 行は不要になりました。 new ChromeDriver() で十分です。元の行は、まだ正しいので保持されています。 Selenium 3. 例が書かれた際のスタイル設定。
Code 出力:
初回ページ読み込み時には、デモのホームページが以下のように表示されます。
ページを更新した後、ページ上の動画が変更されたことから、実際にページが再読み込みされたことが確認できます。
ページを更新するその他の複数の方法
ページのリフレッシュだけが再読み込みの方法ではありません。以下の4つの方法はすべて同じ結果をもたらし、知っておく価値があります。なぜなら、ロックダウンされたアプリケーションや頑固なブラウザによっては、これらの方法のいずれかがブロックされることがあるからです。
2) 取得メソッド
getメソッドは、ページを再帰的に更新するために使用できます。そのためには、getメソッドに別のメソッドを引数として渡す必要があります。
例:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) ナビゲーション方法
このメソッドは、上記で説明した再帰の概念と同じものを使用します。getCurrentUrl() メソッドは、driver.navigate().to() メソッドへの引数として渡されます。
例:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) F5キーを使用したキー送信方法
これは、ページを更新するために 2 番目によく使用される方法です。 SeleniumsendKeys メソッドは、更新キー (F5) を引数として受け取ります。sendKeys はブラウザではなく Web 要素に対してのみ機能するため、まず Web ページ上の有効な Web 要素を特定してから sendKeys メソッドを使用する必要があります。これは以下のように実現できます。
例:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
キーストロークはブラウザのクロームではなく要素に渡されるため、この経路は要素がフォーカスを保持しているかどうかに依存します。 ロケータ フォーカスを受け付けないフィールドに一致すると、キーが無視され、ページが再読み込みされません。
5) ASCIIを使用したキー送信方式 Code
この方法は上記と同じ概念を用いますが、F5キーを引数として渡す代わりに、更新キーのコードポイントを引数として渡します。これは以下のように実現できます。
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
値 \uE035 は、プロトコルが F5 にマッピングする WebDriver Unicode コードポイントです。したがって、このコードスニペットと前のコードスニペットは同等です。
ページを更新する方法 Javaスクリプトエグゼキュータ
すべてのブラウザはページスクリプトに再読み込み機能を提供し、 Selenium それを呼び出すことができます Javascriptエグゼキュータインターフェース。これは、WebDriverの更新コマンドがアプリケーションまたはブラウザ拡張機能によって傍受された場合の一般的なフォールバックです。
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
覚えておくべき2つのバリエーションは以下のとおりです。
- location.reload() 通常のページ再読み込みを実行し、キャッシュからページを提供する場合があります。
- history.go(0) これは、一部の旧型ソフトウェアスイートで今でも使用されている、より古い同等のものです。
エグゼキュータ ルートはページ内で実行されるため、新しいドキュメントを単独で待機しません。driver.navigate().refresh() の後と同様に、明示的に待機処理を続けて実行してください。また、スクリプトによる再読み込みではブラウザ レベルのダイアログはクリアされないことに注意してください。テスト対象のアプリケーションがコンテンツを非同期で読み込む場合、次の点に注意してください。 AJAX呼び出しの処理 Selenium webdriver.
更新後に StaleElementReferenceException を回避する方法
ページを更新すると、現在のDOMが破棄され、新しいDOMが構築されます。更新前に取得されたすべてのWebElementは、もはや存在しないノードを指しているため、次にそのノードを呼び出すとStaleElementReferenceExceptionが発生します。これは、ページ更新後に発生する最も一般的なエラーです。
3つの習慣を身につけることで、これらの失敗のほとんどを解消できます。
- 後から見つける、決して前に見つけるな。 WebElementではなくByロケーターを保存し、リロードが完了したらfindElementを再度呼び出します。
- 実際の信号を待ちましょう。 リロード後にのみ存在する要素の表示状態を明示的に待機する方が、固定の待機時間よりもはるかに信頼性が高い。
- 更新してから、もう一度読んでください。 リロード前に取得したテキスト値や属性を、リロード後に実行されるアサーションに引き継いではいけません。
以下のパターンは、3つすべてに適用されます。
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait は Duration を受け取ります Selenium 4、これは、整数秒コンストラクタからの変更です。 Selenium 3. これらの障害に対するより広範な技術については、当社のガイドで説明しています。 例外処理 Selenium.
の比較 Selenium ページ更新方法
これら6つのコマンドはすべてページを再読み込みしますが、依存する要素や失敗した場合の対処方法が異なります。
| 方法 | 依存する | リロード | それが正しい選択である場合 |
|---|---|---|---|
| ドライバー.navigate().refresh() | 余分なものはありません | ブラウザの再読み込みコマンド | ほとんどの場合、デフォルト |
| driver.get(driver.getCurrentUrl()) | 読みやすい電流 URL | 新しいナビゲーション | 履歴エントリも削除したい場合 |
| driver.navigate().to(driver.getCurrentUrl()) | 読みやすい電流 URL | 新しいナビゲーション | 上記と同様、ナビゲーションインターフェースを介して記述 |
| sendKeys(Keys.F5) | フォーカス可能な要素 | キーストローク | キーボードパスを意図的にテストする場合 |
| sendKeys(“\uE035”) | フォーカス可能な要素 | キーストローク | F5と同一で、コードポイントとして記述されています。 |
| JavascriptExecutor location.reload() | スクリプトが有効になっています | ページスクリプト | WebDriverコマンドがブロックされた場合 |
更新コマンドから始め、理解できる理由で失敗した場合にのみ別の行に進みます。同じ優先順位は、 ブラウザウィンドウを最大化またはサイズ変更する: ネイティブの WebDriver 呼び出しを優先し、スクリプトによる呼び出しはフォールバックとして扱います。


