【问题标题】:The best way to inspect HTTP response headers with Selenium [closed]使用 Selenium 检查 HTTP 响应标头的最佳方法 [关闭]
【发布时间】:2010-10-15 07:40:20
【问题描述】:

我需要使用 Selenium 检查 HTTP 响应标头的最佳方法。我查看了 Selenium 文档,没有看到任何直接的方法。非常感谢您的帮助。

【问题讨论】:

  • 你到底想做什么? Selenium 在浏览器中运行。你有什么特别的信息吗?

标签: http selenium http-headers httpresponse


【解决方案1】:

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();

【讨论】:

  • selenium 2 不支持此方法。我收到java.lang.UnsupportedOperationException: captureNetworkTraffic
【解决方案2】:

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

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

【讨论】:

  • 我将此答案标记为我喜欢的答案,因为它实际上解决了我的问题。 :) 我们也有理由要检查标头。我同意上面的帖子,但它对我们来说非常有用。
  • 好吧,既然是 Selenium 先生本人,那就没法争辩了 ;)。我知道你也可以在服务器中扩展 Java 类。
  • 我搜索了您的答案,但似乎找不到您所指的那个。是哪个答案?你有扩展这两个 Java 类的例子吗?
  • 如果“搜索我以前的答案以挖掘它”不再是有效的建议,您能否修改答案以反映这一点?目前这是相当误导(我也去挖掘你以前的答案,显然是徒劳的)......
  • @PatrickLightbody 请更新您的答案。
【解决方案3】:

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

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

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

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

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

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

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

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

  • 套件越大,运行速度越慢。事实上,与提到的其他工具相比,Selenium 本身就更慢
  • 它可以很好地处理行为/功能测试,但 XPath 可能很脆弱,可能需要更多的时间和精力来维护
  • 通常需要您在应用中设置 'as-if-real-life' 数据以逐步了解用户场景(这可能会很混乱并且需要很长时间)

还有一些技术——你可能会或可能没有遇到过——可以用来进行 Selenium 测试more resilient

【讨论】:

    【解决方案4】:

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

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

    在此处查看 HOWTO 和代码:http://www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 我正在使用 Selenium RC 的 Ruby 驱动程序。我不确定我是否遵循您将 HTML 测试转换为 JSP 的意思。我正在测试的网站是用 .Net 编写的,尽管我无法想象这会对方法产生影响。那么有一种方法可以拦截标题就是你的意思?
      【解决方案6】:

      从 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")
      

      【讨论】:

        猜你喜欢
        • 2020-08-10
        • 1970-01-01
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 2010-10-22
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多