Подтвердить что ты не робот

Как использовать селен с Ruby?

Я провел несколько тестов с Selenium Firefox, а затем экспортировал его в Ruby. Хотя тесты все отлично работали в Firefox, у меня возникает проблема с запуском одного и того же пакета в Ruby.

Я попытался запустить одну из примеров программ, которые у них есть, и я также получаю такое же сообщение с ошибкой отказа. Вот ошибка, которую я получил при попытке запустить свой пакет google_test.

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

Может кто-нибудь мне помочь?

Примечание:

  • Mac OS: 10.6.4
  • Macbook Pro
  • Ruby: 1.8.7
  • gem: selenium-client 1.2.18

ИЗМЕНИТЬ Вот google_test.rb, который я пробовал

#!/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
4b9b3361

Ответ 1

Я понял это после нескольких часов поиска на форумах и через google.

Мне нужно было сделать, чтобы сервер селена работал, чтобы он работал. Я смог загрузить его с этого сайта http://seleniumhq.org/download/ (текущий: Selenium RC 23 февраля 2010 г. 1.0.3).

Оттуда я открыл новый терминал и сделал

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

Затем запустил созданный ruby ​​ script с другим терминальным окном

ruby google_test.rb

И это сработало!

Ответ 2

Это пример Selenium Webdriver для простого поиска google Сохранить как 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

$ruby ​​google_search.rb

Ответ 3

Вот более простая версия script:

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"

Методы, доступные в объекте @driver, можно найти здесь: http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Driver.html

find_element предоставляет вам доступ к классу Element. Методы, доступные для класса Element, можно найти здесь: http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Element.html