Class: RWebSpec::WebDriver::WebBrowser
- Inherits:
-
Object
- Object
- RWebSpec::WebDriver::WebBrowser
- Includes:
- ElementLocator
- Defined in:
- lib/rwebspec-webdriver/web_browser.rb
Constant Summary
Constants included from ElementLocator
ElementLocator::BUTTON_VALID_TYPES, ElementLocator::CHECK_BOX_TYPES, ElementLocator::FILE_FIELD_TYPES, ElementLocator::HIDDEN_TYPES, ElementLocator::RADIO_TYPES, ElementLocator::TEXT_FILED_TYPES
Instance Attribute Summary collapse
-
#context ⇒ Object
Returns the value of attribute context.
Class Method Summary collapse
-
.attach_browser(how, what, options = {}) ⇒ Object
Attach to existing browser.
-
.close_all_browsers ⇒ Object
TODO determine browser type, check FireWatir support or not.
-
.is_windows? ⇒ Boolean
is it running in MS Windows platforms?.
-
.new_from_existing(underlying_browser, web_context = nil) ⇒ Object
for popup windows.
-
.reuse(base_url, options) ⇒ Object
TODO resuse not working yet.
Instance Method Summary collapse
-
#area(*args) ⇒ Object
Wrapp of Watir’s area to support Firefox and Watir.
-
#back ⇒ Object
(also: #go_back)
TODO can’t browse back if on invalid page.
- #base_url=(new_base_url) ⇒ Object
-
#begin_at(relative_url) ⇒ Object
Crahses where ssshtttp:///.
- #browser_opened? ⇒ Boolean
-
#check_checkbox(checkBoxName, values = nil) ⇒ Object
Check a checkbox Usage: check_checkbox(“agree”) check_checkbox(“agree”, “true”).
-
#clear_radio_option(radio_group, radio_option) ⇒ Object
(also: #clear_radio_button)
Clear a radio button Usage: click_radio_option(“country”, “Australia”).
-
#click_button_with_caption(caption, opts = {}) ⇒ Object
(also: #click_button, #click_button_with_text)
Click a button with caption.
-
#click_button_with_id(id, opts = {}) ⇒ Object
Click a button with give HTML id Usage: click_button_with_id(“btn_sumbit”).
-
#click_button_with_image_src_contains(image_filename) ⇒ Object
(also: #click_button_with_image)
Click image buttion with image source name.
-
#click_button_with_name(name, opts = {}) ⇒ Object
Click a button with give name Usage: click_button_with_name(“confirm”) click_button_with_name(“confirm”, :index => 2).
-
#click_button_with_value(value, opts = {}) ⇒ Object
click_button_with_caption(“Confirm payment”).
-
#click_link_with_id(link_id, opts = {}) ⇒ Object
links.
-
#click_link_with_text(link_text, opts = {}) ⇒ Object
(also: #click_link)
click_link_with_text(“Login”) click_link_with_text(“Show”, :index => 2).
-
#click_radio_option(radio_group, radio_option) ⇒ Object
(also: #click_radio_button)
Click a radio button Usage: click_radio_option(“country”, “Australia”).
-
#close_browser ⇒ Object
(also: #close)
Close the browser window.
- #contains_text(text) ⇒ Object
-
#current_url ⇒ Object
(also: #url)
current url.
-
#dump_response(stream = nil) ⇒ Object
— For deubgging —.
-
#element(how, what) ⇒ Object
This is the main method for accessing a generic element with a given attibute * how - symbol - how we access the element.
- #element_by_id(elem_id) ⇒ Object
- #element_source(elementId) ⇒ Object
- #element_value(elementId) ⇒ Object
-
#elements(how, what) ⇒ Object
this is the main method for accessing generic html elements by an attribute.
-
#enter_text_into_field_with_name(name, text) ⇒ Object
(also: #set_form_element, #enter_text)
text fields.
-
#expect_page(page_clazz, argument = nil) ⇒ Object
Verify the next page following an operation.
- #find_element(*args) ⇒ Object
- #find_elements(*args) ⇒ Object
-
#firefox ⇒ Object
return underlying firefox browser object, raise error if not running using Firefox.
- #forward ⇒ Object (also: #go_forward)
- #full_url(relative_url) ⇒ Object
-
#goto_page(page) ⇒ Object
Go to a page Usage: open_browser(“www.itest2.com” .… goto_page(“/purchase”) # full url => www.itest.com/purchase.
-
#goto_url(url) ⇒ Object
Go to a URL directly goto_url(“www.itest2.com/downloads”).
- #htmlunit ⇒ Object
-
#ie ⇒ Object
return underlying browser.
-
#initialize(base_url = nil, existing_browser = nil, options = {}) ⇒ WebBrowser
constructor
A new instance of WebBrowser.
- #initialize_chrome_browser(existing_browser, base_url, options) ⇒ Object
- #initialize_firefox_browser(existing_browser, base_url, options) ⇒ Object
- #initialize_htmlunit_browser(base_url, options) ⇒ Object
- #initialize_ie_browser(existing_browser, options) ⇒ Object
- #is_firefox? ⇒ Boolean
- #is_ie? ⇒ Boolean
-
#locate_input_element(how, what, types, value = nil) ⇒ Object
Returns the specified ole object for input elements on a web page.
-
#map(how, what = nil) ⇒ Object
This is the main method for accessing map tags - msdn.microsoft.com/workshop/author/dhtml/reference/objects/map.asp?frame=true * how - symbol - how we access the map, * what - string, integer or regular expression - what we are looking for,.
-
#method ⇒ Object
Delegate to WebDriver.
- #modal_dialog(how = nil, what = nil) ⇒ Object
-
#new_popup_window(options, browser = "ie") ⇒ Object
Attach a Watir::IE instance to a popup window.
-
#page_source ⇒ Object
(also: #html_body, #html)
return HTML of current web page.
- #page_title ⇒ Object
- #refresh ⇒ Object (also: #refresh_page)
-
#save_page(file_name = nil) ⇒ Object
Save current web page source to file usage: save_page(“/tmp/01.html”) save_page() => # will save to “20090830112200.html”.
- #select_file_for_upload(file_field, file_path) ⇒ Object
-
#select_option(selectName, text) ⇒ Object
Select a dropdown list by name Usage: select_option(“country”, “Australia”).
- #show_all_objects ⇒ Object
-
#start_clicker(button, waitTime = 9, user_input = nil) ⇒ Object
A Better Popup Handler using the latest Watir version.
- #start_window(url = nil) ⇒ Object
-
#submit(buttonName = nil) ⇒ Object
submit first submit button.
-
#text(squeeze_spaces = true) ⇒ Object
TODO return plain text of current web page.
-
#uncheck_checkbox(checkBoxName, values = nil) ⇒ Object
Check a checkbox Usage: uncheck_checkbox(“agree”) uncheck_checkbox(“agree”, “false”).
- #underlying_browser ⇒ Object
-
#wait_before_and_after ⇒ Object
A convenience method to wait at both ends of an operation for the browser to catch up.
-
#wait_for_browser ⇒ Object
Some browsers (i.e. IE) need to be waited on before more actions can be performed.
Methods included from ElementLocator
#attribute_expression, #button_elements, #check_box_elements, #equal_pair, #file_field_elements, #find_by_tag, #hidden_elements, #lhs_for, #radio_elements, #select_elements, #should_use_label_element?, #text_area_elements, #text_field_elements
Constructor Details
#initialize(base_url = nil, existing_browser = nil, options = {}) ⇒ WebBrowser
Returns a new instance of WebBrowser.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 24 def initialize(base_url = nil, existing_browser = nil, = {}) = {:speed => "zippy", :visible => true, :highlight_colour => 'yellow', :close_others => true } = .merge @context = Context.new base_url if base_url case RUBY_PLATFORM when /java/i initialize_celerity_browser(base_url, ) when /mswin|windows|mingw/i [:browser] ||= "ie" case [:browser].to_s.downcase when "firefox" initialize_firefox_browser(existing_browser, base_url, ) when "chrome" initialize_chrome_browser(existing_browser, base_url, ) when "ie" initialize_ie_browser(existing_browser, ) end else puts "Ruby Linux or Mac platform: firefox" [:browser] ||= "firefox" case [:browser].to_s when "firefox" initialize_firefox_browser(existing_browser, base_url, ) when "chrome" initialize_chrome_browser(existing_browser, base_url, ) end end end |
Instance Attribute Details
#context ⇒ Object
Returns the value of attribute context.
22 23 24 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 22 def context @context end |
Class Method Details
.attach_browser(how, what, options = {}) ⇒ Object
Attach to existing browser
Usage:
WebBrowser.attach_browser(:title, "iTest2")
WebBrowser.attach_browser(:url, "http://www.itest2.com")
WebBrowser.attach_browser(:url, "http://www.itest2.com", {:browser => "Firefox", :base_url => "http://www.itest2.com"})
WebBrowser.attach_browser(:title, /agileway\.com\.au\/attachment/) # regular expression
646 647 648 649 650 651 652 653 654 655 656 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 646 def self.attach_browser(how, what, ={}) = {:browser => "IE"} = .merge() site_context = Context.new([:base_url]) if [:base_url] if ([:browser].to_s == "firefox") ff = FireWatir::Firefox.attach(how, what) return WebBrowser.new_from_existing(ff, site_context) else return WebBrowser.new_from_existing(Watir::IE.attach(how, what), site_context) end end |
.close_all_browsers ⇒ Object
TODO determine browser type, check FireWatir support or not
309 310 311 312 313 314 315 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 309 def self.close_all_browsers if RUBY_PLATFORM.downcase.include?("mswin") Watir::IE.close_all else # raise "not supported in FireFox yet." end end |
.is_windows? ⇒ Boolean
is it running in MS Windows platforms?
744 745 746 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 744 def self.is_windows? RUBY_PLATFORM.downcase.include?("mswin") or RUBY_PLATFORM.downcase.include?("mingw") end |
.new_from_existing(underlying_browser, web_context = nil) ⇒ Object
for popup windows
130 131 132 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 130 def self.new_from_existing(, web_context = nil) return WebBrowser.new(web_context ? web_context.base_url : nil, , {:close_others => false}) end |
.reuse(base_url, options) ⇒ Object
TODO resuse not working yet
117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 117 def self.reuse(base_url, ) if self.is_windows? && $TESTWISE_BROWSER != "Firefox" Watir::IE.each do |browser_window| return WebBrowser.new(base_url, browser_window, ) end #puts "no browser instance found" WebBrowser.new(base_url, nil, ) else WebBrowser.new(base_url, nil, ) end end |
Instance Method Details
#area(*args) ⇒ Object
Wrapp of Watir’s area to support Firefox and Watir
Note: FireWatir does not support area directly, treat it as text_field
160 161 162 163 164 165 166 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 160 def area(* args) if is_firefox? text_field(* args) else @browser.send("area", * args) end end |
#back ⇒ Object Also known as: go_back
TODO can’t browse back if on invalid page
371 372 373 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 371 def back @browser.navigate.back end |
#base_url=(new_base_url) ⇒ Object
279 280 281 282 283 284 285 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 279 def base_url=(new_base_url) if @context @conext.base_url = new_base_url return end @context = Context.new base_url end |
#begin_at(relative_url) ⇒ Object
Crahses where ssshtttp:///
326 327 328 329 330 331 332 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 326 def begin_at(relative_url) if relative_url =~ /\s*^http/ @browser.navigate.to relative_url else @browser.navigate.to full_url(relative_url) end end |
#browser_opened? ⇒ Boolean
334 335 336 337 338 339 340 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 334 def browser_opened? begin @browser != nil rescue => e return false end end |
#check_checkbox(checkBoxName, values = nil) ⇒ Object
Check a checkbox Usage:
check_checkbox("agree")
check_checkbox("agree", "true")
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 550 def check_checkbox(checkBoxName, values=nil) if values values.class == Array ? arys = values : arys = [values] elements = find_elements(:name, checkBoxName) the_checkbox = elements[0] if elements.size == 1 if the_checkbox the_checkbox.click unless the_checkbox.selected? return end arys.each { |cbx_value| elements.each do |elem| elem.click if elem.attribute('value') == cbx_value && !the_checkbox.selected? end } else the_checkbox = find_element(:name, checkBoxName) the_checkbox.click unless the_checkbox.selected? end end |
#clear_radio_option(radio_group, radio_option) ⇒ Object Also known as:
Clear a radio button
Usage:
click_radio_option("country", "Australia")
609 610 611 612 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 609 def clear_radio_option(radio_group, radio_option) = find_element(:xpath, "//input[@type='radio' and @name='#{radio_group}' and @value='#{radio_option}']") .clear end |
#click_button_with_caption(caption, opts = {}) ⇒ Object Also known as: ,
Click a button with caption
TODO: Caption is same as value
Usage:
("Confirm payment")
463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 463 def (, opts={}) = = .select{|x| x.attribute('value') == } if .size > 0 if opts && opts[:index] puts "Call matching buttons: #{.inspect}" first_match = [opts[:index].to_i() - 1] first_match.click end = [0] .click else raise "No button with value: #{} found" end end |
#click_button_with_id(id, opts = {}) ⇒ Object
Click a button with give HTML id Usage:
("btn_sumbit")
445 446 447 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 445 def (id, opts = {}) find_element(:id, id).click end |
#click_button_with_image_src_contains(image_filename) ⇒ Object Also known as:
Click image buttion with image source name
For an image submit button <input name=“submit” type=“image” src=“/images/search_button.gif”>
("search_button.gif")
504 505 506 507 508 509 510 511 512 513 514 515 516 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 504 def (image_filename) = found = nil .select do |x| if x["src"] =~ /#{Regexp.escape(image_filename)}/ found = x break end end raise "not image button with src: #{image_filename} found" if found.nil? found.click end |
#click_button_with_name(name, opts = {}) ⇒ Object
Click a button with give name Usage:
("confirm")
("confirm", :index => 2)
453 454 455 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 453 def (name, opts={}) find_element(:name, name).click end |
#click_button_with_value(value, opts = {}) ⇒ Object
click_button_with_caption(“Confirm payment”)
486 487 488 489 490 491 492 493 494 495 496 497 498 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 486 def (value, opts={}) = if opts && opts[:index] .select{|x| x.attribute('value') == }[index] else .each do || if .attribute('value') == value then .click return end end end end |
#click_link_with_id(link_id, opts = {}) ⇒ Object
links
419 420 421 422 423 424 425 426 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 419 def click_link_with_id(link_id, opts = {}) if opts && opts[:index] elements = find_elements(:id, link_id) elements[opts[:index]-1].click else find_element(:id, link_id).click end end |
#click_link_with_text(link_text, opts = {}) ⇒ Object Also known as: click_link
click_link_with_text(“Login”) click_link_with_text(“Show”, :index => 2)
431 432 433 434 435 436 437 438 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 431 def click_link_with_text(link_text, opts = {}) if opts && opts[:index] elements = find_elements(:link_text, link_text) elements[opts[:index]-1].click else find_element(:link_text, link_text).click end end |
#click_radio_option(radio_group, radio_option) ⇒ Object Also known as:
Click a radio button
Usage:
click_radio_option("country", "Australia")
600 601 602 603 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 600 def click_radio_option(radio_group, radio_option) = find_element(:xpath, "//input[@type='radio' and @name='#{radio_group}' and @value='#{radio_option}']") .click end |
#close_browser ⇒ Object Also known as: close
Close the browser window. Useful for automated test suites to reduce test interaction.
302 303 304 305 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 302 def close_browser @browser.quit sleep 1 end |
#contains_text(text) ⇒ Object
240 241 242 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 240 def contains_text(text) @browser.contains_text(text); end |
#current_url ⇒ Object Also known as: url
current url
274 275 276 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 274 def current_url @browser.current_url end |
#dump_response(stream = nil) ⇒ Object
For deubgging
679 680 681 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 679 def dump_response(stream = nil) stream.nil? ? puts(page_source) : stream.puts(page_source) end |
#element(how, what) ⇒ Object
This is the main method for accessing a generic element with a given attibute
* how - symbol - how we access the element. Supports all values except :index and :xpath
* what - string, integer or regular expression - what we are looking for,
Valid values for ‘how’ are listed in the Watir Wiki - wiki.openqa.org/display/WTR/Methods+supported+by+Element
returns an Watir::Element object
Typical Usage
element(:class, /foo/) # access the first element with class 'foo'. We can use a string in place of the regular expression
element(:id, "11") # access the first element that matches an id
184 185 186 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 184 def element(how, what) return @browser.element(how, what) end |
#element_by_id(elem_id) ⇒ Object
615 616 617 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 615 def element_by_id(elem_id) @browser.find_element(:id, elem_id) end |
#element_source(elementId) ⇒ Object
623 624 625 626 627 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 623 def element_source(elementId) elem = element_by_id(elementId) assert_not_nil(elem, "HTML element: #{elementId} not exists") elem.innerHTML end |
#element_value(elementId) ⇒ Object
619 620 621 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 619 def element_value(elementId) find_element(:id, elementId).attribute('value') end |
#elements(how, what) ⇒ Object
this is the main method for accessing generic html elements by an attribute
Returns a HTMLElements object
Typical usage:
elements(:class, 'test').each { |l| puts l.to_s } # iterate through all elements of a given attribute
elements(:alt, 'foo')[1].to_s # get the first element of a given attribute
elements(:id, 'foo').length # show how many elements are foung in the collection
198 199 200 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 198 def elements(how, what) return @browser.elements(how, what) end |
#enter_text_into_field_with_name(name, text) ⇒ Object Also known as: set_form_element, enter_text
text fields
397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 397 def enter_text_into_field_with_name(name, text) the_element = find_element(:name, name) if the_element.tag_name == "input" || the_element.tag_name == "textarea" then the_element.clear the_element.send_keys(text) else elements = find_elements(:name, name) if elements.size == 1 then elements[0].send_keys(text) else element_set = elements.select {|x| x.tag_name == "textarea" || (x.tag_name == "input" && x.attribute("text")) } element_set[0].send_keys(text) end end return true end |
#expect_page(page_clazz, argument = nil) ⇒ Object
Verify the next page following an operation.
Typical usage:
browser.expect_page HomePage
735 736 737 738 739 740 741 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 735 def expect_page(page_clazz, argument = nil) if argument page_clazz.new(self, argument) else page_clazz.new(self) end end |
#find_element(*args) ⇒ Object
134 135 136 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 134 def find_element(* args) @browser.send("find_element", *args) end |
#find_elements(*args) ⇒ Object
138 139 140 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 138 def find_elements(* args) @browser.send("find_elements", *args) end |
#firefox ⇒ Object
return underlying firefox browser object, raise error if not running using Firefox
711 712 713 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 711 def firefox is_firefox? ? @browser : nil; end |
#forward ⇒ Object Also known as: go_forward
365 366 367 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 365 def forward @browser.navigate().forward end |
#full_url(relative_url) ⇒ Object
317 318 319 320 321 322 323 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 317 def full_url(relative_url) if @context && @context.base_url @context.base_url + relative_url else relative_url end end |
#goto_page(page) ⇒ Object
Go to a page
Usage:
open_browser("http://www.itest2.com"
....
goto_page("/purchase") # full url => http://www.itest.com/purchase
386 387 388 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 386 def goto_page(page) goto_url full_url(page); end |
#goto_url(url) ⇒ Object
Go to a URL directly
goto_url("http://www.itest2.com/downloads")
392 393 394 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 392 def goto_url(url) @browser.navigate.to url end |
#htmlunit ⇒ Object
715 716 717 718 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 715 def htmlunit raise "can't call this as it is configured to use Celerity" unless RUBY_PLATFORM =~ /java/ @browser end |
#ie ⇒ Object
return underlying browser
706 707 708 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 706 def ie @browser.class == "internet_explorer" ? @browser : nil; end |
#initialize_chrome_browser(existing_browser, base_url, options) ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 69 def initialize_chrome_browser(existing_browser, base_url, ) if existing_browser then @browser = existing_browser return end @browser = Selenium::WebDriver.for :chrome @browser.navigate.to base_url end |
#initialize_firefox_browser(existing_browser, base_url, options) ⇒ Object
59 60 61 62 63 64 65 66 67 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 59 def initialize_firefox_browser(existing_browser, base_url, ) if existing_browser then @browser = existing_browser return end @browser = Selenium::WebDriver.for :firefox @browser.navigate.to base_url end |
#initialize_htmlunit_browser(base_url, options) ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 79 def initialize_htmlunit_browser(base_url, ) # default_celerity_options = {:proxy => nil, :browser => :firefox, :resynchronize => true, :log_level => :off} # options = default_celerity_options.merge options # options.each { |k, v| options.delete(k) unless default_celerity_options.keys.include?(k) } @browser = Selenium::WebDriver.for :htmlunit @browser.navigate.to base_url end |
#initialize_ie_browser(existing_browser, options) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 87 def initialize_ie_browser(existing_browser, ) if existing_browser then @browser = existing_browser if $TESTWISE_EMULATE_TYPING && $TESTWISE_TYPING_SPEED then @browser.set_slow_speed if $TESTWISE_TYPING_SPEED == 'slow' @browser.set_fast_speed if $TESTWISE_TYPING_SPEED == 'fast' else @browser.speed = :zippy end return end @browser = Selenium::WebDriver.for :ie # if $TESTWISE_EMULATE_TYPING && $TESTWISE_TYPING_SPEED then # @browser.set_slow_speed if $TESTWISE_TYPING_SPEED == 'slow' # @browser.set_fast_speed if $TESTWISE_TYPING_SPEED == 'fast' # else # @browser.speed = :zippy # end # @browser.activeObjectHighLightColor = options[:highlight_colour] # @browser.visible = options[:visible] unless $HIDE_IE # #NOTE: close_others fails # if RUBY_VERSION =~ /^1\.8/ && options[:close_others] then # @browser.close_others # else # puts "close other browser instances not working yet in Ruby 1.9.1 version of Watir" # end end |
#is_firefox? ⇒ Boolean
296 297 298 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 296 def is_firefox? @browser.browser.to_s == "firefox" end |
#is_ie? ⇒ Boolean
291 292 293 294 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 291 def is_ie? puts @browser.browser.to_s @browser.browser.to_s == "ie" end |
#locate_input_element(how, what, types, value = nil) ⇒ Object
Returns the specified ole object for input elements on a web page.
This method is used internally by Watir and should not be used externally. It cannot be marked as private because of the way mixins and inheritance work in watir
* how - symbol - the way we look for the object. Supported values are
- :name
- :id
- :index
- :value etc
* what - string that we are looking for, ex. the name, or id tag attribute or index of the object we are looking for.
* types - what object types we will look at.
* value - used for objects that have one name, but many values. ex. radio lists and checkboxes
218 219 220 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 218 def locate_input_element(how, what, types, value=nil) @browser.locate_input_element(how, what, types, value) end |
#map(how, what = nil) ⇒ Object
This is the main method for accessing map tags - msdn.microsoft.com/workshop/author/dhtml/reference/objects/map.asp?frame=true
* how - symbol - how we access the map,
* what - string, integer or regular expression - what we are looking for,
Valid values for ‘how’ are listed in the Watir Wiki - wiki.openqa.org/display/WTR/Methods+supported+by+Element
returns a map object
Typical Usage
map(:id, /list/) # access the first map that matches list.
map(:index,2) # access the second map on the page
map(:title, "A Picture") # access a map using the tooltip text. See http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/title_1.asp?frame=true
236 237 238 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 236 def map(how, what=nil) @browser.map(how, what) end |
#method ⇒ Object
Delegate to WebDriver
145 146 147 148 149 150 151 152 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 145 [:button, :cell, :checkbox, :div, :form, :frame, :h1, :h2, :h3, :h4, :h5, :h6, :hidden, :image, :li, :link, :map, :pre, :row, :radio, :select_list, :span, :table, :text_field, :paragraph, :file_field, :label].each do |method| tag_name = method define_method method do |* args| if args.size == 2 then find_element(args[0].to_sym, args[1]) end end end |
#modal_dialog(how = nil, what = nil) ⇒ Object
168 169 170 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 168 def modal_dialog(how=nil, what=nil) @browser.modal_dialog(how, what) end |
#new_popup_window(options, browser = "ie") ⇒ Object
Attach a Watir::IE instance to a popup window.
Typical usage
new_popup_window(:url => "http://www.google.com/a.pdf")
662 663 664 665 666 667 668 669 670 671 672 673 674 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 662 def new_popup_window(, browser = "ie") if is_firefox? raise "not implemented" else if [:url] Watir::IE.attach(:url, [:url]) elsif [:title] Watir::IE.attach(:title, [:title]) else raise 'Please specify title or url of new pop up window' end end end |
#page_source ⇒ Object Also known as: html_body, html
return HTML of current web page
245 246 247 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 245 def page_source @browser.page_source end |
#page_title ⇒ Object
251 252 253 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 251 def page_title @browser.title end |
#refresh ⇒ Object Also known as: refresh_page
376 377 378 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 376 def refresh @browser.navigate().refresh end |
#save_page(file_name = nil) ⇒ Object
Save current web page source to file
usage:
save_page("/tmp/01.html")
save_page() => # will save to "20090830112200.html"
724 725 726 727 728 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 724 def save_page(file_name = nil) file_name ||= Time.now.strftime("%Y%m%d%H%M%S") + ".html" puts "about to save page: #{File.(file_name)}" if $DEBUG File.open(file_name, "w").puts page_source end |
#select_file_for_upload(file_field, file_path) ⇒ Object
629 630 631 632 633 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 629 def select_file_for_upload(file_field, file_path) is_on_windows = RUBY_PLATFORM.downcase.include?("mingw") || RUBY_PLATFORM.downcase.include?("mswin") normalized_file_path = is_on_windows ? file_path.gsub("/", "\\") : file_path file_field(:name, file_field).set(normalized_file_path) end |
#select_option(selectName, text) ⇒ Object
Select a dropdown list by name Usage:
select_option("country", "Australia")
522 523 524 525 526 527 528 529 530 531 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 522 def select_option(selectName, text) select_box = find_element(:name, selectName) = select_box.find_elements(:tag_name, "option") .each do |opt| # puts opt.methods opt.click if text == opt.text end # select_list(:name, selectName).select(option) end |
#show_all_objects ⇒ Object
202 203 204 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 202 def show_all_objects @browser.show_all_objects end |
#start_clicker(button, waitTime = 9, user_input = nil) ⇒ Object
A Better Popup Handler using the latest Watir version. Posted by [email protected]
wiki.openqa.org/display/WTR/FAQ#FAQ-HowdoIattachtoapopupwindow%3F
687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 687 def start_clicker(, waitTime= 9, user_input=nil) # get a handle if one exists hwnd = @browser.enabled_popup(waitTime) if (hwnd) # yes there is a popup w = WinClicker.new if (user_input) w.setTextValueForFileNameField(hwnd, "#{user_input}") end # I put this in to see the text being input it is not necessary to work sleep 3 # "OK" or whatever the name on the button is w.clickWindowsButton_hwnd(hwnd, "#{}") # # this is just cleanup w = nil end end |
#start_window(url = nil) ⇒ Object
635 636 637 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 635 def start_window(url = nil) @browser.start_window(url); end |
#submit(buttonName = nil) ⇒ Object
submit first submit button
534 535 536 537 538 539 540 541 542 543 544 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 534 def submit( = nil) if (.nil?) then .each { || next if .type != 'submit' .click return } else () end end |
#text(squeeze_spaces = true) ⇒ Object
TODO return plain text of current web page
256 257 258 259 260 261 262 263 264 265 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 256 def text(squeeze_spaces = true) begin page_text_string = Sanitize.clean(html) page_text_string = page_text_string.squeeze(" ") if squeeze_spaces# remove duplicated (spaces) return page_text_string rescue => e puts "failed to santize html source => text, #{e}" end # @browser.text end |
#uncheck_checkbox(checkBoxName, values = nil) ⇒ Object
Check a checkbox Usage:
uncheck_checkbox("agree")
uncheck_checkbox("agree", "false")
575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 575 def uncheck_checkbox(checkBoxName, values = nil) if values values.class == Array ? arys = values : arys = [values] elements = find_elements(:name, checkBoxName) the_checkbox = elements[0] if elements.size == 1 if the_checkbox the_checkbox.click if the_checkbox.selected? return end arys.each { |cbx_value| elements.each do |elem| elem.click if elem.attribute('value') == cbx_value && the_checkbox && the_checkbox.selected? end } else the_checkbox = find_element(:name, checkBoxName) the_checkbox.click if the_checkbox.selected? end end |
#underlying_browser ⇒ Object
287 288 289 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 287 def @browser end |
#wait_before_and_after ⇒ Object
A convenience method to wait at both ends of an operation for the browser to catch up.
352 353 354 355 356 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 352 def wait_before_and_after wait_for_browser yield wait_for_browser end |
#wait_for_browser ⇒ Object
Some browsers (i.e. IE) need to be waited on before more actions can be performed. Most action methods in Watir::Simple already call this before and after.
345 346 347 |
# File 'lib/rwebspec-webdriver/web_browser.rb', line 345 def wait_for_browser # NOTE: no need any more end |