ruby - 重新打开 Ruby 类的奇怪问题

标签 ruby classloader watir

我正在同时使用 Watir 和 Watir-WebDriver,并尝试通过重新打开一些类并重新定义一些方法来使它们更加兼容。我遇到了我无法解释的奇怪行为。我正在尝试了解发生了什么事。

这种情况发生在 watir-1.7.1 上,该版本仅在 Windows 上可用。
ruby 1.8.7-p330
RUBYOPT=-rubygems

测试 1。

require 'watir'

Watir::ElementCollections.class_eval do
  def new_method
  end
end

>ruby open-classes-watir1.rb
open-classes-watir1.rb:3: uninitialized constant Watir::ElementCollections (NameError)

为什么 Ruby 会提示重新打开有效的类?

相关类如下所示:

element_collections.rb:

module Watir
   #... 
  class ElementCollections
    include Enumerable
    #...
  end
end

但这还不是全部!现在看这个:

测试 2。

require 'watir'

Watir::IE.class_eval do
end

Watir::ElementCollections.class_eval do # Requires the magic incantation above
  def new_method
  end
end

>ruby open-classes-watir2.rb

现在这个黑魔法咒语执行得很好。 Watir::IE 看起来像这样:

ie-class.rb:

module Watir
  class IE
    include WaitHelper
    include Exception
    include Container
    include PageContainer
    #...
  end
end

为什么?

最佳答案

不久前我对此做了一个视觉辅助。 http://www.flickr.com/photos/marekj/3615299778/ 要求 'watir' 来自 commonwatir gem 要求“watir/ie”来自 watir gem。 这里有两个 gem 在起作用。

关于ruby - 重新打开 Ruby 类的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893923/

相关文章:

ruby - 如何通过坐标单击 Canvas 中的特定元素(使用 WebDriver)?

ruby - 从 yaml 文件中读取数据并在 ruby​​ 中生成一个数组

ruby - 如何使用 OpenPGP 和 Ruby 对数据进行非对称加密?

ruby-on-rails - Rails 中的命名空间模型 : What's the state of the union?

ruby - 有没有办法使用 watir 在 firefox 的新选项卡或窗口中打开链接

ruby - 如何直接在 watir 中以 excel 格式创建测试报告?

ruby-on-rails - 对 Rails 中的对象进行排序

java - 使用 LWJGL 小程序访问资源

java - 如何以 jar 格式获得一个包含该 jar 内依赖项的最终 jar?

java - 如何在运行时找出一个类的来源?