Ruby代码在没有实例化或方法调用的情况下运行

时间:2011-11-20 20:00:40

标签: ruby selenium

首先发布在这里。我是一个新手程序员,你会看到,我正在学习使用Ruby编写自动化功能测试。我从Selenium IDE生成了下面的源代码,我一直在修改它,但我不明白为什么这个代码在没有实例化或方法调用的情况下运行。

require 'rubygems'
require "selenium-webdriver"
require "test/unit"

DataDir='Users/CH/src/ruby/data'

class Case1 < Test::Unit::TestCase

  def setup
    @driver = Selenium::WebDriver.for :firefox
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
  end

  def teardown
    #@driver.quit
    assert_equal [], @verification_errors
  end

  def test_case1
    @root_url="http://www.google.com"
    @driver.get @root_url+"/#sclient=psy-ab&hl=en&biw=1440&bih=716&source=hp&q=Test&pbx=1&oq=Test&aq=f&aqi=g4&aql=&gs_sm=e&gs_upl=3631l4283l0l4700l4l4l0l0l0l0l272l860l0.2.2l4l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=10e90fa4cbd35dc9"
    @driver.find_element(:id, "lst-ib").clear
    @driver.find_element(:id, "lst-ib").send_keys "test"
  end

  def element_present?(how, what)
    @driver.find_element(how, what)
    true
  rescue Selenium::WebDriver::Error::NoSuchElementError
    false
  end

  def verify(&blk)
     yield
  rescue Test::Unit::AssertionFailedError => ex
     @verification_errors << ex
  end
end

很抱歉,如果这是一个毫无希望的n00b问题,但没有任何谷歌搜索帮助回答它。

2 个答案:

答案 0 :(得分:4)

因为test/unit(实际上minitest/unit如果你在Ruby 1.9.x上)包含执行你定义的测试用例的代码。如果您愿意,可以浏览源herehere,看看它是如何完成的。基本上require 'test/unit'行最终会调用Test :: Unit上的autorun方法,它知道如何运行测试。

答案 1 :(得分:1)

Nutshell版本是类可以在扩展时执行的操作,包括将以test_开头的方法转换为测试套件测试,运行它们以及聚合它们的结果。

Kernel.at_exit方法还可用于在程序存在时从要运行的块创建Proc

结合这两个,瞧。

查看来源的深入细节,此时可能很容易消化。