【问题标题】:How do I use selenium with Ruby?如何在 Ruby 中使用 selenium?
【发布时间】:2011-04-05 22:13:30
【问题描述】:

我使用 Firefox Selenium 进行了一些测试,然后将其导出到 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 操作系统:10.6.4
  • Macbook Pro
  • 红宝石: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

【问题讨论】:

  • 我们可以看看你的测试是什么样子的吗?
  • 我编辑了帖子以包含我尝试运行的代码

标签: ruby selenium connection


【解决方案1】:

我在论坛和谷歌搜索了几个小时后才知道。

我需要做的是让 selenium 服务器运行以使其工作。我可以从这个网站http://seleniumhq.org/download/ 下载它(当前:Selenium RC February 23, 2010 1.0.3)。

从那里我打开了一个新终端并做到了

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

然后用另一个终端窗口运行我的 ruby​​ 生成的脚本

ruby google_test.rb

它成功了!

【讨论】:

    【解决方案2】:

    这是用于简单谷歌搜索的 Selenium Webdriver 示例 另存为 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

    【讨论】:

    • 很棒的帖子。将此标记为 Ruby WebDriver 基本模板的参考。
    【解决方案3】:

    这是一个更简单的脚本版本:

    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

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 2021-09-25
      • 2016-08-12
      • 2020-01-27
      • 2012-08-15
      相关资源
      最近更新 更多