SeleniumでHTTPステータスコードを取得する方法は?
例えば。ブラウザが/ user/27をリクエストし、ID = 27のユーザーが存在しない場合、HTTP 404が返されることをテストできますか?
私の主な関心はSelenium RCですが、誰かが「通常の」Seleniumの答えを知っていれば、おそらく簡単にRCに翻訳できます。
/ピート
これは、このタイプのテストでのSeleniumの最適な使用法ではありません。実行可能なテストを実行し、より高速に実行できる場合は、ブラウザをロードする必要はありません。
[Test]
[ExpectedException(typeof(WebException), UserMessage = "The remote server returned an error: (404) Not Found")]
public void ShouldThrowA404()
{
HttpWebRequest task; //For Calling the page
HttpWebResponse taskresponse = null; //Response returned
task = (HttpWebRequest)WebRequest.Create("http://foo.bar/thiswontexistevenifiwishedonedayitwould.html");
taskresponse = (HttpWebResponse)task.GetResponse();
}
404 Seleniumの実行中にテストで別のページにリダイレクトする場合、最終ページに期待どおりのものがあるかどうかを確認できます。
私はこれが衝撃的なハックであることを知っていますが、これは私がやったことです:
protected void AssertNotYellowScreen()
{
var Selenium = Selenium;
if (Selenium.GetBodyText().Contains("Server Error in '/' Application."))
{
string errorTitle = Selenium.GetTitle();
Assert.Fail("Yellow Screen of Death: {0}", errorTitle);
}
}
私はそれが理想的ではないことを受け入れますが、私はそれを必要としていた状況で仕事をやり遂げます...
Selenium 2にはHtmlUnitが含まれているため、応答に直接アクセスするためにそれを利用できます。
public static int getStatusCode(long appUserId) throws IOException {
WebClient webClient = new WebClient();
int code = webClient.getPage(
"http://your.url/123/"
).getWebResponse().getStatusCode();
webClient.closeAllWindows();
return code;
}
おそらくcaptureNetworkTraffic()呼び出しをチェックアウトする必要があります。現在のところ、ポート4444を介してトラフィックをプロキシするようにIE/Safari/etcを手動で設定しない限り、Firefoxでのみ確実に動作します。
それを使用するには、Selenium.start( "captureNetworkTraffic = true")を呼び出すだけで、スクリプトの後半でSelenium.captureNetworkTraffic( "...")を呼び出すことができます。ここで、「...」は「plain」、「xml」です。 「または「json」。
試したことはありませんが、Firefoxに限定してFirebugとNetexportをインストールすることを気にしない場合、Seleniumはページステータスコード(およびFirebugのNetパネルの他のすべて)にアクセスできます: http ://Selenium.polteq.com/en/using-netexport-to-export-firebugs-net-panel/