Modules, require, include, toplevel constants and Watir


Hi guys,

Despite working in IT for almost 2 years now I consider myself a
programming novice. Its probably my art degree. Anyway, I’m having
trouble figuring out what is going on here.

I’m using Watir here, but I suppose this would hold true with any

To give a little background. As far as I can tell, the Watir module
holds the IE class which holds the WinClicker class

This is the code:

require ‘watir’

This will throw an error saying that the constant WinClicker is

Now, if I do this

require ‘watir’


It works.

It also works with:

require ‘watir’
include Watir

However, it is not a good idea to include Watir. In 1.6.2 of watir,
including it can break scripts and I’m told its generally a poor idea to
include at the global level.

If I use:

require ‘watir’

I get a warning in the way I am referencing the toplevel class

My questions are:

  1. What is Watir::IE doing in the second code example that allows me to
    then use WinClicker
  2. Is doing a Watir::IE the same as including Watir?
  3. What does that warning when referencing Watir::IE::WinClicker imply
    and what problems can arise from doing that?
  4. If anyone knows, how should I be dealing with the creation of new
    WinClicker objects so as to avoid the warning AND avoid including Watir.

Thanks a million.


On Wed, Mar 25, 2009 at 4:18 PM, Chad M. removed_email_address@domain.invalid wrote:

  1. What is Watir::IE doing in the second code example that allows me to
    then use WinClicker

There is an autoload set on Watir::IE. This is new with Watir 1.6.

It is the same as “require ‘watir/ie’”. This is probably what you want
to do

Bret P.
CTO, WatirCraft LLC,
Lead Developer, Watir,

GTalk: removed_email_address@domain.invalid

Watir Training: Portland/Beaverton April 16-17


That explains a lot. Thanks Bret. As it turns out, I was previously
using ‘watir/ie’ before but I had the insane notion that the ie.rb
file’s name was in caps so I was using ‘watir/IE’ which gave a different
warning about the constant ATTACHER already being initialized. I am
totally baffled on what made me think this but what can ya do. Anyway,
thanks again.