Я работаю одновременно с 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)
Почему Руби жалуется на повторное открытие действительного класса?
Рассматриваемый класс выглядит так:
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
Почему?