ruby-mine

exploring the mine

Webapplikationen testen mit Selenium und Ruby

von dethix am 23.09.2009 (23 Uhr)

Mit Selenium und Ruby ist es relativ einfach, funktionale Tests für Webseiten zu erstellen bzw. ausführen zu lassen. Ich stand vor der Entscheidung, entweder Watir oder Selenium für Testzwecke zu verwenden. Den Ausschlag für Selenium gab eindeutig die Selenium IDE. Mit diesem Firefox Plugin lassen sich sehr komfortabel und zügig Abläufe im Browser aufzeichnen und in diversen Formaten exportieren. Da auch Ruby zu diesen Formaten gehört war die Entscheidung schnell getroffen.

Hier ein Beispiel wie ein von der Selenium IDE generierter Rubycode aussieht:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
require "selenium"
require "test/unit"

class ruby-mine < Test::Unit::TestCase
  def setup
    @verification_errors = []
    if $selenium
      @selenium = $selenium
    else
      @selenium = Selenium::SeleneseInterpreter.new("localhost", 4444, 
        "*firefox", "http://localhost:4444", 10000);
      @selenium.start
    end
    @selenium.set_context("test_ruby-mine", "info")
  end
  
  def teardown
    @selenium.stop unless $selenium
    assert_equal [], @verification_errors
  end
  
  def test_ruby-mine
    @selenium.open "http://www.google.de/"
    @selenium.type "q", "ruby-mine"
    @selenium.click "btnG"
  end
end

Die Selenium IDE bietet zwei Möglichkeiten Rubycode zu speichern. Entweder im Format “Ruby Selenium RC” oder “Ruby – Selenium IDE 0.7 (deprecated)”. Hier habe ich das RC Format gewählt. Versucht man diesen Test jetzt ohne weitere Anpassung auszuführen wird das in der IDE funktionieren, auf einem anderen System aber nicht. Dazu müssen einige Änderungen vorgenommen werden. Zum einen wird beim Speichern der gewählte Dateiname auch als Klassenname verwendet. Hier wird eine Konstante erwartet und diese muss in Ruby groß geschrieben werden.

Was für die Verwendung der Tests ausserhalb der IDE spricht, ist die Tatsache, dass es so auch möglich ist andere Browser zu verwenden. Die IDE gibt es nur für Firefox. Selenium selbst unterstützt aber viele verschiedene Browser. Mit welchem Browser ein Testcase ausgeführt werden soll, lässt sich einfach in der folgenden Zeile festlegen:

1
2
@selenium = Selenium::SeleneseInterpreter.new("localhost", 4444, 
  "*firefox", "http://localhost:4444", 10000);

Anstelle von Firefox kann man hier z.B. “*iexplore” eintragen.

Um die aufgezeichneten Tests jetzt auszuführen zu können, muss das Selenium Gem installiert sein. Den Server startet man mit dem Aufruf “selenium”. Dies lässt sich auch innerhalb eines Rubyskripts realisieren. Ein Beispiel dazu und weitere Informationen findet ihr auf der Webseite des Selenium Gem.


Kommentar schreiben

Name (notwendig)

Mail (wird nicht veröffentlicht)

Webseite


Kommentare

  1. Chriss schrieb am 25.09.2009 (14 Uhr)

    Sieht interessant aus, läuft bei mir aber ganz am Anfang schon auf Fehler… :-(

    Loaded suite D:/Profiles/awxwa/My Documents/littlehelpers/selenium/Rrr Started E Finished in 21.375 seconds. test_rrr(Rrr): SeleniumCommandError: c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.1.14/lib/selenium/openqa/selenium.rb:173:in `do_command’ c:/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout’ c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout’ c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.1.14/lib/selenium/openqa/selenium.rb:158:in `do_command’ c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.1.14/lib/selenium/openqa/selenium.rb:180:in `get_string’ c:/ruby/lib/ruby/gems/1.8/gems/Selenium-1.1.14/lib/selenium/openqa/selenium.rb:148:in `start’ D:/Profiles/awxwa/My Documents/littlehelpers/selenium/Rrr.rb:11:in `setup’

    1) Error:

    1 tests, 1 assertions, 0 failures, 1 errors

    Jemand ne Idee?