Как использовать транспортир, чтобы получить код статуса ответа и текст ответа?

Я использую protractor для тестирования e2e.

Я хочу посетить URL-адрес, скажем:

browser.get("http://my.test.com");

И получите код статуса http и весь текст основного ответа, но я не могу найти способ их получить. Существуют ли какие-либо методы, которые я могу использовать?

Ответ 1

Получение кода статуса http невозможно, так как было решено, что selenium webdriver API не добавит его, а Protractor зависит от Selenium для взаимодействия с браузером.

Вам нужно найти обходное решение для этого, например. используя NodeJS, учитывая, что Protractor работает внутри него со вспомогательной функцией, которая понимает promises, поэтому Protractor ждет HTTP-доступа до продолжения:

// A Protracterized httpGet() promise
function httpGet(siteUrl) {
    var http = require('http');
    var defer = protractor.promise.defer();

    http.get(siteUrl, function(response) {

        var bodyString = '';

        response.setEncoding('utf8');

        response.on("data", function(chunk) {
            bodyString += chunk;
        });

        response.on('end', function() {
            defer.fulfill({
                statusCode: response.statusCode,
                bodyString: bodyString
            });
        });

    }).on('error', function(e) {
        defer.reject("Got http.get error: " + e.message);
    });

    return defer.promise;
}

it('should return 200 and contain proper body', function() {
    httpGet("http://localhost:80").then(function(result) {
        expect(result.statusCode).toBe(200);
        expect(result.bodyString).toContain('Apache');
    });
});

Другим вариантом может быть изменение стороны сервера html в соответствии с кодом статуса ответа, как в этом сообщении в блоге

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