druid-ts 1.2.4 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ChangeLog +21 -2
- data/Gemfile +1 -1
- data/druid.gemspec +3 -3
- data/features/element.feature +0 -5
- data/features/frames.feature +4 -0
- data/features/html/static_elements.html +11 -0
- data/features/populate_page_with.feature +25 -0
- data/features/select_list.feature +1 -0
- data/features/step_definations/audio_steps.rb +1 -1
- data/features/step_definations/element_steps.rb +0 -4
- data/features/step_definations/frame_steps.rb +35 -0
- data/features/step_definations/populate_page_with_steps.rb +3 -0
- data/features/step_definations/select_list_steps.rb +4 -0
- data/features/step_definations/table_steps.rb +19 -0
- data/features/support/page.rb +2 -0
- data/features/table.feature +21 -0
- data/lib/druid.rb +0 -1
- data/lib/druid/assist.rb +8 -5
- data/lib/druid/elements/area.rb +0 -20
- data/lib/druid/elements/check_box.rb +0 -20
- data/lib/druid/elements/element.rb +73 -64
- data/lib/druid/elements/file_field.rb +0 -6
- data/lib/druid/elements/hidden_field.rb +0 -4
- data/lib/druid/elements/image.rb +0 -7
- data/lib/druid/elements/media.rb +0 -34
- data/lib/druid/elements/ordered_list.rb +8 -21
- data/lib/druid/elements/radio_button.rb +0 -13
- data/lib/druid/elements/select_list.rb +2 -11
- data/lib/druid/elements/table.rb +41 -16
- data/lib/druid/elements/table_row.rb +21 -17
- data/lib/druid/elements/text_area.rb +0 -7
- data/lib/druid/elements/text_field.rb +0 -7
- data/lib/druid/elements/unordered_list.rb +9 -22
- data/lib/druid/javascript_framework_facade.rb +1 -1
- data/lib/druid/locator_generator.rb +153 -147
- data/lib/druid/page_populator.rb +44 -37
- data/lib/druid/version.rb +1 -1
- data/spec/druid/accessors_spec.rb +3 -3
- data/spec/druid/elements/check_box_spec.rb +0 -15
- data/spec/druid/elements/element_spec.rb +77 -78
- data/spec/druid/elements/file_field_spec.rb +0 -5
- data/spec/druid/elements/media_spec.rb +0 -49
- data/spec/druid/elements/ordered_list_spec.rb +24 -20
- data/spec/druid/elements/radio_button_spec.rb +0 -10
- data/spec/druid/elements/table_row_spec.rb +12 -12
- data/spec/druid/elements/table_spec.rb +29 -25
- data/spec/druid/elements/text_area_spec.rb +0 -4
- data/spec/druid/elements/text_field_spec.rb +0 -5
- data/spec/druid/elements/unordered_list_spec.rb +25 -20
- data/spec/druid/javascript_framework_facade_spec.rb +1 -1
- data/spec/druid/page_populator_spec.rb +34 -4
- metadata +15 -18
- data/lib/druid/core_ext/string.rb +0 -5
- data/spec/druid/elements/area_spec.rb +0 -25
- data/spec/druid/elements/canvas_spec.rb +0 -19
- data/spec/druid/elements/video_spec.rb +0 -25
    
        data/lib/druid/elements/image.rb
    CHANGED
    
    
    
        data/lib/druid/elements/media.rb
    CHANGED
    
    | @@ -2,44 +2,10 @@ module Druid | |
| 2 2 | 
             
              module Elements
         | 
| 3 3 | 
             
                class Media < Element
         | 
| 4 4 |  | 
| 5 | 
            -
                  def autoplay?
         | 
| 6 | 
            -
                    attribute(:autoplay)
         | 
| 7 | 
            -
                  end
         | 
| 8 | 
            -
             | 
| 9 5 | 
             
                  def has_controls?
         | 
| 10 6 | 
             
                    attribute(:controls)
         | 
| 11 7 | 
             
                  end
         | 
| 12 8 |  | 
| 13 | 
            -
                  def paused?
         | 
| 14 | 
            -
                    attribute(:paused)
         | 
| 15 | 
            -
                  end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                  def duration
         | 
| 18 | 
            -
                    duration = attribute(:duration)
         | 
| 19 | 
            -
                    return duration.to_f if duration
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  def volume
         | 
| 23 | 
            -
                    volume = attribute(:volume)
         | 
| 24 | 
            -
                    return volume.to_i if volume
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                  def ended?
         | 
