= RAutomation

* Web: http://www.github.com/jarmo/RAutomation
* Author: Jarmo Pertman (mailto:jarmo.p[at]gmail.com)

{<img alt='Click here to lend your support to: RAutomation and make a donation at www.pledgie.com !' src='https://www.pledgie.com/campaigns/16196.png?skin_name=chrome' />}[https://www.pledgie.com/campaigns/16196]

RAutomation is a small and easy to use library for helping out to automate windows and their controls
for automated testing.

RAutomation provides:
* Easy to use and user-friendly API (inspired by Watir http://www.watir.com)
* Cross-platform compatibility
* Easy extensibility - with small scripting effort it's possible to add support for not yet 
  supported platforms or technologies

== USAGE

    require "rautomation"
    
    window = RAutomation::Window.new(:title => /part of the title/i)
    window.exists? # => true
    
    window.title # => "blah blah part Of the title blah"
    window.text # => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultricies..."
    
    window.text_field(:class => "Edit", :index => 0).set "hello, world!"
    button = window.button(:value => "&Save")
    button.exists? # => true
    button.click
    
    all_windows = RAutomation::Window.windows
    all_windows.each {|window| puts window.hwnd}
    
    window = RAutomation::Window.new(:title => /part of the title/i)
    windows = window.windows
    puts windows.size # => 2
    windows.map &:title # => ["part of the title 1", "part of the title 2"]
    
    window.windows(:title => /part of other title/i) # => all windows with matching specified title
    
    window.buttons.each {|button| puts button.value}
    window.buttons(:value => /some value/i).each {|button| puts button.value}
    
    window2 = RAutomation::Window.new(:title => "Other Title", :adapter => :autoit) # use AutoIt adapter
    # use adapter's (in this case AutoIt's) internal methods not part of the public API directly
    window2.WinClose("[TITLE:Other Title]")

Check out the documentation for other possible usages!

== INSTALL

=== Windows

    gem install rautomation

Available adapters:
* :win_32 - uses Windows API directly with FFI (default)
* :autoit - uses AutoIt for automation
* :ms_uia - an experimental adapter

When using AutoIt adapter:
You might need administrative privileges if running for the first time and you haven't installed AutoIt before!

=== Linux

Feel yourself at home on Linux and know how to automate windows and their controls? I would be happy if you'd contact me
about that matter - or even better, follow the instructions at "How to create a new adapter?" 

=== OS X

Feel yourself at home on OS X and know how to automate windows and their controls? I would be happy if you'd contact me
about that matter - or even better, follow the instructions at "How to create a new adapter?"

=== Others

Feel yourself at home on some operating system not listed in here and know how to automate windows and their controls?
Does Ruby also work on that operating system? I would be happy if you'd contact me
about that matter - or even better, follow the instructions at "How to create a new adapter?"

== How to create a new adapter?

1. Fork the project.
2. Create entry point file to lib/rautomation/adapter which should load all adapter specific files.
3. Add `autoload` statement into lib/rautomation/adapter/helper.rb for that file.
4. Create a directory for your adapter's specific code into lib/rautomation/adapter
5. Copy button.rb, text_field.rb and window.rb from some of the existing adapter's directory.
6. Add spec data for your adapter into spec/spec_helper DATA constant.
7. Use environment variable __RAUTOMATION_ADAPTER__ to point to that adapter.
8. Start coding and spec-ing until as much of possible of the public API is satisfied.
9. Make me a pull request.

Don't forget to fix the documentation for that adapter also!

In case of any problems, feel free to contact me.

== Contributors

* Stephan Schwab - http://github.com/snscaimito
* Eric Kessler - http://github.com/enkessler

== Note on Patches/Pull Requests

* Fork the project.
* Make your feature addition or bug fix.
* Add tests for it. This is important so I don't break it in a
  future version unintentionally.
* Commit, do not mess with rakefile, version, or history.
  
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
* Send me a pull request. Bonus points for topic branches.

== Copyright

Copyright (c) 2010-2012 Jarmo Pertman. See LICENSE for details.