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

в 14:37, , рубрики: Тестирование веб-сервисов

Добрый день.

Недавно столкнулся с проблемой при проведении 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 (FacebookWebDriverRemoteRemoteWebDriver $webdriver) {
            return $webdriver->executeScript(
                       'var xhr = new XMLHttpRequest();
                       xhr.open('GET', '' . $webdriver->getCurrentURL() . '', false);
                       xhr.send();
                       return String(xhr.status)');
        });
    }

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

Автор: мастер слога

Источник

Поделиться

* - обязательные к заполнению поля