Pull to refresh

Метод получения статус кодов при работе с Selenium

Добрый день.

Недавно столкнулся с проблемой при проведении 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)');
        });
    }

Надеюсь данная информация будет кому нибудь полезна.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.