Проверка кода состояния HTTP в Selenium - PullRequest
42 голосов
/ 01 марта 2010

Как получить код статуса HTTP в Selenium?

например. поэтому я могу проверить, что если браузер запрашивает / user / 27 и не существует пользователя с ID = 27, возвращается HTTP 404?

Мой основной интерес - Selenium RC, но если кто-то знает ответ на «нормальный» селен, я, вероятно, легко смогу перевести его на RC.

/ Pete

Ответы [ 7 ]

10 голосов
/ 01 марта 2010

Возможно, это не лучшее использование 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, вы можете проверить, что на последней странице есть то, что вы ожидаете.

6 голосов
/ 03 ноября 2011

Я знаю, что это шокирующий взлом, но вот что я сделал:

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

Он выполняет работу в той ситуации, в которой мне это было нужно, хотя я признаю, что это не идеально ...

5 голосов
/ 21 февраля 2011

Поскольку 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;
}
1 голос
/ 01 марта 2010

Возможно, вы хотите проверить вызов captureNetworkTraffic (). В настоящее время он надежно работает только с Firefox, если вы вручную не настроили IE / Safari / etc для прокси-трафика через порт 4444.

Чтобы использовать его, просто вызовите selenium.start ("captureNetworkTraffic = true"), а затем в вашем скрипте вы можете вызвать selenium.captureNetworkTraffic ("..."), где "..." - "обычный" , "xml" или "json".

0 голосов
/ 18 сентября 2013

Попробуйте, люди

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.
}
0 голосов
/ 27 марта 2013

Я не пробовал, но если вы не возражаете ограничиться Firefox и установить Firebug и Netexport, то Selenium может получить доступ к коду состояния страницы (и всему остальному на панели Net в Firebug Net): http://selenium.polteq.com/en/using-netexport-to-export-firebugs-net-panel/

0 голосов
/ 27 марта 2013

Если ничего не помогает, вы можете адаптировать свой код на стороне сервера во время тестирования, чтобы выводить статус HTTP на странице как элемент:

Например, на моей странице 403 «Отказано в доступе» у меня есть:

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

, который можно легко проверить с помощью API WebDriver:

* +1007 *

http://www.ninthavenue.com.au/how-to-get-the-http-status-code-in-selenium-webdriver

...