class PageObject::Platforms::SeleniumWebDriver::PageObject
Selenium implementation of the page object platform driver. You should not use the class directly. Instead you should include the PageObject
module in your page object and use the methods dynamically added from the PageObject::Accessors
module.
Public Class Methods
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 15 def initialize(browser) @browser = browser end
Public Instance Methods
platform method to handle an alert popup See PageObject#alert
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 72 def alert(frame=nil, &block) yield begin alert = @browser.switch_to.alert value = alert.text alert.accept rescue Selenium::WebDriver::Error::NoAlertPresentError end value end
platform method to retrieve an area element
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 922 def area_for(identifier) find_selenium_element(identifier, Elements::Area, 'area') end
platform method to return an array of area elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 929 def areas_for(identifier) find_selenium_elements(identifier, Elements::Area, 'area') end
platform method to handle attaching to a running window See PageObject#attach_to_window
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 122 def attach_to_window(identifier, &block) value = identifier.values.first key = identifier.keys.first handles = @browser.window_handles handles.each do |handle| @browser.switch_to.window handle if (key == :title and value == @browser.title) or (key == :url and @browser.current_url.include?(value)) return @browser.switch_to.window handle, &block end end end
platform method to retrieve an audio element
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 950 def audio_for(identifier) find_selenium_element(identifier, Elements::Audio, 'audio') end
platform method to return an array of audio elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 957 def audios_for(identifier) find_selenium_elements(identifier, Elements::Audio, 'audio') end
platform method to go back to the previous page See PageObject#back
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 177 def back @browser.navigate.back end
platform method to retrieve a canvas element
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 936 def canvas_for(identifier) find_selenium_element(identifier, Elements::Canvas, 'canvas') end
platform method to return an array of canvas elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 943 def canvass_for(identifier) find_selenium_elements(identifier, Elements::Canvas, 'canvas') end
platform method to retrieve a table cell element See PageObject::Accessors#cell
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 567 def cell_for(identifier) find_selenium_element(identifier, Elements::TableCell, 'td') end
platform method to retrieve the text from a table cell See PageObject::Accessors#cell
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 557 def cell_text_for(identifier) process_selenium_call(identifier, Elements::TableCell, 'td') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all table cell elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 574 def cells_for(identifier) find_selenium_elements(identifier, Elements::TableCell, 'td') end
platform method to check a checkbox See PageObject::Accessors#checkbox
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 377 def check_checkbox(identifier) process_selenium_call(identifier, Elements::CheckBox, 'input', :type => 'checkbox') do |how, what| @browser.find_element(how, what).click unless @browser.find_element(how, what).selected? end end
platform method to determine if a checkbox is checked See PageObject::Accessors#checkbox
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 397 def checkbox_checked?(identifier) process_selenium_call(identifier, Elements::CheckBox, 'input', :type => 'checkbox') do |how, what| @browser.find_element(how, what).selected? end end
platform method to return a PageObject::Elements::CheckBox
element See PageObject::Accessors#checkbox
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 407 def checkbox_for(identifier) find_selenium_element(identifier, Elements::CheckBox, 'input', :type => 'checkbox') end
platform method to retrieve all checkbox elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 414 def checkboxs_for(identifier) find_selenium_elements(identifier, Elements::CheckBox, 'input', :type => 'checkbox') end
platform method to click on an area
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 913 def click_area_for(identifier) process_selenium_call(identifier, Elements::Area, 'area') do |how, what| @browser.find_element(how, what).click end end
platform method to click a link See PageObject::Accessors#link
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 352 def click_link_for(identifier) process_selenium_call(identifier, Elements::Link, 'a') do |how, what| @browser.find_element(how, what).click end end
platform method to handle a confirm popup See PageObject#confirm
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 87 def confirm(response, frame=nil, &block) yield begin alert = @browser.switch_to.alert value = alert.text response ? alert.accept : alert.dismiss rescue Selenium::WebDriver::Error::NoAlertPresentError end value end
platform method to get the current url See PageObject#current_url
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 31 def current_url @browser.current_url end
platform method to return a PageObject::Elements::Div
element See PageObject::Accessors#div
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 467 def div_for(identifier) find_selenium_element(identifier, Elements::Div, 'div') end
platform method to return the text for a div See PageObject::Accessors#div
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 457 def div_text_for(identifier) process_selenium_call(identifier, Elements::Div, 'div') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all div elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 474 def divs_for(identifier) find_selenium_elements(identifier, Elements::Div, 'div') end
platform method to retrieve a generic element See PageObject::Accessors#element
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 979 def element_for(tag, identifier) find_selenium_element(identifier, Elements::Element, tag.to_s) end
find the element that has focus
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 138 def element_with_focus element = @browser.execute_script("return document.activeElement") type = element.attribute(:type).to_s.downcase if element.tag_name.to_sym == :input cls = ::PageObject::Elements.element_class_for(element.tag_name, type) cls.new(element, :platform => :selenium_webdriver) end
platform method to retrieve a collection of generic elements See PageObject::Accessors#elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 987 def elements_for(tag, identifier) find_selenium_elements(identifier, Elements::Element, tag.to_s) end
platform method to execute javascript on the browser See PageObject#execute_script
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 114 def execute_script(script, *args) @browser.execute_script(script, *args) end
platform method to retrieve a file_field element See PageObject::Accessors#file_field
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 899 def file_field_for(identifier) find_selenium_element(identifier, Elements::FileField, 'input', :type => 'file') end
platform method to set the file on a file_field element See PageObject::Accessors#file_field
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 889 def file_field_value_set(identifier, value) process_selenium_call(identifier, Elements::FileField, 'input', :type => 'file') do |how, what| @browser.find_element(how, what).send_keys(value) end end
platform method to return an array of file field elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 906 def file_fields_for(identifier) find_selenium_elements(identifier, Elements::FileField, 'input', :type => 'file') end
platform method to retrieve a form element See PageObject::Accessors#form
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 597 def form_for(identifier) find_selenium_element(identifier, Elements::Form, 'form') end
platform method to retrieve all forms
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 604 def forms_for(identifier) find_selenium_elements(identifier, Elements::Form, 'form') end
platform method to go forward to the next page See PageObject#forward
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 185 def forward @browser.navigate.forward end
platform method to retrieve the h1 element See PageObject::Accessors#h1
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 697 def h1_for(identifier) find_selenium_element(identifier, Elements::Heading, 'h1') end
platform method to retrieve the text from a h1 See PageObject::Accessors#h1
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 687 def h1_text_for(identifier) process_selenium_call(identifier, Elements::Heading, 'h1') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all h1 elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 704 def h1s_for(identifier) find_selenium_elements(identifier, Elements::Heading, 'h1') end
platform method to retrieve the h2 element See PageObject::Accessors#h2
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 722 def h2_for(identifier) find_selenium_element(identifier, Elements::Heading, 'h2') end
platform method to retrieve the text from a h2 See PageObject::Accessors#h2
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 712 def h2_text_for(identifier) process_selenium_call(identifier, Elements::Heading, 'h2') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all h2 elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 729 def h2s_for(identifier) find_selenium_elements(identifier, Elements::Heading, 'h2') end
platform method to retrieve the h3 element See PageObject::Accessors#h3
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 747 def h3_for(identifier) find_selenium_element(identifier, Elements::Heading, 'h3') end
platform method to retrieve the text from a h3 See PageObject::Accessors#h3
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 737 def h3_text_for(identifier) process_selenium_call(identifier, Elements::Heading, 'h3') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all h3 elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 754 def h3s_for(identifier) find_selenium_elements(identifier, Elements::Heading, 'h3') end
platform method to retrieve the h4 element See PageObject::Accessors#h4
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 772 def h4_for(identifier) find_selenium_element(identifier, Elements::Heading, 'h4') end
platform method to retrieve the text from a h4 See PageObject::Accessors#h4
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 762 def h4_text_for(identifier) process_selenium_call(identifier, Elements::Heading, 'h4') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all h4 elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 779 def h4s_for(identifier) find_selenium_elements(identifier, Elements::Heading, 'h4') end
platform method to retrieve the h5 element See PageObject::Accessors#h5
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 797 def h5_for(identifier) find_selenium_element(identifier, Elements::Heading, 'h5') end
platform method to retrieve the text from a h5 See PageObject::Accessors#h5
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 787 def h5_text_for(identifier) process_selenium_call(identifier, Elements::Heading, 'h5') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all h5 elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 804 def h5s_for(identifier) find_selenium_elements(identifier, Elements::Heading, 'h5') end
platform method to retrieve the h6 element See PageObject::Accessors#h6
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 822 def h6_for(identifier) find_selenium_element(identifier, Elements::Heading, 'h6') end
platform method to retrieve the text from a h6 See PageObject::Accessors#h6
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 812 def h6_text_for(identifier) process_selenium_call(identifier, Elements::Heading, 'h6') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all h6 elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 829 def h6s_for(identifier) find_selenium_elements(identifier, Elements::Heading, 'h6') end
platform method to retrieve the html for the current page See PageObject#html
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 47 def html @browser.page_source end
platform method to retrieve an image element See PageObject::Accessors#image
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 582 def image_for(identifier) find_selenium_element(identifier, Elements::Image, 'img') end
platform method to retrieve all image elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 589 def images_for(identifier) find_selenium_elements(identifier, Elements::Image, 'img') end
platform method to switch to a frame and execute a block See PageObject#in_frame
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 149 def in_frame(identifier, frame=nil, &block) switch_to_frame([frame: identifier]) block.call(nil) @browser.switch_to.default_content end
platform method to switch to an iframe and execute a block See PageObject#in_frame
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 159 def in_iframe(identifier, frame=nil, &block) switch_to_frame([iframe: identifier]) block.call(nil) @browser.switch_to.default_content end
platform method to return a PageObject::Elements::Label
element See PageObject::Accessors#label
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 873 def label_for(identifier) find_selenium_element(identifier, Elements::Label, 'label') end
platform method to return the text for a label See PageObject::Accessors#label
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 862 def label_text_for(identifier) process_selenium_call(identifier, Elements::Label, 'label') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all label elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 881 def labels_for(identifier) find_selenium_elements(identifier, Elements::Label, 'label') end
platform method to return a PageObject::Elements::Link
object see PageObject::Accessors#link
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 362 def link_for(identifier) find_selenium_element(identifier, Elements::Link, 'a') end
platform method to retrieve all link elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 369 def links_for(identifier) find_selenium_elements(identifier, Elements::Link, 'a') end
platform method to retrieve a list item element See PageObject::Accessors#list_item
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 622 def list_item_for(identifier) find_selenium_element(identifier, Elements::ListItem, 'li') end
platform method to retrieve the text from a list item See PageObject::Accessors#list_item
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 612 def list_item_text_for(identifier) process_selenium_call(identifier, Elements::ListItem, 'li') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all list items
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 629 def list_items_for(identifier) find_selenium_elements(identifier, Elements::ListItem, 'li') end
platform method to retrieve an ordered list element See PageObject::Accessors#ordered_list
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 672 def ordered_list_for(identifier) find_selenium_element(identifier, Elements::OrderedList, 'ol') end
platform method to retrieve the text from an ordered list See PageObject::Accessors#ordered_list
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 662 def ordered_list_text_for(identifier) process_selenium_call(identifier, Elements::OrderedList, 'ol') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all ordered lists
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 679 def ordered_lists_for(identifier) find_selenium_elements(identifier, Elements::OrderedList, 'ol') end
platform method to retrieve the paragraph element See PageObject::Accessors#paragraph
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 847 def paragraph_for(identifier) find_selenium_element(identifier, Elements::Paragraph, 'p') end
platform method to retrieve the text for a paragraph See PageObject::Accessors#paragraph
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 837 def paragraph_text_for(identifier) process_selenium_call(identifier, Elements::Paragraph, 'p') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all paragraph elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 854 def paragraphs_for(identifier) find_selenium_elements(identifier, Elements::Paragraph, 'p') end
platform method to handle a prompt popup See PageObject#prompt
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 102 def prompt(answer, frame=nil, &block) @browser.execute_script "window.prompt = function(text, value) { window.__lastWatirPrompt = { message: text, default_value: value }; return #{answer}; }" yield result = @browser.execute_script "return window.__lastWatirPrompt" result && result.dup.each_key { |k| result[k.to_sym] = result.delete(k) } result end
platform method to determine if a radio button is selected See PageObject::Accessors#radio_button
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 432 def radio_selected?(identifier) process_selenium_call(identifier, Elements::RadioButton, 'input', :type => 'radio') do |how, what| @browser.find_element(how, what).selected? end end
platform method to refresh the page See PageObject#refresh
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 169 def refresh @browser.navigate.refresh end
platform method to save the current screenshot to a file See PageObject#save_screenshot
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 201 def save_screenshot(file_name) @browser.save_screenshot(file_name) end
platform method to return the select list element See PageObject::Accessors#select_list
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 337 def select_list_for(identifier) find_selenium_element(identifier, Elements::SelectList, 'select') end
platform method to get the currently selected value from a select list See PageObject::Accessors#select_list
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 308 def select_list_value_for(identifier) process_selenium_call(identifier, Elements::SelectList, 'select') do |how, what| selected = nil @browser.find_element(how, what).find_elements(:tag_name => 'option').each do |o| if selected.nil? selected = o.text if o.selected? end end selected end end
platform method to select a value from a select list See PageObject::Accessors#select_list
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 324 def select_list_value_set(identifier, value) process_selenium_call(identifier, Elements::SelectList, 'select') do |how, what| select_list = @browser.find_element(how, what) select_list.find_elements(:tag_name => 'option').find do |option| option.text == value end.click end end
platform method to retrieve all select list elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 344 def select_lists_for(identifier) find_selenium_elements(identifier, Elements::SelectList, 'select') end
platform method to select a radio button See PageObject::Accessors#radio_button
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 422 def select_radio(identifier) process_selenium_call(identifier, Elements::RadioButton, 'input', :type => 'radio') do |how, what| @browser.find_element(how, what).click unless @browser.find_element(how, what).selected? end end
platform method to return a PageObject::Elements::Span
element See PageObject::Accessors#span
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 492 def span_for(identifier) find_selenium_element(identifier, Elements::Span, 'span') end
platform method to return the text for a span See PageObject::Accessors#span
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 482 def span_text_for(identifier) process_selenium_call(identifier, Elements::Span, 'span') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all span elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 499 def spans_for(identifier) find_selenium_elements(identifier, Elements::Span, 'span') end
platform method to return a svg element
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 994 def svg_for(identifier) find_selenium_element(identifier, Elements::Element, 'svg') end
platform method to return an array of svg elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1001 def svgs_for(identifier) find_selenium_elements(identifier, Elements::Element, 'svg') end
platform method to retrieve a table element See PageObject::Accessors#table
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 542 def table_for(identifier) find_selenium_element(identifier, Elements::Table, 'table') end
platform method to return the text for a table See PageObject::Accessors#table
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 532 def table_text_for(identifier) process_selenium_call(identifier, Elements::Table, 'table') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all table elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 549 def tables_for(identifier) find_selenium_elements(identifier, Elements::Table, 'table') end
platform method to retrieve the text from the current page See PageObject#text
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 39 def text @browser.find_element(:tag_name, 'body').text end
platform method to get the text area element See PageObject::Accessors#text_area
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 293 def text_area_for(identifier) find_selenium_element(identifier, Elements::TextArea, 'textarea') end
platform method to get the text from a textarea See PageObject::Accessors#text_area
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 283 def text_area_value_for(identifier) process_selenium_call(identifier, Elements::TextArea, 'textarea') do |how, what| @browser.find_element(how, what).attribute('value') end end
platform method to set text in a textarea See PageObject::Accessors#text_area
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 271 def text_area_value_set(identifier, value) process_selenium_call(identifier, Elements::TextArea, 'textarea') do |how, what| text_area = @browser.find_element(how, what) text_area.clear text_area.send_keys(value) end end
platform method to retrieve all text area elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 300 def text_areas_for(identifier) find_selenium_elements(identifier, Elements::TextArea, 'textarea') end
platform method to retrieve a text field element See PageObject::Accessors#text_field
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 231 def text_field_for(identifier) find_selenium_element(identifier, Elements::TextField, 'input', :type => 'text') end
platform method to get the value stored in a text field See PageObject::Accessors#text_field
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 209 def text_field_value_for(identifier) process_selenium_call(identifier, Elements::TextField, 'input', :type => 'text') do |how, what| @browser.find_element(how, what).attribute('value') end end
platform method to set the value for a text field See PageObject::Accessors#text_field
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 220 def text_field_value_set(identifier, value) process_selenium_call(identifier, Elements::TextField, 'input', :type => 'text') do |how, what| @browser.find_element(how, what).clear @browser.find_element(how, what).send_keys(value) end end
platform method to retrieve all text field elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 238 def text_fields_for(identifier) find_selenium_elements(identifier, Elements::TextField, 'input', :type => 'text') end
platform method to retrieve the title for the current page See PageObject#title
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 55 def title @browser.title end
platform method to uncheck a checkbox See PageObject::Accessors#checkbox
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 387 def uncheck_checkbox(identifier) process_selenium_call(identifier, Elements::CheckBox, 'input', :type => 'checkbox') do |how, what| @browser.find_element(how, what).click if @browser.find_element(how, what).selected? end end
platform method to retrieve an unordered list element See PageObject::Accessors#unordered_list
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 647 def unordered_list_for(identifier) find_selenium_element(identifier, Elements::UnorderedList, 'ul') end
platform method to retrieve the text from an unordered list See PageObject::Accessors#unordered_list
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 637 def unordered_list_text_for(identifier) process_selenium_call(identifier, Elements::UnorderedList, 'ul') do |how, what| @browser.find_element(how, what).text end end
platform method to retrieve all unordered lists
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 654 def unordered_lists_for(identifier) find_selenium_elements(identifier, Elements::UnorderedList, 'ul') end
platform method to retrieve a video element
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 964 def video_for(identifier) find_selenium_element(identifier, Elements::Video, 'video') end
platform method to return an array of video elements
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 971 def videos_for(identifier) find_selenium_elements(identifier, Elements::Video, 'video') end
platform method to wait for a block to return true See PageObject#wait_until
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 63 def wait_until(timeout, message = nil, &block) wait = ::Selenium::WebDriver::Wait.new({:timeout => timeout, :message => message}) wait.until &block end
Private Instance Methods
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1071 def add_tagname_if_needed identifier, tag, additional=nil return identifier if identifier.length < 2 and supported_identifier(identifier, tag, additional) identifier[:tag_name] = tag if additional additional.each do |key, value| identifier[key] = value end end identifier end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1048 def build_null_object(identifier, type, tag, other) null_element = SurrogateSeleniumElement.new null_element.identifier = identifier null_element.type = type null_element.tag = tag null_element.other = other null_element.platform = self Elements::Element.new(null_element, :platform => :selenium_webdriver) end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1058 def delete_regexp(identifier) regexp = identifier.find {|ident| ident[1].is_a?(Regexp)} identifier.delete(regexp[0]) if regexp regexp end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1111 def fetch_value(element, how) case how when :text element.text when :tag_name element.tag_name.downcase when :href (href = element.attribute(:href)) && href.strip else element.attribute(how.to_s.gsub("_", "-").to_sym) end end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1015 def find_selenium_element(identifier, type, tag, other=nil) regexp = delete_regexp(identifier) how, what, frame_identifiers = parse_identifiers(identifier, type, tag, other) switch_to_frame(frame_identifiers) begin unless regexp element = @browser.find_element(how, what) else elements = @browser.find_elements(how, what) element = elements.find {|ele| matches_selector?(ele, regexp[0], regexp[1])} end rescue Selenium::WebDriver::Error::NoSuchElementError @browser.switch_to.default_content unless frame_identifiers.nil? return build_null_object(identifier, type, tag, other) end @browser.switch_to.default_content unless frame_identifiers.nil? type.new(element, :platform => :selenium_webdriver) end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1034 def find_selenium_elements(identifier, type, tag, other=nil) regexp = delete_regexp(identifier) how, what, frame_identifiers = parse_identifiers(identifier, type, tag, other) switch_to_frame(frame_identifiers) unless regexp elements = @browser.find_elements(how, what) else eles = @browser.find_elements(how, what) elements = eles.find_all {|ele| matches_selector?(ele, regexp[0], regexp[1])} end @browser.switch_to.default_content unless frame_identifiers.nil? elements.map { |element| type.new(element, :platform => :selenium_webdriver) } end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1107 def matches_selector?(element, how, what) what === fetch_value(element, how) end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1064 def parse_identifiers(identifier, element, tag_name=nil, additional=nil) frame_identifiers = identifier.delete(:frame) identifier = add_tagname_if_needed identifier, tag_name, additional if tag_name how, what = element.selenium_identifier_for identifier return how, what, frame_identifiers end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1007 def process_selenium_call(identifier, type, tag, other=nil) how, what, frame_identifiers = parse_identifiers(identifier, type, tag, other) switch_to_frame(frame_identifiers) value = yield how, what @browser.switch_to.default_content unless frame_identifiers.nil? value end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1082 def supported_identifier(identifier, tag, additional) return false if identifier.size == 0 return false if identifier[:index] return false if identifier[:action] and tag == 'form' return false if identifier[:alt] and tag == 'img' return false if identifier[:alt] and tag == 'input' and ['submit', 'image', 'button', 'reset'].include? additional[:type] return false if identifier[:href] and tag == 'a' return false if identifier[:src] and tag == 'input' and ['submit', 'image', 'button', 'reset'].include? additional[:type] return false if identifier[:src] and tag == 'img' return false if identifier[:label] return false if identifier[:text] and tag == 'input' and additional[:type] == 'hidden' return false if identifier[:text] and tag == 'input' and additional[:type] == 'text' return false if identifier[:text] and ['div', 'span', 'td', 'label', 'li'].include? tag return false if identifier[:title] and tag == 'input' and additional[:type] == 'text' return false if identifier[:title] and tag == 'input' and additional[:type] == 'file' return false if identifier[:title] and tag == 'a' return false if identifier[:title] and tag == 'span' return false if identifier[:title] and tag == 'div' return false if identifier[:value] and tag == 'input' and ['radio', 'submit', 'image', 'button', 'reset', 'checkbox', 'hidden'].include? additional[:type] true end
# File lib/page-object/platforms/selenium_webdriver/page_object.rb, line 1124 def switch_to_frame(frame_identifiers) unless frame_identifiers.nil? frame_identifiers.each do |frame| frame_id = frame.values.first value = frame_id.values.first @browser.switch_to.frame(value) end end end