使用Cucumber和Watir检查值

使用Cucumber和Watir检查值,cucumber,watir,Cucumber,Watir,我一直想从黄瓜和水开始。我已经完成了安装并编写/复制了一个简单的“功能”。然而,检查页面上的内容并没有任何进展 这是我的特色: 功能:搜索谷歌 为了确保人们能找到我的文档 我想检查它是否列在谷歌的第一页 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 "h

我一直想从黄瓜和水开始。我已经完成了安装并编写/复制了一个简单的“功能”。然而,检查页面上的内容并没有任何进展

这是我的特色:

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

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函数没有完成它的工作。如果我把这行注释掉,那么它真正做的就是写出一些文字

我拥有的宝石包括以下cucumber、rspec、watir和watir webdriver

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

我在Windows7Ultimate上运行这个

我在想我是不是少了一块宝石什么的。阅读消息意味着我调用了一个它找不到的方法,但我在web上找到了很多使用此方法的页面


欢迎您向正确方向提供任何帮助、指导或指点。

问题是,如果您(手动)查看谷歌搜索结果的文本,您会发现没有文本“http://jsclass.jcoglan.com/". 因此,正如预期的那样,测试将失败

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

Then I should see a link to "jsclass.jcoglan.com/" with text "JS.Class v3.0"
也就是说,如果您实际使用以下代码检查链接,那么它将更加健壮。检查文本是否在页面的某个位置会导致误报(请参阅上的最新帖子)


您能否使用
--backtrace
开关运行Cucumber并发布完整的错误消息?它应该能更好地了解异常的来源。嗨,贾斯汀,谢谢你的回复。我最初使用的是ie.html而不是ie.text。初学者的错误。我尝试使用您建议的代码,但它会引发以下错误。“使用equal?进行比较,它比较对象标识,但预期和实际ar不是同一个对象。如果在本例中不关心对象标识,请使用'actual.should==expected'。”现在,这使我认为它正在查看'actual'对象的类型。我将“be”改为“==”,但我收到了一个不同的错误。奇怪的是,代码对我有效。然而,我做了一个完整的卸载,并重新安装了刚才你提到的gems,现在我得到了错误。也许是因为我安装了多个rspec版本?无论如何,我会看一看。当你使用“==”时会出现什么错误?一旦我做了这个改变,考试就通过了。好的,谢谢。我有以下与rspec相关的宝石。rspec,rspec核心,rspec期望,rspec模拟。也许这只是因为我没有正确的版本。希望如此,您的回答和检查链接的改进给我留下了深刻的印象。我认为您也应该能够使用
xxx.should
非常确定我以前使用过它(尽管我可能已经有一些定制的rspec匹配器)
@ie.link(:url => arg1, :text => text).exists?.should be true