【问题标题】:Watir from Ruby on Rails controller来自 Ruby on Rails 控制器的 Watir
【发布时间】:2016-07-20 09:56:18
【问题描述】:

我需要从 Ruby on Rails 框架运行 Watir 测试代码。我的 ruby​​ on rails hello world 运行良好,我的 Watir 测试也是如此(当我从 irb 运行并作为单独的 ruby​​ 脚本运行时),但我的要求是从 rails 控制器中调用 watir 代码,这给出了一个无法加载 Watir 错误。

这个要求很紧急,搞不清是什么错误。

注意:rails 应用程序在 netbeans 6.9 IDE 上运行,并使用系统中的原生 ruby​​ 解释器(不是默认的 jruby)

我有以下版本: 红宝石:1.9.3 女仆:3.0.0 导轨: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

【问题讨论】:

  • 而导致错误的代码是...?
  • 另外,您使用的是 RVM 吗? Watir 在您的宝石清单中吗? Rails 是否有某种 env.rb(我对 Rails 不太熟悉)?
  • 我没有使用 RVM,它是一个 ruby​​ on rails 应用程序。是的,Watir 在宝石清单上。
  • 找到了解决方案..必须在 Gemfile 中包含“watir”gem,这似乎是 rails 3 的要求。

标签: ruby-on-rails watir watir-webdriver


【解决方案1】:

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

Watir 用于浏览器自动化测试,这意味着您应该将其放入您的 test/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

【讨论】:

  • 这没有回答问题。您是否会在控制器上使用 Watir 不是问题。
  • 有时要正确回答问题,您需要提出更多问题才能找出原始问题背后的动机。在这里,似乎 OP 想要解决某种问题,但似乎想要以一种完全低效和错误的方式来解决,这就是为什么我不会太热衷于回答原始问题,而是找出正确的然后提问和回答。基于此,否决我的回答是没有根据的,您不同意吗?
【解决方案2】:

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

宝石文件

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

【讨论】:

  • 它确实回答了这个问题,但我认为这不应该是正确的答案,因为问题本身不够清楚,而且似乎正朝着错误的方向前进。如果这个想法是在控制器操作中抓取某些页面,那么 Watir 是一个完全错误的工具选择 - 应该使用较低级别的 http 库。
  • @JarmoPertman 也许不能使用较低级别的 HTTP 库。有可能是通过JS加载数据的页面,因此需要Watir才能正确加载数据。我不认为它通常是一个 SO 答案的地方来决定张贴者是否在问正确的问题。如果 OP 想要更好地解决他们的问题,他们会要求的,但他们特别问如何使用 Watir,所以这就是我们应该提供的答案,不是吗?
  • 是的,这一切皆有可能,但由于 OP-s 问题含糊不清,没有解释为什么要从 Rails 操作中使用 watir(或其他浏览器自动化工具),所以我不会做假设这是解决问题的最佳方法。人们不知道确切地问什么来解决他们的问题并不少见,这就是为什么需要额外的问题。我认为 SO 如此(双关语)关于提出正确的问题,因为如果用错误的答案提出错误的问题,那么整体质量就会下降。
猜你喜欢
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多