45

SeleniumでHTTPステータスコードを取得するには?

たとえば、ブラウザが /user/27 を要求し、ID=27 のユーザーが存在しない場合、HTTP 404 が返されることをテストできますか?

私の主な関心は Selenium RC ですが、誰かが「通常の」Selenium の答えを知っていれば、おそらく簡単に RC に変換できます。

/ピート

4

7 に答える 7

10

これは、このタイプのテストに 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 中にテストが別のページにリダイレクトされている場合、最終ページが期待どおりであることを確認できます。

于 2010-03-01T09:58:58.510 に答える
5

Selenium 2にはHtmlUnitが含まれているため、応答に直接アクセスするために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;
}
于 2011-02-21T09:52:20.737 に答える
5

私はこれが衝撃的なハックであることを知っていますが、これは私がやったことです:

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

理想的ではないことは認めますが、必要な状況で仕事を成し遂げます...

于 2011-11-03T06:26:50.153 に答える
3

おそらく、captureNetworkTraffic()呼び出しを確認する必要があります。現在、ポート4444を介してトラフィックをプロキシするようにIE / Safari / etcを手動で設定しない限り、Firefoxでのみ確実に機能します。

これを使用するには、selenium.start( "captureNetworkTraffic = true")を呼び出すだけで、後でスクリプトでselenium.captureNetworkTraffic( "...")を呼び出すことができます。ここで、"..."は"plain"、 "xml "、または"json"。

于 2010-03-01T15:09:16.850 に答える
0

私は試していませんが、Firefox に限定して Firebug と Netexport をインストールすることを気にしないのであれば、Selenium はページ ステータス コード (および Firebug の Net パネルのその他すべて) にアクセスできます: http://selenium .polteq.com/en/using-netexport-to-export-firebugs-net-panel/

于 2013-03-27T00:42:24.713 に答える
-2

他のすべてが失敗した場合は、テスト中にサーバー側のコードを調整して、ページの HTTP ステータスを要素として出力することができます。

たとえば、私の 403 Permission Denied ページには次のように表示されます。

   <h1 id="web_403">403 Access Denied</h1>

これは、WebDriver API を介して簡単に確認できます。

    public boolean is403(WebDriver driver) {
        try {
            driver.findElement(By.id("web_403"));
            return true;
        } catch (NoSuchElementException e) {
            return false;
        }
    }

https://rogerkeays.com/how-to-get-the-http-status-code-in-selenium-webdriver

于 2013-03-27T00:17:31.377 に答える
-2

これを試してみてください、人々

WebClient wc = new WebClient();
int countRepeats = 120; // one wait = 0.5 sec, total 1 minute after this code
boolean haveResult = false;
try {
    HtmlPage pageHndl = wc.getPage(Urls);
    for(int iter=0; iter<countRepeats; iter++){
        int pageCode = pageHndl.getWebResponse().getStatusCode();
        System.out.println("Page status "+pageCode);
        if(pageCode == 200){
            haveResult = true;
            break;
        }
        else{
            Thread.sleep(500);
        }
    }
} catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
} catch (InterruptedException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}
于 2013-09-18T13:42:59.557 に答える