Modules, require, include, toplevel constants and Watir


#1

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
module.

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:
Code:

require ‘watir’

WinClicker.new

This will throw an error saying that the constant WinClicker is
uninitialized

Now, if I do this
Code:

require ‘watir’

Watir::IE
WinClicker.new

It works.

It also works with:
Code:

require ‘watir’
include Watir
WinClicker.new

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:
Code:

require ‘watir’
Watir::IE::WinClicker.new

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

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.


#2

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
now.


Bret P.
CTO, WatirCraft LLC, www.watircraft.com
Lead Developer, Watir, www.watir.com

Blog, www.io.com/~wazmo/blog
Twitter, www.twitter.com/bpettichord
GTalk: removed_email_address@domain.invalid

Watir Training: Portland/Beaverton April 16-17
www.watircraft.com/training


#3

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.

Chad