Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Watir and Inheritance

Reply
Thread Tools

Watir and Inheritance

 
 
Mario Ruiz
Guest
Posts: n/a
 
      10-23-2007
I'm trying to do this:
-----------------------------
require 'Watir'

class Navigator<Watir::IE
def initialize(maxim)
@maxim=maxim
@iex=Watir::IE.new
end
def go(url)
@iex.goto(url)
if @maxim==1 then
@iex.maximize()
end
end
end

naveg=Navigator.new(1)
naveg.go("http://www.google.es")

puts naveg.url
--------------------------------
I want my 'naveg' object can display the methods and properties of
wakir, url for example. What am I doing wrong?
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Kyle Schmitt
Guest
Posts: n/a
 
      10-23-2007
Without looking at this too indepth...
you are inheriting from Watir::IE, and then making a new instance of
it inside of it? Ehh?

Start off with changing
class Navigator<Watir::IE
to
class Navigator

Now your class will work (but won't be inheriting). I don't know what
you really want to do with your class but hey, have fun playing
with it!

--Kyle

On 10/23/07, Mario Ruiz <(E-Mail Removed)> wrote:
> I'm trying to do this:
> -----------------------------
> require 'Watir'
>
> class Navigator<Watir::IE
> def initialize(maxim)
> @maxim=maxim
> @iex=Watir::IE.new
> end
> def go(url)
> @iex.goto(url)
> if @maxim==1 then
> @iex.maximize()
> end
> end
> end
>
> naveg=Navigator.new(1)
> naveg.go("http://www.google.es")
>
> puts naveg.url
> --------------------------------
> I want my 'naveg' object can display the methods and properties of
> wakir, url for example. What am I doing wrong?
> --
> Posted via http://www.ruby-forum.com/.
>
>


 
Reply With Quote
 
 
 
 
Drew Olson
Guest
Posts: n/a
 
      10-23-2007
Mario Ruiz wrote:
> I want my 'naveg' object can display the methods and properties of
> wakir, url for example. What am I doing wrong?


You want to call the url method on the @iex object, not the navigator
object. Try this:

require 'Watir'

class Navigator<Watir::IE
def method_misssing(name,*args)
if @iex.respond_to? name
@iex.send(name,*args)
end
end
def initialize(maxim)
@maxim=maxim
@iex=Watir::IE.new
end
def go(url)
@iex.goto(url)
if @maxim==1 then
@iex.maximize()
end
end
end

naveg=Navigator.new(1)
naveg.go("http://www.google.es")

puts naveg.url
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Mario Ruiz
Guest
Posts: n/a
 
      10-24-2007
If I write the class without inheriting, how can I get the 'url' outside
of the class?
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Mario Ruiz
Guest
Posts: n/a
 
      10-24-2007
Drew Olson wrote:
> You want to call the url method on the @iex object, not the navigator
> object. Try this:

...

This is not working.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Jesús Gabriel y Galán
Guest
Posts: n/a
 
      10-24-2007
On 10/23/07, Mario Ruiz <(E-Mail Removed)> wrote:
> I'm trying to do this:
> -----------------------------
> require 'Watir'
>
> class Navigator<Watir::IE
> def initialize(maxim)
> @maxim=maxim
> @iex=Watir::IE.new
> end
> def go(url)
> @iex.goto(url)
> if @maxim==1 then
> @iex.maximize()
> end
> end
> end
>
> naveg=Navigator.new(1)
> naveg.go("http://www.google.es")
>
> puts naveg.url
> --------------------------------
> I want my 'naveg' object can display the methods and properties of
> wakir, url for example. What am I doing wrong?


I think what you are doing wrong is having a Watir::IE object inside
your Navigator class. If you inherit from IE you have all methods in
IE available so you don't need to wrap another instance of IE inside.
Can you try this (not tested):

require 'Watir'

class Navigator<Watir::IE
def initialize(maxim)
@maxim=maxim
end
def go(url)
goto(url)
if @maxim==1 then
maximize()
end
end
end

naveg=Navigator.new(1)
naveg.go("http://www.google.es")

puts naveg.url

Hope this helps,

Jesus.

 
Reply With Quote
 
Mario Ruiz
Guest
Posts: n/a
 
      10-24-2007
Jesús Gabriel y Galán wrote:...

I'm sorry but it doesn't work because the class doesn't understand the
IE methods without the suffix.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Mario Ruiz
Guest
Posts: n/a
 
      10-24-2007
By the way the error is:
c:/ruby/lib/ruby/site_ruby/1.8/Watir.rb:1341:in `url': undefined method
`LocationURL' for nil:NilClass (NoMethodError)
from tempexample.rb:22
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Kyle Schmitt
Guest
Posts: n/a
 
      10-24-2007
Watir's ie object allows you to get at things like the url using
public methods. Unless the idea really is extending or or replacing
them, inheritance shouldn't be necessary (or probably advised). Well,
that is unless the whole point is to play around with Watir to learn
about it, more than get work done

On 10/24/07, Jes=FAs Gabriel y Gal=E1n <(E-Mail Removed)> wrote:
> On 10/23/07, Mario Ruiz <(E-Mail Removed)> wrote:
> > I'm trying to do this:
> > -----------------------------
> > require 'Watir'
> >
> > class Navigator<Watir::IE
> > def initialize(maxim)
> > @maxim=3Dmaxim
> > @iex=3DWatir::IE.new
> > end
> > def go(url)
> > @iex.goto(url)
> > if @maxim=3D=3D1 then
> > @iex.maximize()
> > end
> > end
> > end
> >
> > naveg=3DNavigator.new(1)
> > naveg.go("http://www.google.es")
> >
> > puts naveg.url
> > --------------------------------
> > I want my 'naveg' object can display the methods and properties of
> > wakir, url for example. What am I doing wrong?

>
> I think what you are doing wrong is having a Watir::IE object inside
> your Navigator class. If you inherit from IE you have all methods in
> IE available so you don't need to wrap another instance of IE inside.
> Can you try this (not tested):
>
> require 'Watir'
>
> class Navigator<Watir::IE
> def initialize(maxim)
> @maxim=3Dmaxim
> end
> def go(url)
> goto(url)
> if @maxim=3D=3D1 then
> maximize()
> end
> end
> end
>
> naveg=3DNavigator.new(1)
> naveg.go("http://www.google.es")
>
> puts naveg.url
>
> Hope this helps,
>
> Jesus.
>
>


 
Reply With Quote
 
Mario Ruiz
Guest
Posts: n/a
 
      10-24-2007
Now it works fine.

Thank you very much.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
inheritance, multiple inheritance and the weaklist and instance dictionaries Rouslan Korneychuk Python 8 02-10-2011 04:02 AM
Watir: How to return a Watir::IE object for an existing IE? Anukul Singhal Ruby 1 05-15-2008 04:57 PM
Private Inheritance and Publice Inheritance karthikbalaguru C++ 9 09-10-2007 01:05 PM
mul. inheritance & overloading operator new/delete solved by virtual base inheritance? cppsks C++ 0 10-27-2004 07:49 PM
Private access modifier and Inheritance (Inheritance implementation in Java) maxw_cc Java 1 12-21-2003 11:38 AM



Advertisments