Filipin.eu

Željko Filipin's blog.
Home Blog Tags Now License

View on GitHub
9 November 2005

Nadomak objektno orijentiranom raju

by Željko Filipin

Sveti Đžogljavko, zaštitnik testera.

Ovih dana sam uspio srediti testove baš onako kako sam oduvijek želio. Jednostavno izgaram od želje prenijeti iskustvo mladim testerima.

Legenda:

kod
# komentar

Možda se ova konfiguracijska datoteka čini nepotrebna, ako iznimno je korisna kad broj objekata poraste.

# yaml čak dopušta komentare!
# naravno, ovo je adresa aplikacije
# koju testiram
http_host: https://filipin.eu/

# a ovo je korisnik koji će žariti
# i paliti po aplikaciji
user:
  name: Željko
  password: iskušivač
# ovdje je skupljeno sve što treba
# za rad sa Internet Explorerom (IE)
require 'watir'

# ova dva reda omogućavaju upotrebu one simpatične
# assert(izraz_koji_treba_biti_istinit) metode
# (bit će još o tome riječi)
require 'test/unit/assertions'
include Test::Unit::Assertions

# ovdje je podrška za divne yaml konfiguracijske datoteke
require 'yaml'

=begin
Ovo je isto komentar u Ruby-ju.
U ovoj klasi su samo dvije metode, ali iznimno korisne.
contains_text? mi štedi vrijeme koje bi provodio u tipkanju.
Item.open_ie je sasvim duga priča.
Trebalo mi je nekoliko mjeseci dok nije sazorila.
IE je utrpan u varijablu klase @@ie.
Znači, da bi neka klasa mogla raditi s IE-om,
dovoljno je da joj klasa Item bude roditelj.
=end

class Item
  def contains_text?(text)
    assert(@@ie.contains_text(text),
      "could not find text '#{text}'")
  end
  def Item.open_ie
    @@ie = Watir::IE.new
    @@ie.set_fast_speed
  end
end

# sve aplikacije koje sam testirao
# traže da se korisnik prvo prijavi
class User < Item
  def initialize(user, http_host)
    @name = user['name']
    @password = user['password']
    @http_host = http_host
  end
  def go_to_log_in_page
    text = 'Please log in.'
    unless @@ie.contains_text(text)
      @@ie.goto("#{@http_host}login.aspx")
      contains_text?(text)
    end
  end
  def log_in
    go_to_log_in_page

    @@ie.textField(:id, 'name').set(@name)
    @@ie.textField(:id, 'password').set(@password)
    @@ie.button(:value, 'Login').click
    contains_text?("Logged in as #{@name}.")
  end
end

# zgrabi one podatke iz konfiguracijske datoteke
config = YAML::load(File.open('config.yml'))

# napravi novog korisnika
user= User.new(config['user'], config['http_host'])

# do sad smo samo nešto konfigurirali
# idemo testirati!

# otvori IE!
Item.open_ie

# prijavi korisnika u aplikaciju!
user.log_in

Što dalje? Bit će ovih dana. :)

tags: code - hrvatski - ruby