| 28 | 
            -
                    attribute(:ended)
         | 
| 29 | 
            -
                  end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  def seeking?
         | 
| 32 | 
            -
                    attribute(:seeking)
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  def loop?
         | 
| 36 | 
            -
                    attribute(:loop)
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  def muted?
         | 
| 40 | 
            -
                    attribute(:muted)
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
             | 
| 43 9 | 
             
                end
         | 
| 44 10 | 
             
              end
         | 
| 45 11 | 
             
            end
         | 
| @@ -4,35 +4,22 @@ module Druid | |
| 4 4 | 
             
                  attr_accessor :li_element
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def [](idx)
         | 
| 7 | 
            -
                     | 
| 7 | 
            +
                    list_items[idx]
         | 
| 8 8 | 
             
                  end
         | 
| 9 9 |  | 
| 10 10 | 
             
                  def items
         | 
| 11 | 
            -
                     | 
| 11 | 
            +
                    list_items.size
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 | 
            -
                  def each
         | 
| 15 | 
            -
                     | 
| 16 | 
            -
                      yield self[index-1]
         | 
| 17 | 
            -
                    end
         | 
| 14 | 
            +
                  def each(&block)
         | 
| 15 | 
            +
                    list_items.each(&block)
         | 
| 18 16 | 
             
                  end
         | 
| 19 17 |  | 
| 18 | 
            +
                  #
         | 
| 19 | 
            +
                  # Return Array of ListItem objects that are children of the OrderedList
         | 
| 20 | 
            +
                  #
         | 
| 20 21 | 
             
                  def list_items
         | 
| 21 | 
            -
                    children | 
| 22 | 
            -
                      Druid::Elements::ListItem.new(obj)
         | 
| 23 | 
            -
                    end
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  protected
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  def child_xpath
         | 
| 29 | 
            -
                    "./child::li"
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  private
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                  def children
         | 
| 35 | 
            -
                    element.ols(:xpath => child_xpath)
         | 
| 22 | 
            +
                    @list_items ||= children(tag_name: 'li')
         | 
| 36 23 | 
             
                  end
         | 
| 37 24 |  | 
| 38 25 | 
             
                end
         | 
| @@ -2,19 +2,6 @@ module Druid | |
| 2 2 | 
             
              module Elements
         | 
| 3 3 | 
             
                class RadioButton < Element
         | 
| 4 4 |  | 
| 5 | 
            -
                  #
         | 
| 6 | 
            -
                  # Select the RadioButton
         | 
| 7 | 
            -
                  #
         | 
| 8 | 
            -
                  def select
         | 
| 9 | 
            -
                    element.set
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  #
         | 
| 13 | 
            -
                  # Return if it is selected
         | 
| 14 | 
            -
                  #
         | 
| 15 | 
            -
                  def selected?
         | 
| 16 | 
            -
                    element.set?
         | 
| 17 | 
            -
                  end
         | 
| 18 5 | 
             
                end
         | 
| 19 6 |  | 
| 20 7 | 
             
                Druid::Elements.type_to_class[:radio] = Druid::Elements::RadioButton
         | 
| @@ -14,22 +14,13 @@ module Druid | |
| 14 14 | 
             
                  # @return [Array<String>] An array of strings representing the text of the currently selected options.
         | 
| 15 15 | 
             
                  #
         | 
| 16 16 | 
             
                  def selected_options
         | 
| 17 | 
            -
                    element.selected_options.map | 
| 17 | 
            +
                    element.selected_options.map(&:text).compact
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 |  | 
| 20 20 | 
             
                  #
         | 
| 21 21 | 
             
                  # @return [Array<String>] An array of strings representing the value of the currently selected options.
         | 
| 22 22 | 
             
                  def selected_values
         | 
| 23 | 
            -
                    element.selected_options.map | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  #
         | 
| 27 | 
            -
                  # Returns true if the select list has one or more options where text or label matches the given value.
         | 
| 28 | 
            -
                  #
         | 
| 29 | 
            -
                  # @param [String, Regexp] value A value
         | 
| 30 | 
            -
                  # @return [Boolean]
         | 
| 31 | 
            -
                  def include? value
         | 
| 32 | 
            -
                    element.include? value
         | 
| 23 | 
            +
                    element.selected_options.map(&:value).compact
         | 
| 33 24 | 
             
                  end
         | 
