webentwicklung-frage-antwort-db.com.de

HTTP-Statuscode in Selenium prüfen

Wie bekomme ich den HTTP-Statuscode in Selenium?

Z.B. Ich kann also testen, ob ein Browser 404/user/27 anfordert und kein Benutzer mit der ID = 27 vorhanden ist.

Mein Hauptinteresse gilt Selenium RC, aber wenn jemand die Antwort auf "normales" Selenium kennt, kann ich es wahrscheinlich leicht in RC übersetzen.

/ Pete

40
Pete

Dies ist möglicherweise nicht die beste Verwendung von Selenium für diese Art von Tests. Es ist unnötig, einen Browser zu laden, wenn Sie einen schnelleren Test durchführen können

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

Wenn Ihr Test während eines 404-Vorgangs auf eine andere Seite umleitet, könnte Selenium prüfen, ob die letzte Seite das enthält, was Sie erwarten.

10
AutomatedTester

Ich weiß, das ist ein schockierender Hack, aber das habe ich getan:

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

Es erledigt die Arbeit in der Situation, für die ich es brauchte, obwohl ich akzeptiere, dass es nicht ideal ist ...

6

Da Selenium 2 HtmlUnit enthält, können Sie es verwenden, um direkt auf die Antwort zuzugreifen.

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;
}
5
Sotomajor

Möglicherweise möchten Sie den captureNetworkTraffic () - Aufruf überprüfen. Im Moment funktioniert es nur mit Firefox zuverlässig, es sei denn, Sie haben IE/Safari/etc manuell für den Proxy-Verkehr über Port 4444 eingerichtet. 

Rufen Sie dazu einfach Selenium.start ("captureNetworkTraffic = true") auf. Später können Sie in Ihrem Skript Selenium.captureNetworkTraffic ("...") aufrufen, wobei "..." "plain", "xml" ist "oder" Json ".

1

Ich habe es nicht ausprobiert, aber wenn es Ihnen nichts ausmacht, sich auf Firefox zu beschränken und Firebug und Netexport zu installieren, kann Selenium auf den Seitenstatuscode (und alles andere in Firebugs Netzwerk) zugreifen: http://Selenium.polteq.com/de/nutzen-netexport-nach-export-firebugs-net-panel/

0
Matthew Lock