lib/uia/element.rb in uia-0.0.6.1 vs lib/uia/element.rb in uia-0.0.7

- old
+ new

@@ -1,23 +1,23 @@ -require 'uia/patterns/expand_collapse' -require 'uia/patterns/invoke' -require 'uia/patterns/selection' -require 'uia/patterns/selection_item' -require 'uia/patterns/toggle' -require 'uia/patterns/value' require 'uia/library/element_attributes' module Uia + class UnsupportedPattern < StandardError + def initialize(expected, actual) + super "Pattern #{expected} not found in #{actual}" + end + end + class Element extend ElementAttributes def initialize(element) @element = element @default = lambda { [:unknown] } end - element_attr :id, :name, :handle, :runtime_id, :enabled?, :class_name + element_attr :id, :name, :handle, :runtime_id, :enabled?, :class_name, :children, :descendants def control_type Library::Constants::ControlTypes.find(@default) { |_, v| v == @element.control_type_id }.first end @@ -33,26 +33,35 @@ when locator[:name] Library::find_child_by_name(@element, locator[:name]) end end - def as(pattern) - which = "Uia::Patterns::#{pattern.to_s.capitalize}".split('::').reduce(Object) do |m, current| - m.const_get current.split('_').map(&:capitalize).join + def locators_match?(locator) + locator.all? do |locator, value| + case locator + when :pattern + patterns.include? value + else + send(locator) == value + end end - extend which end - def patterns - @element.pattern_ids.map {|id| Library::Constants::Patterns.find(@default) { |_, v| v == id }.first } + def select(locator) + descendants.select { |e| e.locators_match? locator } end - def children - @element.children + def as(pattern) + raise UnsupportedPattern.new(pattern, patterns) unless patterns.include? pattern + + which = "Uia::Patterns::#{pattern.to_s.capitalize}".split('::').reduce(Object) do |m, current| + m.const_get current.split('_').map(&:capitalize).join + end + extend which end - def descendants - @element.descendants + def patterns + @element.pattern_ids.map { |id| Library::Constants::Patterns.find(@default) { |_, v| v == id }.first } end def click Library.click(@element) true \ No newline at end of file