Seleniumで壊れたリンクを見つける方法
Selenium WebDriverを使用して壊れたリンクを見つける方法を議論する前に、より根本的な質問に対処しましょう。
壊れたリンクとは何ですか?
まず、リンクはHTMLオブジェクトであり、ユーザーがクリックしたときにあるwebページから別のwebページに移行できるようにします。 これは、インターネット上の異なるwebページ間を移動する手段です。
壊れたリンクは、しばしばデッドリンクとも呼ばれ、機能しないリンクです。 それが意図されているwebページにリダイレクトされません。 これは通常、webサイトまたは特定のwebページがダウンしているか、存在しないために発生します。 誰かが壊れたリンクをクリックすると、エラーメッセージが表示されます。
何らかのサーバーエラーによりリンク切れが発生し、対応するページが誤動作して表示されない可能性があります。 有効なURLには2xxのHTTPステータスコードがあります。 基本的に無効なHTTP要求である壊れたリンクには、4xxと5xxのステータスコードがあります。
4xxステータスコードはクライアント側のエラーを指し、5xxステータスコードは通常サーバー応答エラーを指します。
リンク切れのHTTPステータスコード
HTTPステータスコード | 定義 |
---|---|
400 (不正な要求) | URLが正しくないため、サーバーは要求を処理できません |
400 (Bad Request-Bad Host) | ホスト名が無効であるため、サーバーは要求を処理できません |
400 (Bad Request-BAD URL): | URLの形式が正しくないため、サーバーは要求を処理できません。 |
400 (Bad Request-Empty) | サーバーから返された応答が空で、コンテンツがありません&応答コードがありません |
400 (Bad Request-Timeout) | HTTP要求がタイムアウトしました |
400 (Bad Request-Reset) | サーバーは、他の要求の処理中であるか、サイト所有者によって誤って構成されているため、要求を処理できません |
404 (ページが見つかりません) | ページがサーバー上で利用できません |
403 (禁止) | 承認としての要求が必要です |
410 (ゴーン) | ページがなくなりました。 このコードはより永続的です404 |
408 (要求タイムアウト) | サーバーが要求を待ってタイムアウトしました。 |
503 (サービス利用不可) | サーバーが一時的に過負荷になり、要求を処理できません |
Seleniumで壊れたリンクをチェックするのはなぜですか?
ユーザーが壊れたリンクをクリックすると、エラーページにリダイレクトされます。 これは明らかにサブパーのユーザーエクスペリエンスに貢献しています。 壊れたリンクは、ユーザーが探している情報やサービスを見つけることができないため、最初の場所でウェブサイトを持つ目的を打ち負かします。
ウェブサイト上のすべてのリンクは、期待どおりに機能していることを確認するためにテストする必要があります。 但し、ほとんどのウェブサイトにそれらを働かせるために必要なリンクの何百(時々、たくさん)があることを考えれば各リンクの手動テストは時間、努力、およ さらに、自動化されたSeleniumテストがオプションであるため、完全に不要になります。
続きを読む: セレンでスクリーンショットを撮る方法
リンク切れの一般的な理由
- 404 4860>
- ユーザーのファイアウォール設定により、ブラウザは宛先webページにアクセスできません
- リンクのスペルが間違っています
Selenium WebDriverで壊れたリンクを識別する方法
Seleniumで壊れたリンクをチェックするには、プロセスは簡単です。 Webページでは、ハイパーリンクはHTMLアンカー(<a>)タグを使用して実装されます。 スクリプトが行う必要があるのは、webページ上のすべてのアンカータグを見つけ、対応するUrlを取得し、リンクを実行して、それらのいずれかが壊れてい
次の手順を使用して、Seleniumで壊れたリンクを識別します
- <に基づいてwebページに存在するすべてのリンクを収集します>タグ
- 各リンクのHTTP要求を送信します
- HTTP応答コードを確認します
- HTTP応答に基づいてリンクが有効であるか壊れているかを確認しますコード
- 最初のステップでキャプチャされたすべてのリンクに対してプロセスを繰り返します
Selenium WebDriverを使用して壊れた画像を検索する方法が気になる場合は、同じプロセスを使用してください。
続きを読む: Seleniumでダブルクリックを実行する方法
Seleniumで壊れたリンクを見つける:例
package automationPractice;import java.io.IOException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.Iterator;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class BrokenLinks {private static WebDriver driver = null;public static void main(String args) {// TODO Auto-generated method stubString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;driver = new ChromeDriver();driver.manage().window().maximize();driver.get(homePage);List<WebElement> links = driver.findElements(By.tagName("a"));Iterator<WebElement> it = links.iterator();while(it.hasNext()){url = it.next().getAttribute("href");System.out.println(url);if(url == null || url.isEmpty()){System.out.println("URL is either not configured for anchor tag or it is empty");continue;}if(!url.startsWith(homePage)){System.out.println("URL belongs to another domain, skipping it.");continue;}try {huc = (HttpURLConnection)(new URL(url).openConnection());huc.setRequestMethod("HEAD");huc.connect();respCode = huc.getResponseCode();if(respCode >= 400){System.out.println(url+" is a broken link");}else{System.out.println(url+" is a valid link");}} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}driver.quit();}}
実際のデバイスでSeleniumテストを無料で実行
その機能をより深く理解す
1. パッケージのインポート
以下のパッケージをデフォルトパッケージと一緒にインポートします:
import java.net.HttpURLConnection;
このパッケージのメソッドを使用すると、テスターはHTTP要求を送信し、コードによって返されたHTTP応答コードをキャプチャできます。
2. Webページ上のすべてのリンクを収集
webページ上のすべてのリンクを検索し、リストに配置します:
List<WebElement> links = driver.findElements(By.tagName("a"));
リンクのリストを移動する反復子を取得します:
Iterator<WebElement> it = links.iterator();
3: Urlの識別と検証
このステップでは、特定のURLがサードパーティのドメインに属しているかどうか、または空/nullであるかどうかを確認します。
以下のコードは、アンカータグのhrefを取得し、URL変数に格納します。
url = it.next().getAttribute("href");
URLがnullまたは空の場合は、この後の手順をスキップします。
if(url == null || url.isEmpty()){System.out.println("URL is either not configured for anchor tag or it is empty");continue;}
URLがメインドメインに属している場合は、続行します。 サードパーティのドメインに属している場合は、この後の手順をスキップします。
if(!url.startsWith(homePage)){System.out.println("URL belongs to another domain, skipping it.");continue;}
4. Send HTTP request
HttpURLConnectionクラスのメソッドは、HTTP要求を送信し、HTTP応答コードをキャプチャします。 したがって、openConnection()メソッド(URLConnection)の出力は、HttpURLConnectionに型キャストされます。
huc = (HttpURLConnection)(new URL(url).openConnection());
テスターが要求タイプを”GET”ではなく”HEAD”に設定した場合、ヘッダーのみが返され、ドキュメント本文は返されません。
huc.setRequestMethod("HEAD");
テスターがconnect()メソッドを呼び出すと、URLへの実際の接続が確立され、HTTP要求が送信されます。
huc.connect();
5. リンクの検証
以前に送信されたHTTP要求のHTTP応答コードを取得するには、getResponseCode()メソッドを使用します。
respCode = huc.getResponseCode();
応答コードに基づいてリンクステータス(壊れているかどうか)を確認する
if(respCode >= 400){System.out.println(url+" is a broken link");}else{System.out.println(url+" is a valid link");}
Seleniumで壊れたリンクを見つけることは、ウェブサイトの開発とテス この記事に記載されている方法を使用することで、テスターは誤動作しているリンクを迅速かつ正確に識別できます。 壊れたリンクを生産段階に渡すことは、ユーザーエクスペリエンスに深刻な損傷を与え、極端な徹底で防止する必要があります。 これが、Seleniumで壊れたリンクをテストする方法を知ることが、テスターのツールキットの重要な部分である理由です。