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