2010-08-30 6 views
12

Ich machte einige Tests mit dem Firefox Selenium und ließ es dann nach Ruby exportieren. Obwohl die Tests in Firefox alle gut funktionierten, habe ich Probleme, dieselbe Suite in Ruby auszuführen.Wie verwende ich Selen mit Ruby?

Ich habe versucht, eines der Beispielprogramme, die sie haben, auszuführen, und ich bekomme auch die gleiche Verbindung verweigert Fehler. Hier ist der Fehler, den ich bekam, als ich versuchte, ihre google_test Suite zu starten.

tellingsen$ ruby google_test.rb 
Loaded suite google_test 
Started 
E 
Finished in 0.001558 seconds. 

    1) Error: 
test_page_search(ExampleTest): 
Errno::ECONNREFUSED: Connection refused - connect(2) 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `initialize' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `open' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `connect' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:62:in `timeout' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:93:in `timeout' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `connect' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:553:in `do_start' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:542:in `start' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1035:in `request' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:845:in `post' 
    /Users/tellingsen/.gem/ruby/1.8/gems/selenium-client-1.2.18/lib/selenium/client/protocol.rb:89:in `http_post' 
    /Users/tellingsen/.gem/ruby/1.8/gems/selenium-client-1.2.18/lib/selenium/client/protocol.rb:12:in `remote_control_command' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:62:in `timeout' 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:93:in `timeout' 
    /Users/tellingsen/.gem/ruby/1.8/gems/selenium-client-1.2.18/lib/selenium/client/protocol.rb:11:in `remote_control_command' 
    /Users/tellingsen/.gem/ruby/1.8/gems/selenium-client-1.2.18/lib/selenium/client/protocol.rb:19:in `string_command' 
    /Users/tellingsen/.gem/ruby/1.8/gems/selenium-client-1.2.18/lib/selenium/client/base.rb:85:in `start_new_browser_session' 
    google_test.rb:21:in `setup' 

1 tests, 0 assertions, 0 failures, 1 errors 

Kann mir jemand dabei helfen?

Hinweis:

  • Mac OS: 10.6.4
  • Macbook Pro
  • Rubin: 1.8.7
  • gem: Selen-Client 1.2.18

EDIT Hier ist die google_test.rb, die ich versuchte

#!/usr/bin/env ruby 
# 
# Sample Test:Unit based test case using the selenium-client API 
# 
require "test/unit" 
require "rubygems" 
gem "selenium-client", ">=1.2.18" 
require "selenium/client" 

class ExampleTest < Test::Unit::TestCase 
    attr_reader :browser 

    def setup 
    @browser = Selenium::Client::Driver.new \ 
     :host => "localhost", 
     :port => 4444, 
     :browser => "*firefox", 
     :url => "http://www.google.com", 
     :timeout_in_second => 60 

    browser.start_new_browser_session 
    end 

    def teardown 
    browser.close_current_browser_session 
    end 

    def test_page_search 
     browser.open "/" 
     assert_equal "Google", browser.title 
     browser.type "q", "Selenium seleniumhq" 
     browser.click "btnG", :wait_for => :page 
     assert_equal "Selenium seleniumhq - Google Search", browser.title 
     assert_equal "Selenium seleniumhq", browser.field("q") 
     assert browser.text?("seleniumhq.org") 
     assert browser.element?("link=Cached") 
    end 

end 
+0

können wir sehen, wie Ihr Test aussieht? – AutomatedTester

+0

Ich bearbeitet den Beitrag, um den Code zu enthalten, den ich versucht habe, – TrentEllingsen

Antwort

15

Ich habe es nach ein paar Stunden der Suche in Foren und über Google herausgefunden.

Was ich tun musste, war, den Selenserver laufen zu lassen, damit er funktionierte. Ich konnte es von dieser Seite herunterladen http://seleniumhq.org/download/ (aktuell: Selen RC Februar 23, 2010 1.0.3).

Von dort öffnete ich ein neues Terminal und tat

cd Downloads/selenium-remote-control-1.0.3/selenium-server-1.0.3 
java -jar selenium-server.jar 

dann mit einem anderen Terminal-Fenster mein Rubin generierte Skript lief

ruby google_test.rb 

Und es hat funktioniert!

+1

zu laufen, danke für das Posten der Lösung. – suvankar

8

Dies ist Selen WebDriver Beispiel für eine einfache Google-Suche Speichern unter google_search.rb

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

class GoogleSearch < Test::Unit::TestCase 
    def setup 
    @driver = Selenium::WebDriver.for :firefox 
    @base_url = "http://www.google.com/" 
    @driver.manage.timeouts.implicit_wait = 30 
    @verification_errors = [] 
    end 
    def teardown 
    @driver.quit 
    assert_equal [], @verification_errors 
    end 
    def test_google_search 
    @driver.get(@base_url) 
    @driver.find_element(:name, "q").clear 
    @driver.find_element(:name, "q").send_keys "Thiyagarajan Veluchamy" 
    @driver.find_element(:name, "btnK").click 
    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 

$ Rubin google_search.rb

+0

Great post. Dies wurde als Referenz für eine Basisvorlage für Ruby WebDriver gespeichert. – emery

-1

Hier ist eine viel einfachere Version des Skripts:

require "selenium-webdriver" 

@driver = Selenium::WebDriver.for :chrome 
@base_url = "http://www.google.com/" 

@driver.get(@base_url) 
@driver.find_element(:name, "q").send_keys "Stack Overflow" 

Die für das @driver-Objekt verfügbaren Methoden finden Sie hier: http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Driver.html

find_element gibt Ihnen Zugriff auf die Element-Klasse. Methoden für die Element-Klasse finden Sie hier: http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Element.html