web-dev-qa-db-ja.com

Selenium WebDriverでHttpResponse OK(200)を確認する

Selenium Remote WebDriverを使用しています。 csvファイルからすべてのリンクを読み取り、それらのリンクに対してテストを実行します。しかし、時には404応答が返されます。

Selenium WebDriverにHTTPレスポンス200が返されることを確認する方法はありますか?

21
Aniruddha

WebDriver APIで直接HTTPステータスコードを取得する方法はありません。これは 長年の機能要求 であり、プロジェクトでは 決して実装されない と思われます。問題の正しい解決策は、ネットワークトラフィックをインターセプトしてログに記録できるプロキシを使用するようにブラウザを設定し、コードがそのプロキシのプロキシを使用するようにすることです。

もちろん、リンクをチェックして200のステータスコードが返されることを確認するだけの場合は、リンクに移動したい言語のHTTPクライアントライブラリを簡単に使用できます。何らかの方法で結果のページを操作する必要がない限り、WebDriverを使用する必要はありません。

29
JimEvans

seleniumを使用する前に、次のようなものを使用できます。

public static boolean linkExists(String URLName){
    try {
      HttpURLConnection.setFollowRedirects(false);
      HttpURLConnection con =
         (HttpURLConnection) new URL(URLName).openConnection();
      con.setRequestMethod("HEAD");
      return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
    }
    catch (Exception e) {
       e.printStackTrace();
       return false;
    }
  }

このように使用する:

WebDriver driver = new FirefoxDriver();
for(String url : csvArray){
   if(linkExists(url)){
      driver.get(url);
            .
            .
            .
   }
}
3
JackTurky

私たちのサイトには、404応答用のカスタムエラーページがあります。そのページのページタイトルに「404-ページが見つかりません」と表示されている。私はdriver.Titleを使用して、「見つかりません」というテキストをチェックします。

C#を使用して、次のように記述しました。

// Check for 404 page:
var pageNotFoundTitleText = "not found";
if (driver.Title.ToLower().Contains(pageNotFoundTitleText)) throw new Exception("### 404 - Page Not found: " + link);
1
Jason Williams