使用Selenium检查HTTP响应头的最佳方法

时间:2009-03-24 20:57:40

标签: http selenium http-headers httpresponse

我需要使用Selenium检查HTTP响应头的最佳方法。我环顾了Selenium文档并没有看到任何简单的方法。非常感谢帮助。

6 个答案:

答案 0 :(得分:7)

我在StackOverflow上几次回答了这个问题。搜索我以前的答案来挖掘它。您必须编写一些扩展ProxyHandler和SeleniumServer的自定义Java代码的关键。您还需要使用AFTER 1.0 beta 2版本。

对于那些问为什么你想要这样做的人:有很多原因。就我而言,我们正在测试一个AJAX繁重的应用程序,当出现问题时,我们调试的第一件事就是网络线。这有助于我们查看AJAX调用是否发生,如果是,那么响应是什么。我们实际上是自动收集这些信息并在每次Selenium测试中捕获它(以及屏幕截图)。

答案 1 :(得分:7)

DefaultSelenium中的

captureNetworkTraffic()API捕获http请求/响应标头,您可以以html / xml / plain格式访问它们。

以下是示例代码:

Selenium s = new DefaultSelenium(...);
s.start("captureNetworkTraffic=true");
s.open("http://www.google.com");
String xml = s.captureNetworkTraffic("xml"); // html, plain
s.stop();

答案 2 :(得分:3)

我不会将Selenium用于此类测试,并建议您使用不同的工具解决各种测试问题。我们做的是:

  • 使用单元测试来测试代码:方法和类

  • 用于测试应用程序组件如何挂起的集成测试

  • 一个简单的功能测试框架,如Canoo WebTest(或一些等价物),用于断言Http缓存头,基本页面结构,简单重定向和cookie设置/值等内容

  • 定制测试以确保页面符合W3C标准

  • JSunit测试我们创建的Javascript类和方法

  • Selenium测试UI功能/行为和Javascript的集成 进入那些页面

由于仅使用Selenium可能导致问题,因此值得花时间分担使用这些不同工具测试系统不同方面的责任:

  • 套件越大,运行速度越慢。事实上,与提到的其他工具相比,Selenium本质上更慢
  • 它可以很好地处理行为/功能测试但是XPath可能很脆弱,可能需要更多的时间和精力来维护
  • 通常需要您使用应用设置'as-if-real-life'数据来逐步完成用户场景(这可能很麻烦,需要花费很多时间)

还有一些技巧 - 您可能会或可能不会遇到 - 您可以使用这些技术进行Selenium测试more resilient

答案 3 :(得分:2)

我想出了一个使用嵌入式代理的解决方法,由Proxoid项目提供。

它的轻量级,不像其他几乎所有其他选择(如BrowserMob甚至LittleProxy)

请参阅HOWTO,代码为:http://www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers

答案 4 :(得分:1)

我使用Selenium(而不是Selenium RC)处理这个问题的方法是将HTML测试转换为JSP,然后在需要的地方利用Java来读取标题或者做任何JavaScript(selenium只是Javascript)无法做到的事情。

也许你可以提供一些关于你打算如何使用Selenium的细节?

答案 5 :(得分:0)

从Selenium读取会话cookie,然后使用Selenium之外的真实HTTP库来请求特定页面。

这是Python代码:

# get session cookies from Selenium
cookies = {}
for s_cookie in self.selenium.get_cookies():
    cookies[s_cookie["name"]]=s_cookie["value"]

# request the pdf using the cookies:
response = requests.get(self.full_url('/vms/business_unit/2002/operational_unit/200202/guest/40/bill/pdf/'), cookies = cookies)
self.assertEqual(response.headers["content-type"], "application/pdf")