我正在同时使用 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/