不要停止HTTP错误403

时间:2010-04-28 14:33:15

标签: error-handling selenium selenium-rc

在我的一个Selenium测试用例中,我尝试确保无法访问某些页面。相反,应该给出HTTP返回码403。

但是,Selenium终止了测试执行,但有以下异常:

com.thoughtworks.selenium.SeleniumException: XHR ERROR: URL = http://user:password@www.example.com/admin Response_Code = 403 Error_Message = Forbidden

有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

好像我必须自己回答这个问题......

我现在用try ... catch块围绕“open”调用。在那里,我解析异常消息,如果它包含403代码和XHR错误。在我看来不是很干净,但它确实有效。

答案 1 :(得分:2)

我不知道你正在使用什么语言,但我认为你可以通过指示Selenium在打开页面时忽略状态代码来解决这个问题。

在Ruby中:

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

在C#中:

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

我认为Selenium trunk中的行为现在默认忽略状态代码。所以,你可以尝试构建它,看看它是否适合你。

答案 2 :(得分:2)

我试图使用PHPUnit测试HTTP 403错误。我检查了PHPUnit Selenium Extension代码,发现驱动程序在收到错误响应后立即结束会话,并且似乎没有办法绕过此功能。

我最终使用了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();
}