Wednesday, July 16, 2008

method_missing': unknown property or method `document' (WIN32OLERuntimeError)

Symptom:

while running the test case we are getting the following error.
D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/ie.rb:447:in `method_missing': unknown property or method `document' (WIN32OLERuntimeError)
    HRESULT error code:0x800706ba
      The RPC server is unavailable.    from D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/ie.rb:447:in `document'
        from D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/locator.rb:31:in `each_element'
        from D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/locator.rb:40:in `locate'
        from D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/container.rb:740:in `locate_tagged_element'
        from D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/link.rb:24:in `locate'
        from D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/element.rb:53:in `assert_exists'
        from (eval):2:in `href'
        from D:/Installations/Ruby/Projects/Learning/Create_Company_Order_Services/order_service.rb:50
        from D:/Installations/Ruby/lib/ruby/gems/1.8/gems/watir-1.5.6/./watir/ie.rb:447:in `each_with_index'
        from D:/Installations/Ruby/Projects/Learning/Create_Company_Order_Services/order_service.rb:46:in `each'
        from D:/Installations/Ruby/Projects/Learning/Create_Company_Order_Services/order_service.rb:46:in `each_with_index'
        from D:/Installations/Ruby/Projects/Learning/Create_Company_Order_Services/order_service.rb:46
        from D:/Installations/Ruby/Projects/Learning/Create_Company_Order_Services/order_service.rb:19:in `each'
        from D:/Installations/Ruby/Projects/Learning/Create_Company_Order_Services/order_service.rb:19



Solution:
This error is usually caused by IE being closed before watir has finished with it - Im assuming that's not happening here though.


Tuesday, July 15, 2008

How do I take screenshots and append to a Word file?



require 'watir'
   require 'win32ole'
   @@word=WIN32OLE.new('Word.Application')
   @@word.Documents.Add()
   def take_a_screenshot(url)
    @autoit = WIN32OLE.new("AutoItX3.Control")
    browser = Watir::IE.new
    browser.bring_to_front
    browser.goto(url)
    browser.maximize
    @autoit.Send("{PRINTSCREEN}")
    browser.close
    @@word.Selection.Paste
    @autoit.Send("{ENTER}")
  end
  
 def save_file
  @@word.ActiveDocument.SaveAs('C:\screenshots.doc')
  @@word.ActiveDocument.close
  @@word.Quit
 end

 take_a_screenshot('http://www.agiletester.co.uk')
 take_a_screenshot('http://www.fsf.org/')
 save_file


How do I use variables with regular expressions?

How do I use variables with regular expressions?

Originally from this thread.

In order to use regular expressions with variables, you need to build your string using the Regexp.new( 'pattern' [, options]) syntax.

# a is a string
irb(main):001:0> a = "foofar"
=> "foofar"

# create a new regular expression, b, from the string in a
# this is the same as writing b = Regexp.new "foofar"
irb(main):002:0> b = Regexp.new a
=> /foofar/

# obtain the string between the / characters
irb(main):003:0> b.source
=> "foofar"

# the regular expression itself
irb(main):004:0> b
=> /foofar/

# a string representation of the regexp as you would expect to see it in code
irb(main):005:0> b.inspect
=> "/foofar/"

# a different string representation of the regexp
irb(main):006:0> b.to_s
=> "(?-mix:foofar)"

# additional examples
irb(main):001:0> var = 'today'
=> "today"

irb(main):002:0> my_string = 'here today gone tomorrow'
=> "here today gone tomorrow"

irb(main):003:0> b = Regexp.new var
=> /today/

# note that a regular expression match returns nil if not found
# and a number if successful indicating the position in the string
# where the match was found
irb(main):004:0> my_string =~ b
=> 5

irb(main):005:0> var1 = 'tom'
=> "tom"

irb(main):006:0> c = Regexp.new var1 + 'orrow'
=> /tomorrow/

irb(main):007:0> my_string =~ c
=> 16

Saturday, July 12, 2008

Library of Functions

More information is available at http://www.rubycentral.com/book/

Sample is
Create a file called file call_me.rb that contains

def do_something(argument)
  # do something
end

Create file call_another_file.rb that contains

require "call_me" # this includes call_me.rb
do_something(argument) # this calls method do_something

Tuesday, July 1, 2008

Watir : Methods supported by Element

Methods Supported by Element

The HTML Elements that are currently supported include:

button <input> tags with type=button, submit, image or reset
radio <input> tags with the type=radio; known as radio buttons
check_box <input> tags with type=checkbox
text_field <input> tags with the type=text (single-line), type=textarea (multi-line), and type=password
hidden <input> tags with type=hidden
select_list <select> tags, known as drop-downs or drop-down lists
label <label> tags (including "for" attribute)
span <span> tags
div <div> tags
p <p> (paragraph) tags
link <a> (anchor) tags
table <table> tags, including row and cell methods for accessing nested elements
image <img> tags
form <form> tags
frame frames, including both the <frame> elements and the corresponding pages
map <map> tags
area <area> tags
li <li> tags
h1 - h6 <h1>, <h2>, <h3>, <h4>, <h5>, <h6> tags

The ways ("How"s) that are available to identify an html object depend upon the object type, but include:

:id Used to find an element that has an "id=" attribute. Since each id should be unique, according to the XHTML specification, this is recommended as the most reliable method to find an object. *
:name Used to find an element that has a "name=" attribute. This is useful for older versions of HTML, but "name" is deprecated in XHTML. *
:value Used to find a text field with a given default value, or a button with a given caption, or a text field
:text Used for links, spans, divs and other element that contain text.
:index Used to find the nth element of the specified type on a page. For example, button(:index, 2) finds the second button. Current versions of WATIR use 1-based indexing, but future versions will use 0-based indexing.
:class Used for an element that has a "class=" attribute.
:title Used for an element that has a "title=" attribute.
:xpath Finds the item using xpath query.
:method Used only for forms, the method attribute of a form is either GET or POST.
:action Used only for form elements, specifies the URL where the form is to be submitted.
:href Used to identify a link by its "href=" attribute.
:src Used to identify an image by its URL.

* :id and :name are the quickest of these to process, and so should be used when possible to speed up scripts.

Supported Methods by Element

  :id :name :value :text :caption :index :class :xpath :title :method :action :href :src :for multiple attribute support?
button
radio
check_box
text_field
hidden
select_list
label
span
div
p
link
table
image
form
frame
map
area
li
h1 - h6