| 34 25 |  | 
| 35 26 | 
             
                end
         | 
    
        data/lib/druid/elements/table.rb
    CHANGED
    
    | @@ -7,24 +7,27 @@ module Druid | |
| 7 7 | 
             
                  # will be matched with the text from any column. The text can be
         | 
| 8 8 | 
             
                  # a substring of the full column text.
         | 
| 9 9 | 
             
                  #
         | 
| 10 | 
            -
                  # @return [Druid::Elements:: | 
| 10 | 
            +
                  # @return [Druid::Elements::TableRow]
         | 
| 11 11 | 
             
                  #
         | 
| 12 | 
            -
                  def []( | 
| 13 | 
            -
                    idx =  | 
| 14 | 
            -
                     | 
| 15 | 
            -
                    Druid::Elements::TableRow.new(element[idx])
         | 
| 12 | 
            +
                  def [](what)
         | 
| 13 | 
            +
                    idx = find_index(what)
         | 
| 14 | 
            +
                    idx && row_items[idx]
         | 
| 16 15 | 
             
                  end
         | 
| 16 | 
            +
             | 
| 17 17 | 
             
                  #
         | 
| 18 18 | 
             
                  # Returns the number of rows in the table.
         | 
| 19 19 | 
             
                  #
         | 
| 20 20 | 
             
                  def rows
         | 
| 21 | 
            -
                     | 
| 21 | 
            +
                    row_items.size
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 |  | 
| 24 | 
            -
                   | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 24 | 
            +
                  #
         | 
| 25 | 
            +
                  # iterator that yields with a Druid::Elements::TableRow
         | 
| 26 | 
            +
                  #
         | 
| 27 | 
            +
                  # @return [Druid::Elements::TableRow]
         | 
| 28 | 
            +
                  #
         | 
| 29 | 
            +
                  def each(&block)
         | 
| 30 | 
            +
                    row_items.each(&block)
         | 
| 28 31 | 
             
                  end
         | 
| 29 32 |  | 
| 30 33 | 
             
                  #
         | 
| @@ -46,17 +49,39 @@ module Druid | |
| 46 49 | 
             
                  end
         | 
| 47 50 |  | 
| 48 51 | 
             
                  #
         | 
| 49 | 
            -
                  #  | 
| 52 | 
            +
                  # Returns the Array of values(String) in a column for the index provided. Index
         | 
| 53 | 
            +
                  # is zero based. If the index provided is a String then it
         | 
| 54 | 
            +
                  # will be matched with the text from the header. The text can be a substring of the full header text
         | 
| 50 55 | 
             
                  #
         | 
| 51 | 
            -
                  def  | 
| 52 | 
            -
                     | 
| 56 | 
            +
                  def column_values(what)
         | 
| 57 | 
            +
                    idx = find_index_of_header(what)
         | 
| 58 | 
            +
                    idx && row_items.drop(1).collect{ |row| row.cell(index: idx).text }
         | 
| 53 59 | 
             
                  end
         | 
| 54 60 |  | 
| 55 61 | 
             
                  private
         | 
| 56 62 |  | 
| 57 | 
            -
                  def  | 
| 58 | 
            -
                     | 
| 59 | 
            -
             | 
| 63 | 
            +
                  def row_items
         | 
| 64 | 
            +
                    meth = stragegy == :descendants ? :trs : :rows
         | 
| 65 | 
            +
                    @row_items ||= element.send(meth).map do |obj|
         | 
| 66 | 
            +
                      Druid::Elements::TableRow.new(obj)
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  def stragegy
         | 
| 71 | 
            +
                    :children
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  def find_index_of_header(what)
         | 
| 75 | 
            +
                    return what if what.is_a? Integer
         | 
| 76 | 
            +
                    row_items[0].cells.find_index do |cell|
         | 
| 77 | 
            +
                      cell.text.include? Regexp.escape(what)
         | 
| 78 | 
            +
                    end
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  def find_index(what)
         | 
| 82 | 
            +
                    return what if what.is_a? Integer
         | 
| 83 | 
            +
                    row_items.find_index do |row|
         | 
| 84 | 
            +
                      row.cell(text: /#{Regexp.escape(what)}/).exist?
         | 
| 60 85 | 
             
                    end
         | 
| 61 86 | 
             
                  end
         | 
| 62 87 |  | 
| @@ -8,34 +8,38 @@ module Druid | |
| 8 8 | 
             
                  # is zero based. If the index provided is a String then it
         | 
| 9 9 | 
             
                  # will be matched with the text from the columns in the first row.
         | 
| 10 10 | 
             
                  #
         | 
| 11 | 
            -
                  def []( | 
| 12 | 
            -
                    idx =  | 
| 13 | 
            -
                     | 
| 14 | 
            -
                    Druid::Elements::TableCell.new(element[idx])
         | 
| 11 | 
            +
                  def [](what)
         | 
| 12 | 
            +
                    idx = find_index(what)
         | 
| 13 | 
            +
                    idx && cell_items[idx]
         | 
| 15 14 | 
             
                  end
         | 
| 15 | 
            +
             | 
| 16 16 | 
             
                  #
         | 
| 17 | 
            -
                  # Returns the number of  | 
| 17 | 
            +
                  # Returns the number of colums in the table
         | 
| 18 18 | 
             
                  #
         | 
| 19 19 | 
             
                  def columns
         | 
| 20 | 
            -
                     | 
| 20 | 
            +
                    cell_items.size
         | 
| 21 21 | 
             
                  end
         | 
| 22 22 |  | 
| 23 | 
            -
                   | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 23 | 
            +
                  #
         | 
| 24 | 
            +
                  # iterator that yields with a Druid::Elements::TableCell
         | 
| 25 | 
            +
                  #
         | 
| 26 | 
            +
                  def each(&block)
         | 
| 27 | 
            +
                    cell_items.each(&block)
         | 
| 27 28 | 
             
                  end
         | 
| 28 29 |  | 
| 29 30 | 
             
                  private
         | 
| 30 31 |  | 
| 31 | 
            -
                  def  | 
| 32 | 
            -
                     | 
| 33 | 
            -
             | 
| 34 | 
            -
                     | 
| 35 | 
            -
             | 
| 32 | 
            +
                  def cell_items
         | 
| 33 | 
            +
                    @cell_items ||= element.cells.map do |obj|
         | 
| 34 | 
            +
                      Druid::Elements::TableCell.new(obj)
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def find_index(what)
         | 
| 39 | 
            +
                    return what if what.is_a? Integer
         | 
| 40 | 
            +
                    parent(tag_name: 'table').headers.find_index do |header|
         | 
| 41 | 
            +
                      header.text.include? what
         | 
| 36 42 | 
             
                    end
         | 
| 37 | 
            -
                    first_row = table[0]
         | 
| 38 | 
            -
                    first_row.cells.find_index { |column| column.text.include? title}
         | 
| 39 43 | 
             
                  end
         | 
| 40 44 |  | 
| 41 45 | 
             
                end
         | 
| @@ -2,41 +2,28 @@ module Druid | |
| 2 2 | 
             
              module Elements
         | 
| 3 3 | 
             
                class UnOrderedList < Element
         | 
| 4 4 |  | 
| 5 | 
            +
                  #
         | 
| 6 | 
            +
                  # @return [Druid::Elements::ListItem]
         | 
| 7 | 
            +
                  #
         | 
| 5 8 | 
             
                  def [](idx)
         | 
| 6 | 
            -
                     | 
| 9 | 
            +
                    list_items[idx]
         | 
| 7 10 | 
             
                  end
         | 
| 8 11 |  | 
| 9 12 | 
             
                  def items
         | 
| 10 | 
            -
                     | 
| 13 | 
            +
                    list_items.size
         | 
| 11 14 | 
             
                  end
         | 
| 12 15 |  | 
| 13 | 
            -
                  def each
         | 
| 14 | 
            -
                     | 
| 15 | 
            -
                      yield self[index-1]
         | 
| 16 | 
            -
                    end
         | 
| 16 | 
            +
                  def each(&block)
         | 
| 17 | 
            +
                    list_items.each(&block)
         | 
| 17 18 | 
             
                  end
         | 
| 18 19 |  | 
| 19 20 | 
             
                  #
         | 
| 20 | 
            -
                  #  | 
| 21 | 
            -
                  # UnOrderedList
         | 
| 21 | 
            +
                  # Return Array of ListItem objects that are children of the UnorderedList
         | 
| 22 22 | 
             
                  #
         | 
| 23 23 | 
             
                  def list_items
         | 
| 24 | 
            -
                    children | 
| 25 | 
            -
                      Druid::Elements::ListItem.new(obj)
         | 
| 26 | 
            -
                    end
         | 
| 24 | 
            +
                    @list_items ||= children(tag_name: 'li')
         | 
| 27 25 | 
             
                  end
         | 
| 28 26 |  | 
| 29 | 
            -
                  protected
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  def child_xpath
         | 
| 32 | 
            -
                    "./child::li"
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  private
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                  def children
         | 
| 38 | 
            -
                    element.uls(:xpath => child_xpath)
         | 
| 39 | 
            -
                  end
         | 
| 40 27 | 
             
                end
         | 
| 41 28 |  | 
| 42 29 | 
             
                Druid::Elements.tag_to_class[:ul] = Druid::Elements::UnOrderedList
         | 
| @@ -65,7 +65,7 @@ module Druid | |
| 65 65 | 
             
                  end
         | 
| 66 66 |  | 
| 67 67 | 
             
                  def unknown_framework(framework)
         | 
| 68 | 
            -
                    "You specified the Javascript framework #{framework} and it is  | 
| 68 | 
            +
                    "You specified the Javascript framework #{framework} and it is unknown to the system"
         | 
| 69 69 | 
             
                  end
         | 
| 70 70 |  | 
| 71 71 | 
             
                  def invalid_framework
         | 
| @@ -1,154 +1,160 @@ | |
| 1 1 | 
             
            module Druid
         | 
| 2 2 | 
             
              module LocatorGenerator
         | 
| 3 3 |  | 
| 4 | 
            -
                BASIC_ELEMENTS =  | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 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 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 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 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 4 | 
            +
                BASIC_ELEMENTS = %i(
         | 
| 5 | 
            +
                    abbr
         | 
| 6 | 
            +
                    address
         | 
| 7 | 
            +
                    animate
         | 
| 8 | 
            +
                    animate_motion
         | 
| 9 | 
            +
                    animate_transform
         | 
| 10 | 
            +
                    article
         | 
| 11 | 
            +
                    as
         | 
| 12 | 
            +
                    aside
         | 
| 13 | 
            +
                    base
         | 
| 14 | 
            +
                    bdi
         | 
| 15 | 
            +
                    bdo
         | 
| 16 | 
            +
                    blockquote
         | 
| 17 | 
            +
                    body
         | 
| 18 | 
            +
                    br
         | 
| 19 | 
            +
                    caption
         | 
| 20 | 
            +
                    circle
         | 
| 21 | 
            +
                    cite
         | 
| 22 | 
            +
                    code
         | 
| 23 | 
            +
                    col
         | 
| 24 | 
            +
                    colgroup
         | 
| 25 | 
            +
                    command
         | 
| 26 | 
            +
                    cursor
         | 
| 27 | 
            +
                    data
         | 
| 28 | 
            +
                    datalist
         | 
| 29 | 
            +
                    dd
         | 
| 30 | 
            +
                    defs
         | 
| 31 | 
            +
                    del
         | 
| 32 | 
            +
                    desc
         | 
| 33 | 
            +
                    details
         | 
| 34 | 
            +
                    dfn
         | 
| 35 | 
            +
                    dialog
         | 
| 36 | 
            +
                    discard
         | 
| 37 | 
            +
                    dl
         | 
| 38 | 
            +
                    dt
         | 
| 39 | 
            +
                    ellipse
         | 
| 40 | 
            +
                    em
         | 
| 41 | 
            +
                    embed
         | 
| 42 | 
            +
                    fieldset
         | 
| 43 | 
            +
                    figcaption
         | 
| 44 | 
            +
                    figure
         | 
| 45 | 
            +
                    font
         | 
| 46 | 
            +
                    footer
         | 
| 47 | 
            +
                    foreign_object
         | 
| 48 | 
            +
                    g
         | 
| 49 | 
            +
                    head
         | 
| 50 | 
            +
                    header
         | 
| 51 | 
            +
                    hgroup
         | 
| 52 | 
            +
                    hr
         | 
| 53 | 
            +
                    html
         | 
| 54 | 
            +
                    ins
         | 
| 55 | 
            +
                    kbd
         | 
| 56 | 
            +
                    keygen
         | 
| 57 | 
            +
                    legend
         | 
| 58 | 
            +
                    line
         | 
| 59 | 
            +
                    linear_gradient
         | 
| 60 | 
            +
                    main
         | 
| 61 | 
            +
                    map
         | 
| 62 | 
            +
                    mark
         | 
| 63 | 
            +
                    marker
         | 
| 64 | 
            +
                    menu
         | 
| 65 | 
            +
                    menuitem
         | 
| 66 | 
            +
                    mesh_gradient
         | 
| 67 | 
            +
                    mesh_patch
         | 
| 68 | 
            +
                    mesh_row
         | 
| 69 | 
            +
                    meta
         | 
| 70 | 
            +
                    metadata
         | 
| 71 | 
            +
                    meter
         | 
| 72 | 
            +
                    mpath
         | 
| 73 | 
            +
                    nav
         | 
| 74 | 
            +
                    noscript
         | 
| 75 | 
            +
                    object
         | 
| 76 | 
            +
                    optgroup
         | 
| 77 | 
            +
                    output
         | 
| 78 | 
            +
                    p
         | 
| 79 | 
            +
                    param
         | 
| 80 | 
            +
                    path
         | 
| 81 | 
            +
                    pattern
         | 
| 82 | 
            +
                    polygon
         | 
| 83 | 
            +
                    polyline
         | 
| 84 | 
            +
                    pre
         | 
| 85 | 
            +
                    progress
         | 
| 86 | 
            +
                    q
         | 
| 87 | 
            +
                    radial_gradient
         | 
| 88 | 
            +
                    rect
         | 
| 89 | 
            +
                    rp
         | 
| 90 | 
            +
                    rt
         | 
| 91 | 
            +
                    ruby
         | 
| 92 | 
            +
                    s
         | 
| 93 | 
            +
                    samp
         | 
| 94 | 
            +
                    script
         | 
| 95 | 
            +
                    section
         | 
| 96 | 
            +
                    set
         | 
| 97 | 
            +
                    small
         | 
| 98 | 
            +
                    source
         | 
| 99 | 
            +
                    stop
         | 
| 100 | 
            +
                    strong
         | 
| 101 | 
            +
                    style
         | 
| 102 | 
            +
                    sub
         | 
| 103 | 
            +
                    summary
         | 
| 104 | 
            +
                    sup
         | 
| 105 | 
            +
                    switch
         | 
| 106 | 
            +
                    symbol
         | 
| 107 | 
            +
                    template
         | 
| 108 | 
            +
                    text_path
         | 
| 109 | 
            +
                    thread
         | 
| 110 | 
            +
                    time
         | 
| 111 | 
            +
                    title
         | 
| 112 | 
            +
                    track
         | 
| 113 | 
            +
                    tspan
         | 
| 114 | 
            +
                    u
         | 
| 115 | 
            +
                    use
         | 
| 116 | 
            +
                    var
         | 
| 117 | 
            +
                    view
         | 
| 118 | 
            +
                    wbr
         | 
| 119 | 
            +
                )
         | 
| 117 120 |  | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 121 | 
            +
             | 
| 122 | 
            +
                ADVANCED_ELEMENTS = %i(
         | 
| 123 | 
            +
                    text_field
         | 
| 124 | 
            +
                    hidden_field
         | 
| 125 | 
            +
                    text_area
         | 
| 126 | 
            +
                    select_list
         | 
| 127 | 
            +
                    link
         | 
| 128 | 
            +
                    checkbox
         | 
| 129 | 
            +
                    radio_button
         | 
| 130 | 
            +
                    button
         | 
| 131 | 
            +
                    div
         | 
| 132 | 
            +
                    span
         | 
| 133 | 
            +
                    table
         | 
| 134 | 
            +
                    cell
         | 
| 135 | 
            +
                    row
         | 
| 136 | 
            +
                    image
         | 
| 137 | 
            +
                    form
         | 
| 138 | 
            +
                    list_item
         | 
| 139 | 
            +
                    ordered_list
         | 
| 140 | 
            +
                    unordered_list
         | 
| 141 | 
            +
                    h1
         | 
| 142 | 
            +
                    h2
         | 
| 143 | 
            +
                    h3
         | 
| 144 | 
            +
                    h4
         | 
| 145 | 
            +
                    h5
         | 
| 146 | 
            +
                    h6
         | 
| 147 | 
            +
                    paragraph
         | 
| 148 | 
            +
                    label
         | 
| 149 | 
            +
                    file_field
         | 
| 150 | 
            +
                    area
         | 
| 151 | 
            +
                    canvas
         | 
| 152 | 
            +
                    audio
         | 
| 153 | 
            +
                    video
         | 
| 154 | 
            +
                    b
         | 
| 155 | 
            +
                    i
         | 
| 156 | 
            +
                    svg
         | 
| 157 | 
            +
                )
         | 
| 152 158 |  | 
| 153 159 | 
             
                def self.generate_locators(target)
         | 
| 154 160 | 
             
                   ADVANCED_ELEMENTS.each do |tag|
         |