14

我需要使用 Selenium 检查 HTTP 响应标头的最佳方法。我查看了 Selenium 文档,没有看到任何直接的方法。高度赞赏帮助。

4

6 回答 6

8

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();
于 2009-07-24T17:51:59.960 回答
6

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

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

于 2009-03-24T22:53:18.333 回答
3

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

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

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

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

  • 定制测试以确保页面符合 W3C 标准的有效性

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

  • Selenium 用于测试 UI 功能/行为以及将 Javascript 集成到这些页面中

值得花时间打破使用这些不同工具测试系统不同方面的责任,因为仅使用 Selenium 可能会导致问题:

  • 套房越大,它们的运行速度就越慢。与提到的其他工具相比,Selenium 本质上是较慢的
  • 它可以很好地处理行为/功能测试,但是 XPath 可能很脆弱,并且可能需要越来越多的时间和精力来维护
  • 通常需要您在应用程序中设置“真实生活”数据以逐步完成用户场景(这可能很混乱并且需要很多时间)

还有一些技术——您可能遇到也可能没有遇到——您可以使用这些技术使您的 Selenium 测试更有弹性

于 2009-03-24T22:32:02.160 回答
2

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

它的轻量级,与几乎所有其他替代品(如 BrowserMob 甚至 LittleProxy)不同

在这里查看带有代码的 HOWTO:http: //www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers

于 2011-06-22T17:04:27.173 回答
1

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

也许您可以提供一些有关您计划如何使用 Selenium 的详细信息?

于 2009-03-24T21:33:11.380 回答
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")
于 2013-05-02T10:24:34.443 回答