在我的一个Selenium测试用例中,我尝试确保无法访问某些页面。相反,应该给出HTTP返回码403。
但是,Selenium终止了测试执行,但有以下异常:
com.thoughtworks.selenium.SeleniumException: XHR ERROR: URL = http://user:password@www.example.com/admin Response_Code = 403 Error_Message = Forbidden
有什么方法可以解决这个问题吗?
答案 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();
}