Не останавливайтесь на ошибке HTTP 403 - PullRequest
3 голосов
/ 28 апреля 2010

В одном из моих тестовых примеров Selenium я стараюсь обеспечить невозможность доступа к определенным страницам. Вместо этого следует указать код возврата HTTP 403.

Однако здесь Selenium прекращает выполнение теста со следующим исключением:

com.thoughtworks.selenium.SeleniumException: XHR ERROR: URL = <a href="http://user:password@www.example.com/admin" rel="nofollow noreferrer">http://user:password@www.example.com/admin</a> Response_Code = 403 Error_Message = Forbidden

Есть ли способ обойти это?

Ответы [ 3 ]

4 голосов
/ 29 апреля 2010

Похоже, я должен сам ответить на вопрос ...

Теперь я окружаю "открытый" вызов блоком try ... catch. Там я анализирую сообщение об исключении, если оно содержит код 403 и ОШИБКУ XHR. Сдается мне не очень чисто, но работает.

2 голосов
/ 08 декабря 2010

Я пытался проверить ошибки HTTP 403 с помощью PHPUnit. Я изучил код расширения Selenium PHPUnit и обнаружил, что драйвер завершает сеанс, как только он получает неверный ответ, и, похоже, нет способа обойти эту функцию.

Я решил использовать решение try-catch и перезапустить сеанс Selenium:

try {
    $this->open('restricted_url');
    $this->assertTitle('The page cannot be displayed');
} catch (PHPUnit_Framework_Exception $e) {
    $this->start();
}

Когда сеанс Selenium перезапускается, вся информация о сеансе теряется, как и следовало ожидать, поэтому вам нужно будет заново построить сеанс, чтобы запустить больше тестов:

$this->loginAsGuest();

try {
    $this->open('admin_url');
    $this->assertTitle('The page cannot be displayed');
} catch (PHPUnit_Framework_Exception $e) {
    $this->start();
    $this->loginAsGuest();
}
2 голосов
/ 05 мая 2010

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

в рубине:

@browser.remote_control_command('open', [url, 'true'])

В C #:

((DefaultSelenium)selenium).Processor.DoCommand("open", new string[]{url, "true"}))

Я полагаю, что поведение в стволе Selenium по умолчанию игнорирует код состояния. Итак, вы можете попробовать построить это и посмотреть, сработает ли это для вас.

...