【问题标题】:Checking values with Cucumber and Watir用 Cucumber 和 Watir 检查值
【发布时间】:2012-04-03 01:44:15
【问题描述】:

我一直在尝试开始使用 Cucumber 和 Watir。我已经完成了安装并编写/复制了一个简单的“功能”。但是,我无法检查页面上的内容。

这是我的功能:

功能:Google 搜索 为了确保人们可以找到我的文档 我想检查它是否列在 Google 的第一页

Scenario: Searching for JS.Class docs
  Given I have opened "http://www.google.com/"
  When I search for "JS.Class"
  Then I should see a link to "http://jsclass.jcoglan.com/" with text "JS.Class v3.0"

我的 env.rb 文件看起来像这样

require 'watir'
require 'rspec'

这是我的 search_steps.rb

@ie

Given /^I have opened "([^\"]*)"$/ do |url|
    @ie = Watir::IE.new
    @ie.goto(url)
end

When /^I search for "([^\"]*)"$/ do |arg1|
    @ie.text_field(:name, "q").set(arg1)
    @ie.button(:name, "btnG").click
end

Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |arg1, text|
    puts arg1

    # @ie.text.should include(arg1)
    @ie.close
end

当我取消注释“@ie.text.should include(arg1)”行时,我会抛出此错误。

Then I should see a link to "http://jsclass.jcoglan.com/" with text "JS.Class v3.0" # features/step_definitions/search_steps.rb:13
  true
  undefined method `split' for ["http://jsclass.jcoglan.com/"]:Array (NoMethodError)
  ./features/step_definitions/search_steps.rb:17:in `/^I should see a link to "([^\"]*)" with text "([^\"]*)"$/'

  features\search.feature:8:in `Then I should see a link to "http://jsclass.jcoglan.com/" with text "JS.Class v3.0"'

失败的场景: cucumber features\search.feature:5 # 场景:搜索 JS.Class 文档

现在 Then 函数没有发挥作用。如果我注释掉这一行,那么它真正做的就是写出一些文本。

我拥有的 gem 包括以下 cucumber 、rspec 、watir 和 watir-webdriver

我拥有的 ruby​​ 版本是:ruby 1.9.3p125。

我在 Windows 7 Ultimate 上运行它。

我想知道我是否缺少宝石或其他东西。阅读该消息意味着我正在调用它找不到的方法,但我在网络上找到了很多使用此方法的页面。

非常欢迎任何正确方向的帮助、指导或指示。

【问题讨论】:

  • 您可以使用--backtrace 开关运行 Cucumber 并发布完整的错误消息吗?它应该可以更好地了解异常的来源。

标签: cucumber watir


【解决方案1】:

问题在于,如果您(手动)查看 Google 搜索结果的文本,您会注意到没有文本“http://jsclass.jcoglan.com/”。因此,正如预期的那样,测试将失败。

要解决此问题,您可以通过删除“http://”来更正对该步骤的调用:

Then I should see a link to "jsclass.jcoglan.com/" with text "JS.Class v3.0"

也就是说,如果您实际使用以下代码检查链接,它会更加健壮。检查文本是否在页面上可能会导致误报(请参阅WatirMelon 上的最新帖子)

@ie.link(:url => arg1, :text => text).exists?.should be true

【讨论】:

  • 嗨贾斯汀,感谢您的回复。我最初使用的是 ie.html 而不是 ie.text。初学者错误。我已经尝试使用您建议的代码,但它会引发以下错误。 “使用 equal? 进行比较,它比较对象身份,但预期和实际不是同一个对象。如果您不关心此示例中的对象身份,请使用 'actual.should == expected'。”现在这让我觉得它正在查看“实际”对象的类型。我将 'be' 更改为 '==' 但收到不同的错误。
  • 奇怪,代码对我有用。但是,我完全卸载并重新安装了您提到的 gem,现在我确实收到了错误。也许是因为我安装了多个 rspec 版本?无论如何,我会看看。
  • 使用 '==' 时遇到的错误是什么?一旦我做出这个改变,测试就通过了。
  • 好的,谢谢。我有以下与 rspec 相关的宝石。 rspec ,rspec-core ,rspec-expectations rspec-mocks 。也许这只是我没有正确版本的情况。希望如此,您的回答和检查链接的改进给我留下了深刻的印象。
  • 我认为你应该也可以使用xxx.should exist 很确定我以前用过(尽管我可能有一些自定义的 rspec 匹配器)
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多