【问题标题】:Watir-WebDriver HTTP CodeWatir-WebDriver HTTP 代码
【发布时间】:2011-11-09 06:56:07
【问题描述】:

所以我将 Watir WebDriver 与 Firefox 和 Chrome 一起使用。 Chrome 速度要快得多,但似乎有一些怪癖。首先,在 Firefox 中,当我使用类似的东西时:

ff.link(:text, "Click Here").exists?

它工作正常。但是,在 Chrome 中,它似乎经常停止,然后以超时异常退出。所以我必须做的是像这样缩小 Chrome 中的搜索范围:

linkDiv = ch.div(:class, "mydiv")
linkDiv.link(:text, "Click Here").exists?

通常这种类型的页面缩减到只包含感兴趣的 div 标签就可以了。

但是,我在 Chrome 中注意到了另一个我在 Firefox 中没有注意到的怪癖。在 Chrome 中,我偶尔会收到错误 15 - 类似于套接字上没有响应但由于它是间歇性的,我无法随意重现错误并且尚未复制确切的文本。我还没有在 Firefox 中看到这个 - 至少现在还没有 - 但也许 Chrome 在 Firefox 隐藏它的地方给了我一个错误。

所以我希望能够在发生此错误时进行记录,到目前为止我最好的想法是使用 HTTP 代码 - 即 200、404、500 等。如果代码不是 200,则记录代码,然后重试。

Watir 有没有办法获取 HTTP 代码?从 PHP/CURL 来到 Ruby 之后,我认为会有一种简单的方法来获取 HTTP 代码 - 类似于 browser.http_code (其中 browser = Watir::Browser.new :chrome, browser.goto(...))但是我还没有找到它,我也没有运气在网上找到方法。到目前为止,我发现的“解决方案”都需要其他 gem 调用页面以获取返回的代码。但是,由于每次我收到此错误时,这些页面都可以正常工作 10 次或更多次,因此使用另一个 gem 进行另一个调用也无济于事。

谢谢


我的解决方法...

没有任何内容的间歇性页面的标题在browser.title 字符串的末尾包含“不可用”。所以我使用browser.title.include? "is not available" 检查页面是否从未加载。

这不太理想,原因有很多,例如标题可能会因站点而异,或者可能会在 Chrome 升级时发生变化。状态码 200 总是告诉我的代码有问题...

我想这是对开发人员的建议。

再次感谢

【问题讨论】:

  • 如果您担心错误页面上的标题会发生变化,为什么不对其期望登陆的页面标题进行测试检查,以确保您确实到达了正确的地点。然后,如果未找到预期的标题,您可以让它将实际标题和页面文本写入某种错误日志或结果日志,和/或截屏。
  • 自 1995 年以来,我一直在使用不同的语言进行编程。我曾经是一名航空工程师,有许多其他人认为我没有重复的任务。随着时间的推移,我在每项工作中的工具包都对我很有帮助。结果,我养成了将所有代码构建为尽可能通用的习惯。换句话说,我在编写此检查时的意图是,可以在我访问过的所有其他页面上使用此检查,以查看是否出现相同的错误。因此检查状态 200 - 几乎适用于我访问过的每个页面。
  • 而且我认为我想访问的页面的标题比错误页面的标题更有可能发生变化。因此我检查了错误。但是,检查我要访问的页面的标题也可能允许我将某种形式的自动检查放入代码中,让我知道页面是否已更改并且我没有注意到/忘记更新 Watir 代码对于那个页面。让代码为您仔细检查可以轻松完成的事情也不错。谢谢
  • 是的,一个 'arrived_at_right_page' 方法可以解决这个问题并寻找潜在的错误内容可能是一件非常有用的事情,这是我可以在我的实用程序库中看到的东西。你可以让它把标题作为一个参数,并返回找到的标题(如果有问题,连同记录一起),然后沿着 browser.arrived_ok(title).should = title 的行在验证中使用它
  • 我对 Ruby 还是很陌生(实际上只使用 PHP 大约 18 个月),关于编写附加方法和覆盖我只是没有的方法有很多习惯于我以前的编码经验。我将不得不考虑编写一个简单的检查代码,我可以将其添加到 Watir 类中并在此处发布。我可以很容易地把它写成一个函数,所以任何关于如何从 Watir 将它添加到浏览器对象的指针都将不胜感激。谢谢

标签: google-chrome http-headers watir watir-webdriver


【解决方案1】:

你不能用 Watir-Webdriver 做到这一点。见https://stackoverflow.com/a/6512785/418107

【讨论】:

  • 感谢您的链接。我认为不支持响应代码(code.google.com/p/selenium/issues/detail?id=141)的理由只是愚蠢的。我了解功能蠕变与质量,但响应代码必须是某个地方已经可用的东西,因为浏览器可以显示它。并告诉每个人他们可以去学习/使用其他一些 gem 作为响应代码,这完全没有抓住重点。我想在返回的页面上检查的第一件事是响应代码 - 如果不是 200,则无需继续。我不确定他们在想什么。再次感谢
  • 我同意你的看法。他们的理由之一(通过挖掘表单)是,为了使网络浏览器像用户看到的那样自动化,检查 HTTP 代码变得不那么有意义了。也就是说,如果我访问 example.com 并将我重定向到 www.example.com,我应该获得重定向代码还是 200?如果我转到一个 404 的页面,它通常会重定向到一个完全有效的页面,告诉用户该页面没有找到。响应代码应该是 404 还是 200?因此,设计决策并不清楚他们将如何实现响应代码。
  • 我同意正确的做法是一件棘手的事情。但是,我猜想,提供最后一个响应代码将满足大多数测试目的。我也想知道为什么他们似乎认为他们只能提供 1 个响应代码。为什么不是一个数组,其中响应代码“在顶部”是最后一页的代码,而第一页的代码是“在底部”。 404 是特殊情况,我会考虑为 404 添加一些独特的东西,以便您的测试可以验证您的 404 页面是否正确加载。这样,作为测试人员,您可以确定您是否获得了本应获得的所有重定向等。
【解决方案2】:

你试过了吗?

browser.status

另一件事是检查用户体验的方式,通过查看结果页面,检查标题或文本以查看它是否指示错误。

如果这不是您想要的,那么除了 watir 之外,您还需要使用 HTTP 级别的 gem

查看这个 SO 问题和答案:Using Watir to check for bad links

【讨论】:

  • browser.status 检查时为空
  • browser.status 在我检查时为空。您提供的链接是我已经看到的资源之一。然而,我第一次阅读它时,我认为它是使用额外的 gem 来第二次调用该页面,因此否定了我可能对它的任何可能用途。再读一遍我就不确定了。我对该链接的阅读表明,Watir 被用来构建链接列表。然后 Net::HTTP.start 用于调用该链接另一端的页面以获取头部,然后查找状态 200。但我需要知道 Watir 现在所在页面的状态,而不是其他页面.
  • 我不认为您描述的“套接字没有响应”的错误是 HTTP 级别的错误。因此,试图找出页面的 HTTP 状态可能对您没有帮助。这可能是一个更好地针对 webdriver 人员的问题。
  • 我今天在第二台机器上测试我的代码时第一次在 Firefox 中看到错误。并不是说这一定会缩小范围。它仍然可以是站点或 webdriver。嗯...
  • browser.status返回jswindow.status,不是响应状态rubydoc.info/gems/watir/Watir/Browser#status-instance_methodWindow界面的status属性设置浏览器底部状态栏的文字或者返回之前设置的文字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2011-08-13
相关资源
最近更新 更多