lib/watir/browser.rb in commonwatir-1.6.2 vs lib/watir/browser.rb in commonwatir-1.6.5

- old
+ new

@@ -1,130 +1,149 @@ -# watir/browser -require 'watir/options' -module Watir - -=begin rdoc - -Watir is a family of open-source drivers for automating web browsers. You -can use it to write tests that are easy to read and maintain. - -Watir drives browsers the same way people do. It clicks links, fills in forms, -presses buttons. Watir also checks results, such as whether expected text -appears on a page. - -The Watir family currently includes support for Internet Explorer (on Windows), -Firefox (on Windows, Mac and Linux) and Safari (on Mac). - -Project Homepage: http://wtr.rubyforge.org - -This Browser module provides a generic interface -that tests can use to access any browser. The actual browser (and thus -the actual Watir driver) is determined at runtime based on configuration -settings. - - require 'watir' - browser = Watir::Browser.new - browser.goto 'http://google.com' - browser.text_field(:name, 'q').set 'pickaxe' - browser.button(:name, 'btnG').click - if browser.text.include? 'Programming Ruby' - puts 'Text was found' - else - puts 'Text was not found' - end - -A comprehensive summary of the Watir API can be found here -http://wiki.openqa.org/display/WTR/Methods+supported+by+Element - -There are two ways to configure the browser that will be used by your tests. - -One is to set the +watir_browser+ environment variable to +ie+ or +firefox+. -(How you do this depends on your platform.) - -The other is to create a file that looks like this. - - browser: ie - -And then to add this line to your script, after the require statement and -before you invoke Browser.new. - - Watir.options_file = 'path/to/the/file/you/just/created' - -=end rdoc - - module Browser - @@browser_classes = {} - @@sub_options = {} - @@default = nil - class << self - - # Create a new instance of a browser driver, as determined by the - # configuration settings. (Don't be fooled: this is not actually - # an instance of Browser class.) - def new - set_sub_options - klass.new - end - # Create a new instance as with #new and start the browser on the - # specified url. - def start url - set_sub_options - klass.start url - end - def klass - key = Watir.options[:browser] - eval @@browser_classes[key] # this triggers the autoload - end - private :klass - # Add support for the browser option, using the specified class, - # provided as a string. Optionally, additional options supported by - # the class can be specified as an array of symbols. Options specified - # by the user and included in this list will be passed (as a hash) to - # the set_options class method (if defined) before creating an instance. - def support hash_args - option = hash_args[:name] - class_string = hash_args[:class] - additional_options = hash_args[:options] - library = hash_args[:library] - gem = hash_args[:gem] || library - - @@browser_classes[option] = class_string - @@sub_options[option] = additional_options - - autoload class_string, library - activate_gem gem, option - end - def autoload class_string, library - mod, klass = class_string.split('::') - eval "module ::#{mod}; autoload :#{klass}, '#{library}'; end" - end - # Activate the gem (if installed). The default browser will be set - # to the first gem that activates. - def activate_gem gem_name, option - begin - gem gem_name - @@default ||= option - rescue Gem::LoadError - end - end - def default - @@default - end - # Specifies a default browser. Must be specified before options are parsed. - def default= option - @@default = option - end - def options - @@browser_classes.keys - end - def set_sub_options - return unless defined?(klass.set_options) - sub_options = @@sub_options[Watir.options[:browser]] - specified_options = Watir.options.reject {|k, v| !sub_options.include? k} - klass.set_options specified_options - end - end - end - -end - -require 'watir/browsers' \ No newline at end of file +# watir/browser +require 'watir/options' +module Watir + +=begin rdoc + +Watir is a family of open-source drivers for automating web browsers. You +can use it to write tests that are easy to read and maintain. + +Watir drives browsers the same way people do. It clicks links, fills in forms, +presses buttons. Watir also checks results, such as whether expected text +appears on a page. + +The Watir family currently includes support for Internet Explorer (on Windows), +Firefox (on Windows, Mac and Linux) and Safari (on Mac). + +Project Homepage: http://wtr.rubyforge.org + +This Browser module provides a generic interface +that tests can use to access any browser. The actual browser (and thus +the actual Watir driver) is determined at runtime based on configuration +settings. + + require 'watir' + browser = Watir::Browser.new + browser.goto 'http://google.com' + browser.text_field(:name, 'q').set 'pickaxe' + browser.button(:name, 'btnG').click + if browser.text.include? 'Programming Ruby' + puts 'Text was found' + else + puts 'Text was not found' + end + +A comprehensive summary of the Watir API can be found here +http://wiki.openqa.org/display/WTR/Methods+supported+by+Element + +There are two ways to configure the browser that will be used by your tests. + +One is to set the +watir_browser+ environment variable to +ie+ or +firefox+. +(How you do this depends on your platform.) + +The other is to create a file that looks like this. + + browser: ie + +And then to add this line to your script, after the require statement and +before you invoke Browser.new. + + Watir.options_file = 'path/to/the/file/you/just/created' + +=end rdoc + + module Browser + @@browser_classes = {} + @@sub_options = {} + @@default = nil + class << self + + # Create a new instance of a browser driver, as determined by the + # configuration settings. (Don't be fooled: this is not actually + # an instance of Browser class.) + def new + set_sub_options + klass.new + end + # Create a new instance as with #new and start the browser on the + # specified url. + def start url + set_sub_options + klass.start url + end + # Attach to an existing browser. + def attach(how, what) + set_sub_options + klass.attach(how, what) + end + def set_options options + return unless defined?(klass.set_options) + klass.set_options options + end + def options + return {} unless defined?(klass.options) + klass.options + end + + def klass + key = Watir.options[:browser] + eval @@browser_classes[key] # this triggers the autoload + end + private :klass + # Add support for the browser option, using the specified class, + # provided as a string. Optionally, additional options supported by + # the class can be specified as an array of symbols. Options specified + # by the user and included in this list will be passed (as a hash) to + # the set_options class method (if defined) before creating an instance. + def support hash_args + option = hash_args[:name] + class_string = hash_args[:class] + additional_options = hash_args[:options] + library = hash_args[:library] + gem = hash_args[:gem] || library + + @@browser_classes[option] = class_string + @@sub_options[option] = additional_options + + autoload class_string, library + activate_gem gem, option + end + + def default + @@default + end + # Specifies a default browser. Must be specified before options are parsed. + def default= option + @@default = option + end + # Returns the names of the browsers that are supported by this module. + # These are the options for 'watir_browser' (env var) or 'browser:' (yaml). + def browser_names + @@browser_classes.keys + end + + private + def autoload class_string, library + mod, klass = class_string.split('::') + eval "module ::#{mod}; autoload :#{klass}, '#{library}'; end" + end + # Activate the gem (if installed). The default browser will be set + # to the first gem that activates. + def activate_gem gem_name, option + begin + gem gem_name + @@default ||= option + rescue Gem::LoadError + end + end + def set_sub_options + sub_options = @@sub_options[Watir.options[:browser]] + return if sub_options.nil? + specified_options = Watir.options.reject {|k, v| !sub_options.include? k} + self.set_options specified_options + end + end + end + +end + +require 'watir/browsers'