Sep
30
2008
0

Q. How do I use ci_reporter in my Test::Unit scripts?

A. Use a ci_reporter gem …
To install the ci_reporter gem on windows:

gem install ci_reporter

If you’re using Test::Unit, ensure the ci/reporter/rake/test_unit_loader.rb file is loaded before the test is run. If you’re using RSpec, you‘ll need to pass the following arguments to the spec command:

 --require GEM_PATH/lib/ci/reporter/rake/rspec_loader
 --format CI::Reporter::RSpec

You may also want to set the output directory as demonstrated by setting the CI_REPORTS environment variable.

require 'test/unit'
require 'ci/reporter/rake/test_unit_loader.rb'
require 'watir'
ENV["CI_REPORTS"] = 'C:/temp/'
Written by Tim Koopmans in: watir | Tags: ,
Sep
30
2008
0

Q. How do I pass command line arguments to Test::Unit?

A. Use the — argument to stop processing Test::Unit specific arguments …
Module Test::Unit has its own command line arguments as specified by the following:

~/just_add_watir $>ruby test_suite.rb --help
Test::Unit automatic runner.
Usage: test/unit/graph_test.rb [options] [-- untouched arguments]
 
    -r, --runner=RUNNER              Use the given RUNNER.
                                     (c[onsole], f[ox], g[tk], g[tk]2, t[k])
    -n, --name=NAME                  Runs tests matching NAME.
                                     (patterns may be used).
    -t, --testcase=TESTCASE          Runs tests in TestCases matching TESTCASE.
                                     (patterns may be used).
    -v, --verbose=[LEVEL]            Set the output level (default is verbose).
                                     (s[ilent], p[rogress], n[ormal], v[erbose])        
     --                           Stop processing options so that the
                                     remaining options will be passed to the
                                     test.
    -h, --help                       Display this help.
 
Deprecated options:
        --console                    Console runner (use --runner).
        --gtk                        GTK runner (use --runner).
        --fox                        Fox runner (use --runner).

Example watir:

def test_0021
  # need to call test unit with -- argument
  puts "argument 1 is: ",ARGV[0]
end
Written by Tim Koopmans in: watir | Tags:
Sep
30
2008
0

Q. How do I execute arbitrary javascript?

A. Use the .goto method to call the javascript …
Example html:

<HTML lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
  <BODY scroll="no">
    <script type="text/javascript" charset="utf-8">
      function openWin(i){
         alert(i);
      }
    </script>
    <DIV id="menuLayer1">
      <DIV id="menuLite1">
        <DIV id="menuFg1"> 
          <DIV id="menuItem1" mmaction="location='javascript:openWin(2);'" zIndex="1"> 
            <DIV id="menuItemText1"> 
              <DIV id="menuItemShim1"> 
                <DIV align="left"> 
                  just_add_watir 
                </DIV> 
              </DIV> 
            </DIV> 
          </DIV> 
        </DIV>
      </DIV>
    </DIV>
  </BODY>
</HTML>

Example watir:

@b.goto('http://justaddwatir.com/watir/test_html/tc_0001_0100/test_0020.html')
@b.div(:id, "menuItem1").flash 
@b.goto("javascript:openWin(2)")
Written by Tim Koopmans in: watir | Tags: ,
Sep
26
2008
0

Q. How do I learn all the objects on a page? [firewatir]

Sometimes you might wish to implement a QTP-like ‘object repository’. I’ve had most success implementing this via Ruby modules.

To ‘learn’ all the objects on a page using firewatir you can use a simple script like this:

require 'rubygems'
require 'firewatir'
 
class NilClass
  def length
    0
  end
end
 
class DiscoverObjects
  include FireWatir
 
  def initialize(url)
    if url 
      # attach to specific url
      @b = Firefox.start(url)
    else
      # attach to existing window
      @b = Firefox.new
    end
  end  
 
  def all
    @objects = {}
    [:links, :text_fields, :buttons, :select_lists].each do |type|
      @b.send(type).each do |element|
        @objects[element] = {}
        @objects[element][:type] = type.to_s[0..-2] 
        # omitted :href, :url, :class
        [:id, :name, :value, :text, :index, :xpath, :title, :action, :src, :for].each do |attrib|
          value = element.send(attrib)
          @objects[element][attrib] = value unless value.empty?
        end
      end
    end
  end
 
  def print_objects
    puts "module #{@b.title.to_s.gsub(/[^\d\w]/,'').capitalize}"
    puts "# Objects learned from: #{@b.url}\n# #{Time.now}"
 
    @objects.each do |key,val|
      val.each do |k,v|
          unless k.to_s =~ /type/
            method_name = "#{val[:type]}_#{k}_#{v.to_s.gsub(/[^\d\w]/,'_').downcase}"
            puts "\tdef #{method_name.gsub('__','_').gsub(/_$/,'')}"
            puts "\t\treturn @b.#{val[:type]}(:#{k}, \"#{v}\")\n\tend\n\n"
          end
      end
    end
    puts "end"
  end
 
end
 
url = ARGV[0] 
discover = DiscoverObjects.new(url)
discover.all
discover.print_objects

Which will produce results like this:

module Firefoxwebbrowserfastermoresecurecustomizable
# Objects learned from: http://www.mozilla.com/en-US/firefox/
# Sat Sep 27 07:40:08 +1000 2008
	def link_text_qmo
		return @b.link(:text, "QMO")
	end
 
	def link_text_press_center
		return @b.link(:text, "Press Center")
	end
 
	def link_text_other_systems_and_languages
		return @b.link(:text, "Other Systems and Languages")
	end
end

Feel free to modify to suit (for watir or the like). I develop on a Mac, so firewatir is easiest for me. The manual way is to just use the IE Developer Toolbar or Firebug depending on your platform.

Written by Tim Koopmans in: firewatir | Tags: , ,

Powered by WordPress | Aeros Theme | TheBuckmaker.com WordPress Themes