3

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

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

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

有什么办法解决这个问题吗?

4

3 回答 3

4

看来我得自己回答这个问题了……

我现在用 try...catch 块包围“open”调用。在那里,如果异常消息包含 403 代码和 XHR ERROR,我将对其进行解析。在我看来不是很干净,但它有效。

于 2010-04-29T09:50:13.003 回答
2

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

在红宝石中:

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

在 C# 中:

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

我相信 Selenium 中继中的行为现在默认忽略状态代码。因此,您可以尝试构建它,看看它是否适合您。

于 2010-05-05T19:26:00.483 回答
2

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

我最终使用了 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();
}
于 2010-12-08T13:51:21.537 回答