2012-09-26 232 views
0

我有要求从Ruby on Rails框架运行Watir测试代码。我的红宝石在rails hello world上效果很好,我的Watir测试也是如此(当我从irb运行并以独立的ruby脚本运行时),但我的要求是从rails控制器中调用watir代码,不能加载Watir错误。从Ruby on Rails控制器Watir

这个要求是非常紧急的,我无法弄清楚错误是什么。

注:Rails应用程序是在NetBeans IDE 6.9运行和使用本机Ruby解释器系统(而不是默认的JRuby)

我有以下版本: 红宝石:1.9.3 的Watir: 3.0.0 的Rails:3.2.8

LoadError (cannot load such file -- Watir): 
    app/controllers/watir_controller.rb:4:in `<class:WatirController>' 
    app/controllers/watir_controller.rb:1:in `<top (required)>' 

这是我的控制器类调用的Watir脚本:

class WatirController < ApplicationController 

## the Watir controller 
require 'rubygems' 
require 'watir' 
# set a variable 
test_site = "http://www.google.com" 
# open the IE browser 
ie = Watir::IE.new 
# print some comments 
puts "Beginning of test: Google search." 
puts " Step 1: go to the test site: " + test_site 
ie.goto test_site 
puts " Step 2: enter 'pickaxe' in the search text field." 
ie.text_field(:name, "q").set "pickaxe" # "q" is the name of the search field 
#puts " Step 3: click the 'Google Search' button." 
ie.button(:name, "btnG").click # "btnG" is the name of the Search button 
puts " Expected Result:" 
puts " A Google page with results should be shown. 'Programming Ruby' should be high on the list." 
puts " Actual Result:" 
if ie.text.include? "Programming Ruby" 
    puts " Test Passed. Found the test string: 'Programming Ruby'. Actual Results match Expected Results." 
else 
    puts " Test Failed! Could not find: 'Programming Ruby'." 
end 
puts "End of test: Google search." 
end 
+0

而导致该错误的代码是...? –

+0

另外,你使用RVM吗? Watir在你的宝石名单中?是否有某种env.rb for rails(我不熟悉Rails)? –

+0

我没有使用RVM,它是一款Ruby应用程序。是的,Watir在宝石名单上。 – jasdmystery

回答

0

我不明白为什么你需要在你的Rails控制器中使用Watir?

的Watir是浏览器自动化测试的事情了,这意味着你应该把它放到你的测试/ spec目录,并把的Watir的Gemfile中成开发和测试组是这样的:

group :development, :test do 
    gem "watir" 
end 

既然你”重新使用Rails,你可能会测试用Rails编写的应用程序,那么我也推荐使用watir-rails。另外,如果您使用RSpec,请使用watir-rspec。这意味着您的Gemfile应该如下所示:

group :development, :test do 
    gem "watir-rails" 
    gem "watir-rspec" 
end 
+0

这并不回答这个问题。你是否会在控制器上使用Watir不是问题。 –

+1

有时为了正确回答问题,您需要提出更多问题以找出原始问题背后的动机。在这里,OP似乎想解决某种问题,但似乎希望以完全低效和错误的方式来完成,这就是为什么我不会太热衷于回答原始问题,而是找出正确答案然后提问并回答。基于此,降低我的答案没有根据,你不同意吗? –

-1

您必须将它包含在您的gem文件中。

的Gemfile

gem 'watir' 

控制器

class MyApp::WebCrawlerController 
    require "watir" 
    require "nokogiri" 

    def index 
     browser = Watir::Browser.new 
     browser.goto 'http://www.google.com' 
     doc = Nokogiri::HTML.parse(browser.html) 
    end 
end 
+0

它确实回答了这个问题,但我不认为这应该是正确的答案,因为这个问题本身不够清楚,似乎是朝着错误的方向前进。如果这个想法是在控制器动作中抓取某个页面,那么Watir是一个完全错误的工具选择 - 应该使用较低级别的http库。 –

+0

@JarmoPertman也许较低级别的HTTP库不能使用。这可能是通过JS加载数据的页面,因此需要Watir来正确加载数据。我认为这通常不是决定海报是否提出正确问题的答案的地方。如果OP想要更好地解决他们的问题,他们会问这个问题,但是他们特别问了如何使用Watir,所以这是我们应该提供的答案,不是? –

+0

是的,这一切都有可能,但是由于OP-s的问题没有解释为什么要使用Ratir动作(或其他浏览器自动化工具),所以我不会假设这是最好的解决方案解决问题。人们不知道要怎样解决他们的问题并不少见,这就是为什么需要额外的问题。我认为SO是如此(双关语意)要求正确的问题,因为如果错误的问题被问及错误的答案,那么整体质量就会下降。 –