如何在 Ruby 中使用 selenium?

发布于 2024-09-16 23:03:56 字数 3597 浏览 4 评论 0原文

我用 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 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

I made some tests with the Firefox Selenium and then had it exported to Ruby. Although the tests all ran fine in Firefox, I am having trouble running the same suite in Ruby.

I tried to run one of the example programs they have and I also get the same connection refused error. Here is the error I got when trying to run their google_test suite.

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

Can someone help me with this?

Note:

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

EDIT
Here is the google_test.rb that I tried

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

动听の歌 2024-09-23 23:03:56

经过几个小时在论坛和谷歌搜索后我找到了答案。

我需要做的是让 selenium 服务器运行起来才能工作。我可以从这个网站下载它 http://seleniumhq.org/download/ (当前:Selenium RC 2010 年 2 月 23 日 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

并且它起作用了!

I figured it out after a few hours of searching on forums and through google.

What I needed to do was have the selenium server running for it to work. I was able to download it from this site http://seleniumhq.org/download/ (current: Selenium RC February 23, 2010 1.0.3).

From there I opened up a new terminal and did

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

Then ran my ruby generated script with another terminal window

ruby google_test.rb

And it worked!

勿忘初心 2024-09-23 23:03:56

这是用于简单谷歌搜索的 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

This is Selenium Webdriver example for simple google search
Save as 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

情丝乱 2024-09-23 23:03:56

这是该脚本的一个简单得多的版本:

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

Here is a much simpler version of the 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"

Methods available on the @driver object can be found here: http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Driver.html

find_element gives you access to the Element class. Methods available on the Element class can be found here:
http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Element.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文