Добрый день.

Недавно столкнулся с проблемой при проведении UI тестов: Selenium не имеет функции получения статус кода страницы. Как оказалось в дальнейшем, разработчики Selenium специально не предусмотрели данную возможность т. к. это противоречит концепции симуляции работы пользователя (подразумевается что пользователь не способен посмотреть статус код ответа).

Возможные решения


После долгих поисков в интернете стало понятно, что сделать это можно только при помощи внешних средств:


И многие другие.

Также существуют более изысканные варианты:
При помощи фреймворков (Codeception, Mink и пр.), использующих более одного браузера (к примеру PhpBrowser и ChromeDriver).

PhpBrowser консольный, и имеет возможность получения статус кодов, но не может работать динамически изменяющимися страницами. В ChromeDriver всё наоборот. То есть для написания автотеста для динамически изменяющейся страницы используется ChromeDriver. Куки из сессии ChromeDriver сохраняются, запускается сессия PhpBrowser, туда пробрасываются сохранённые куки и только после этого вызывается функция получения статус кода. Не самый быстрый метод, как по мне.

Решение средствами Selenium


Я предлагаю решение внутренними средствами Selenium, которое будет работать на любом фреймворке. А именно вставка функции на js. Данная функция поддерживается любым фреймворком на базе Selenium и не требует запуска дополнительных сессий.

Пример для Codeception (PHP)


public function getStatusCode()
    {
        return $this->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {
            return $webdriver->executeScript(
                       'var xhr = new XMLHttpRequest();
                       xhr.open(\'GET\', \'' . $webdriver->getCurrentURL() . '\', false);
                       xhr.send();
                       return String(xhr.status)');
        });
    }

Надеюсь данная информация будет кому нибудь полезна.