uia 0.0.5.1 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/ChangeLog +17 -2
  2. data/Gemfile +1 -0
  3. data/Rakefile +13 -0
  4. data/ext/UiaDll/UIA.Helper/{AutomationProperty.cs → AutomationPropertyCondition.cs} +1 -1
  5. data/ext/UiaDll/UIA.Helper/Element.cs +46 -6
  6. data/ext/UiaDll/UIA.Helper/Extensions.cs +13 -0
  7. data/ext/UiaDll/UIA.Helper/UIA.Helper.csproj +1 -1
  8. data/ext/UiaDll/UiaDll.Test/ElementInformationTest.cpp +20 -4
  9. data/ext/UiaDll/UiaDll.Test/ElementStub.h +16 -2
  10. data/ext/UiaDll/UiaDll.Test/PatternInformationTest.cpp +35 -0
  11. data/ext/UiaDll/UiaDll.Test/UiaDll.Test.vcxproj +6 -4
  12. data/ext/UiaDll/UiaDll.Test/UiaDll.Test.vcxproj.filters +3 -0
  13. data/ext/UiaDll/UiaDll/ElementMethods.cpp +62 -17
  14. data/ext/UiaDll/UiaDll/ElementStructures.h +19 -9
  15. data/ext/UiaDll/UiaDll/ExpandCollapseMethods.cpp +33 -0
  16. data/ext/UiaDll/UiaDll/InvokePatternMethods.cpp +11 -0
  17. data/ext/UiaDll/UiaDll/PatternInformationStructures.h +90 -0
  18. data/ext/UiaDll/UiaDll/SelectionItemMethods.cpp +40 -0
  19. data/ext/UiaDll/UiaDll/SelectionMethods.cpp +16 -0
  20. data/ext/UiaDll/UiaDll/Stdafx.h +3 -0
  21. data/ext/UiaDll/UiaDll/ToggleMethods.cpp +25 -0
  22. data/ext/UiaDll/UiaDll/UiaDll.vcxproj +9 -0
  23. data/ext/UiaDll/UiaDll/UiaDll.vcxproj.filters +24 -0
  24. data/ext/UiaDll/UiaDll/ValuePatternMethods.cpp +25 -0
  25. data/lib/uia.rb +14 -6
  26. data/lib/uia/element.rb +35 -11
  27. data/lib/uia/finder.rb +33 -0
  28. data/lib/uia/library.rb +48 -6
  29. data/lib/uia/library/element_attributes.rb +11 -0
  30. data/lib/uia/library/structs.rb +93 -5
  31. data/lib/uia/patterns/expand_collapse.rb +17 -0
  32. data/lib/uia/patterns/invoke.rb +9 -0
  33. data/lib/uia/patterns/selection.rb +17 -0
  34. data/lib/uia/patterns/selection_item.rb +25 -0
  35. data/lib/uia/patterns/toggle.rb +17 -0
  36. data/lib/uia/patterns/value.rb +22 -0
  37. data/lib/uia/version.rb +1 -1
  38. data/spec/spec_helper.rb +0 -2
  39. data/spec/uia/element_spec.rb +35 -8
  40. data/spec/uia/patterns/expand_collapse_spec.rb +24 -0
  41. data/spec/uia/patterns/invoke_spec.rb +15 -0
  42. data/spec/uia/patterns/selection_item_spec.rb +55 -0
  43. data/spec/uia/patterns/selection_spec.rb +30 -0
  44. data/spec/uia/patterns/toggle_spec.rb +41 -0
  45. data/spec/uia/patterns/value_spec.rb +16 -0
  46. data/spec/uia_spec.rb +26 -7
  47. metadata +37 -4
@@ -7,27 +7,37 @@ typedef struct _ElementInformation {
7
7
  int* runtimeId;
8
8
  int runtimeIdLength;
9
9
  char* name;
10
+ char* className;
10
11
  int controlTypeId;
11
12
  int* patterns;
12
13
  int patternsLength;
13
14
  char* id;
14
15
 
15
- _ElementInformation() : name(NULL), nativeWindowHandle(0), runtimeId(NULL), patterns(NULL), id(NULL) {}
16
+ bool isEnabled;
16
17
 
17
- _ElementInformation(Element^ element) : name(NULL), nativeWindowHandle(0), runtimeId(NULL), patterns(NULL), id(NULL) {
18
- Update(element);
18
+ _ElementInformation() : name(NULL), nativeWindowHandle(0), runtimeId(NULL), patterns(NULL), id(NULL), className(NULL) {}
19
+
20
+ _ElementInformation(Element^ element) : name(NULL), nativeWindowHandle(0), runtimeId(NULL), patterns(NULL), id(NULL), className(NULL) {
21
+ Refresh(element);
22
+ }
23
+
24
+ static _ElementInformation* From(Element^ element) {
25
+ return nullptr != element ? new _ElementInformation(element) : NULL;
19
26
  }
20
27
 
21
- void Update(Element^ element) {
28
+ void Refresh(Element^ element) {
22
29
  Reset();
23
30
  id = StringHelper::ToUnmanaged(element->Id);
24
31
  name = StringHelper::ToUnmanaged(element->Name);
32
+ className = StringHelper::ToUnmanaged(element->ClassName);
25
33
  nativeWindowHandle = element->NativeWindowHandle;
26
34
  runtimeId = ArrayHelper::FromArray(element->RuntimeId);
27
35
  runtimeIdLength = element->RuntimeId->Length;
28
36
  controlTypeId = element->ControlTypeId;
29
37
  patterns = ArrayHelper::FromArray(element->SupportedPatternIds);
30
38
  patternsLength = element->SupportedPatternIds->Length;
39
+
40
+ isEnabled = element->IsEnabled;
31
41
  }
32
42
 
33
43
  ~_ElementInformation() {
@@ -36,11 +46,11 @@ typedef struct _ElementInformation {
36
46
 
37
47
  private:
38
48
  void Reset() {
39
- delete[] name; delete[] runtimeId; delete[] patterns; delete[] id;
40
- name = NULL; runtimeId = NULL; patterns = NULL; id = NULL;
49
+ delete[] name; delete[] runtimeId; delete[] patterns; delete[] id; delete[] className;
50
+ name = NULL; runtimeId = NULL; patterns = NULL; id = NULL; className = NULL;
41
51
  }
42
52
 
43
- } ElementInformation, *PElementInformation;
53
+ } ElementInformation, *ElementInformationPtr;
44
54
 
45
55
  typedef struct _Elements {
46
56
  int length;
@@ -54,11 +64,11 @@ typedef struct _Elements {
54
64
 
55
65
  auto index = 0;
56
66
  for each(auto element in elements) {
57
- this->elements[index++].Update(element);
67
+ this->elements[index++].Refresh(element);
58
68
  }
59
69
  }
60
70
 
61
71
  ~_Elements() {
62
72
  delete[] elements;
63
73
  }
64
- } Elements, *PElements;
74
+ } Elements, *ElementsPtr;
@@ -0,0 +1,33 @@
1
+ #include "Stdafx.h"
2
+
3
+ extern "C" {
4
+ __declspec(dllexport) void ExpandCollapse_Release(ExpandCollapseInfoPtr expandCollapseInfo) {
5
+ delete expandCollapseInfo;
6
+ }
7
+
8
+ __declspec(dllexport) ExpandCollapseInfoPtr ExpandCollapse_Information(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
9
+ try {
10
+ auto info = Find(element)->As<ExpandCollapsePattern^>(ExpandCollapsePattern::Pattern)->Current;
11
+ return new ExpandCollapseInfo(info.ExpandCollapseState.ToString());
12
+ } catch(Exception^ e) {
13
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
14
+ return NULL;
15
+ }
16
+ }
17
+
18
+ __declspec(dllexport) void ExpandCollapse_Expand(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
19
+ try {
20
+ Find(element)->As<ExpandCollapsePattern^>(ExpandCollapsePattern::Pattern)->Expand();
21
+ } catch(Exception^ e) {
22
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
23
+ }
24
+ }
25
+
26
+ __declspec(dllexport) void ExpandCollapse_Collapse(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
27
+ try {
28
+ Find(element)->As<ExpandCollapsePattern^>(ExpandCollapsePattern::Pattern)->Collapse();
29
+ } catch(Exception^ e) {
30
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,11 @@
1
+ #include "Stdafx.h"
2
+
3
+ extern "C" {
4
+ __declspec(dllexport) void Invoke(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
5
+ try {
6
+ Find(element)->As<InvokePattern^>(InvokePattern::Pattern)->Invoke();
7
+ } catch(Exception^ e) {
8
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,90 @@
1
+ #pragma once
2
+
3
+ #include "StringHelper.h"
4
+ #include "ElementStructures.h"
5
+
6
+ using namespace System::Windows::Automation;
7
+
8
+ typedef struct _ValuePatternInformation {
9
+ bool IsReadOnly;
10
+ char* Value;
11
+
12
+ _ValuePatternInformation(String^ value, bool IsReadOnly) {
13
+ init(value, IsReadOnly);
14
+ }
15
+
16
+ _ValuePatternInformation(ValuePattern::ValuePatternInformation^ info) {
17
+ init(info->Value, info->IsReadOnly);
18
+ }
19
+
20
+ ~_ValuePatternInformation() {
21
+ delete[] Value;
22
+ }
23
+
24
+ private:
25
+ void init(String^ value, bool IsReadOnly) {
26
+ this->IsReadOnly = IsReadOnly;
27
+ Value = StringHelper::ToUnmanaged(value);
28
+ }
29
+
30
+ } ValuePatternInformation, *ValuePatternInformationPtr;
31
+
32
+ typedef struct _ToggleInformation {
33
+ char* ToggleState;
34
+
35
+ _ToggleInformation(String^ toggleState) {
36
+ ToggleState = StringHelper::ToUnmanaged(toggleState);
37
+ }
38
+
39
+ ~_ToggleInformation() {
40
+ delete[] ToggleState;
41
+ }
42
+
43
+ } ToggleInformation, *ToggleInformationPtr;
44
+
45
+ typedef struct _SelectionInformation {
46
+ bool CanSelectMultiple;
47
+ bool IsSelectionRequired;
48
+
49
+ _SelectionInformation(SelectionPattern::SelectionPatternInformation^ info) {
50
+ CanSelectMultiple = info->CanSelectMultiple;
51
+ IsSelectionRequired = info->IsSelectionRequired;
52
+ }
53
+ } SelectionInformation, *SelectionInformationPtr;
54
+
55
+ typedef struct _SelectionItemInformation {
56
+ bool IsSelected;
57
+ ElementInformationPtr Container;
58
+
59
+ _SelectionItemInformation(SelectionItemPattern::SelectionItemPatternInformation^ info) {
60
+ init(info->IsSelected, Element::From(info->SelectionContainer));
61
+ }
62
+
63
+ _SelectionItemInformation(bool isSelected, Element^ selectionContainer) { // for testing
64
+ init(isSelected, selectionContainer);
65
+ }
66
+
67
+ ~_SelectionItemInformation() {
68
+ delete Container;
69
+ }
70
+
71
+ private:
72
+ void init(bool isSelected, Element^ selectionContainer) {
73
+ IsSelected = isSelected;
74
+ Container = new ElementInformation(selectionContainer);
75
+ }
76
+
77
+ } SelectionItemInformation, *SelectionItemInformationPtr;
78
+
79
+
80
+ typedef struct _ExpandCollapseInfo {
81
+ char* ExpandCollapseState;
82
+
83
+ _ExpandCollapseInfo(String^ expandCollapseState) {
84
+ ExpandCollapseState = StringHelper::ToUnmanaged(expandCollapseState);
85
+ }
86
+
87
+ ~_ExpandCollapseInfo() {
88
+ delete[] ExpandCollapseState;
89
+ }
90
+ } ExpandCollapseInfo, *ExpandCollapseInfoPtr;
@@ -0,0 +1,40 @@
1
+ #include "Stdafx.h"
2
+
3
+ extern "C" {
4
+ __declspec(dllexport) void SelectionItem_Release(SelectionItemInformationPtr selectionItemInfo) {
5
+ delete selectionItemInfo;
6
+ }
7
+
8
+ __declspec(dllexport) SelectionItemInformationPtr SelectionItem_Information(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
9
+ try {
10
+ auto info = Find(element)->As<SelectionItemPattern^>(SelectionItemPattern::Pattern)->Current;
11
+ return new SelectionItemInformation(info);
12
+ } catch(Exception^ e) {
13
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
14
+ }
15
+ }
16
+
17
+ __declspec(dllexport) void SelectionItem_Select(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
18
+ try {
19
+ Find(element)->As<SelectionItemPattern^>(SelectionItemPattern::Pattern)->Select();
20
+ } catch(Exception^ e) {
21
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
22
+ }
23
+ }
24
+
25
+ __declspec(dllexport) void SelectionItem_AddToSelection(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
26
+ try {
27
+ Find(element)->As<SelectionItemPattern^>(SelectionItemPattern::Pattern)->AddToSelection();
28
+ } catch(Exception^ e) {
29
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
30
+ }
31
+ }
32
+
33
+ __declspec(dllexport) void SelectionItem_RemoveFromSelection(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
34
+ try {
35
+ Find(element)->As<SelectionItemPattern^>(SelectionItemPattern::Pattern)->RemoveFromSelection();
36
+ } catch(Exception^ e) {
37
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,16 @@
1
+ #include "Stdafx.h"
2
+
3
+ extern "C" {
4
+ __declspec(dllexport) void Selection_Release(SelectionInformationPtr selectionInfo) {
5
+ delete selectionInfo;
6
+ }
7
+
8
+ __declspec(dllexport) SelectionInformationPtr Selection_Information(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
9
+ try {
10
+ return new SelectionInformation(Find(element)->As<SelectionPattern^>(SelectionPattern::Pattern)->Current);
11
+ } catch(Exception^ e) {
12
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
13
+ return NULL;
14
+ }
15
+ }
16
+ }
@@ -12,3 +12,6 @@ using namespace UIA::Helper;
12
12
  #include "StringHelper.h"
13
13
  #include "ArrayHelper.h"
14
14
  #include "ElementStructures.h"
15
+ #include "PatternInformationStructures.h"
16
+
17
+ extern "C" Element^ Find(ElementInformationPtr element);
@@ -0,0 +1,25 @@
1
+ #include "Stdafx.h"
2
+
3
+ extern "C" {
4
+ __declspec(dllexport) void Toggle_Release(ToggleInformationPtr toggleInfo) {
5
+ delete toggleInfo;
6
+ }
7
+
8
+ __declspec(dllexport) ToggleInformationPtr Toggle_Information(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
9
+ try {
10
+ auto info = Find(element)->As<TogglePattern^>(TogglePattern::Pattern)->Current;
11
+ return new ToggleInformation(info.ToggleState.ToString());
12
+ } catch(Exception^ e) {
13
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
14
+ return NULL;
15
+ }
16
+ }
17
+
18
+ __declspec(dllexport) void Toggle(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
19
+ try {
20
+ Find(element)->As<TogglePattern^>(TogglePattern::Pattern)->Toggle();
21
+ } catch(Exception^ e) {
22
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
23
+ }
24
+ }
25
+ }
@@ -74,11 +74,14 @@
74
74
  <Reference Include="System" />
75
75
  <Reference Include="System.Data" />
76
76
  <Reference Include="System.Xml" />
77
+ <Reference Include="UIAutomationClient" />
78
+ <Reference Include="UIAutomationTypes" />
77
79
  </ItemGroup>
78
80
  <ItemGroup>
79
81
  <ClInclude Include="ArrayHelper.h" />
80
82
  <ClInclude Include="DynamicAssemblyResolver.h" />
81
83
  <ClInclude Include="ElementStructures.h" />
84
+ <ClInclude Include="PatternInformationStructures.h" />
82
85
  <ClInclude Include="Stdafx.h" />
83
86
  <ClInclude Include="StringHelper.h" />
84
87
  </ItemGroup>
@@ -86,11 +89,17 @@
86
89
  <ClCompile Include="AssemblyInfo.cpp" />
87
90
  <ClCompile Include="DynamicAssemblyResolver.cpp" />
88
91
  <ClCompile Include="ElementMethods.cpp" />
92
+ <ClCompile Include="ExpandCollapseMethods.cpp" />
93
+ <ClCompile Include="InvokePatternMethods.cpp" />
94
+ <ClCompile Include="SelectionItemMethods.cpp" />
95
+ <ClCompile Include="SelectionMethods.cpp" />
89
96
  <ClCompile Include="Stdafx.cpp">
90
97
  <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
91
98
  <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
92
99
  </ClCompile>
100
+ <ClCompile Include="ToggleMethods.cpp" />
93
101
  <ClCompile Include="UiaDll.cpp" />
102
+ <ClCompile Include="ValuePatternMethods.cpp" />
94
103
  </ItemGroup>
95
104
  <ItemGroup>
96
105
  <ProjectReference Include="..\UIA.Helper\UIA.Helper.csproj">
@@ -13,6 +13,9 @@
13
13
  <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14
14
  <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15
15
  </Filter>
16
+ <Filter Include="Source Files\Patterns">
17
+ <UniqueIdentifier>{a1dddb33-e832-4b83-b6d7-46462084fad2}</UniqueIdentifier>
18
+ </Filter>
16
19
  </ItemGroup>
17
20
  <ItemGroup>
18
21
  <ClInclude Include="Stdafx.h">
@@ -30,6 +33,9 @@
30
33
  <ClInclude Include="ElementStructures.h">
31
34
  <Filter>Header Files</Filter>
32
35
  </ClInclude>
36
+ <ClInclude Include="PatternInformationStructures.h">
37
+ <Filter>Header Files</Filter>
38
+ </ClInclude>
33
39
  </ItemGroup>
34
40
  <ItemGroup>
35
41
  <ClCompile Include="UiaDll.cpp">
@@ -47,5 +53,23 @@
47
53
  <ClCompile Include="ElementMethods.cpp">
48
54
  <Filter>Source Files</Filter>
49
55
  </ClCompile>
56
+ <ClCompile Include="ValuePatternMethods.cpp">
57
+ <Filter>Source Files\Patterns</Filter>
58
+ </ClCompile>
59
+ <ClCompile Include="InvokePatternMethods.cpp">
60
+ <Filter>Source Files\Patterns</Filter>
61
+ </ClCompile>
62
+ <ClCompile Include="ToggleMethods.cpp">
63
+ <Filter>Source Files\Patterns</Filter>
64
+ </ClCompile>
65
+ <ClCompile Include="SelectionItemMethods.cpp">
66
+ <Filter>Source Files\Patterns</Filter>
67
+ </ClCompile>
68
+ <ClCompile Include="SelectionMethods.cpp">
69
+ <Filter>Source Files\Patterns</Filter>
70
+ </ClCompile>
71
+ <ClCompile Include="ExpandCollapseMethods.cpp">
72
+ <Filter>Source Files\Patterns</Filter>
73
+ </ClCompile>
50
74
  </ItemGroup>
51
75
  </Project>
@@ -0,0 +1,25 @@
1
+ #include "Stdafx.h"
2
+
3
+ extern "C" {
4
+ __declspec(dllexport) void Value_Release(ValuePatternInformationPtr valueInformation) {
5
+ delete valueInformation;
6
+ }
7
+
8
+ __declspec(dllexport) void Value_Set(ElementInformationPtr element, const char* value, char* errorInfo, const int errorInfoLength) {
9
+ try {
10
+ Find(element)->As<ValuePattern^>(ValuePattern::Pattern)->SetValue(gcnew String(value));
11
+ } catch(Exception^ e) {
12
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
13
+ }
14
+ }
15
+
16
+ __declspec(dllexport) ValuePatternInformationPtr Value_Information(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
17
+ try {
18
+ auto valuePattern = Find(element)->As<ValuePattern^>(ValuePattern::Pattern);
19
+ return new ValuePatternInformation(valuePattern->Current);
20
+ } catch(Exception^ e) {
21
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
22
+ return NULL;
23
+ }
24
+ }
25
+ }
data/lib/uia.rb CHANGED
@@ -1,21 +1,29 @@
1
1
  require 'uia/version'
2
2
  require 'uia/library'
3
- require 'uia/element'
4
3
  require 'uia/library/constants'
4
+ require 'uia/element'
5
+ require 'uia/finder'
5
6
 
6
7
  module Uia
7
8
  class BadLocator < StandardError; end
9
+ extend Finder
10
+
11
+ def self.children
12
+ Library.root_children.children
13
+ end
8
14
 
9
- def find_element(how)
15
+ def self.find_element(how)
10
16
  case
11
17
  when how[:id]
12
- Element.new Library.find_by_id(how[:id])
18
+ find_by_id how[:id]
19
+ when how[:name]
20
+ find_by_name how[:name]
13
21
  when how[:pid]
14
- Element.new Library.find_by_pid(how[:pid])
22
+ find_by_pid how[:pid]
15
23
  when how[:runtime_id]
16
- Element.new Library.find_by_runtime_id(how[:runtime_id])
24
+ find_by_runtime_id how[:runtime_id]
17
25
  when how[:handle]
18
- Element.new Library.find_by_handle(how[:handle])
26
+ find_by_handle how[:handle]
19
27
  else
20
28
  raise BadLocator, "#{how} is not a valid locator"
21
29
  end
data/lib/uia/element.rb CHANGED
@@ -1,20 +1,51 @@
1
+ require 'uia/patterns/expand_collapse'
2
+ require 'uia/patterns/invoke'
3
+ require 'uia/patterns/selection'
4
+ require 'uia/patterns/selection_item'
5
+ require 'uia/patterns/toggle'
6
+ require 'uia/patterns/value'
7
+ require 'uia/library/element_attributes'
8
+
1
9
  module Uia
2
10
  class Element
11
+ extend ElementAttributes
12
+
3
13
  def initialize(element)
4
14
  @element = element
5
15
  @default = lambda { [:unknown] }
6
16
  end
7
17
 
18
+ element_attr :id, :name, :handle, :runtime_id, :enabled?, :class_name
19
+
8
20
  def control_type
9
- Library::Constants::ControlTypes.find(@default) { |_, v| v == control_type_id }.first
21
+ Library::Constants::ControlTypes.find(@default) { |_, v| v == @element.control_type_id }.first
10
22
  end
11
23
 
12
- def patterns
13
- pattern_ids.map do |id|
14
- Library::Constants::Patterns.find(@default) { |_, v| v == id }.first
24
+ def refresh
25
+ Library.refresh @element
26
+ self
27
+ end
28
+
29
+ def find(locator)
30
+ case
31
+ when locator[:id]
32
+ Library::find_child_by_id(@element, locator[:id])
33
+ when locator[:name]
34
+ Library::find_child_by_name(@element, locator[:name])
15
35
  end
16
36
  end
17
37
 
38
+ def as(pattern)
39
+ which = "Uia::Patterns::#{pattern.to_s.capitalize}".split('::').reduce(Object) do |m, current|
40
+ m.const_get current.split('_').map(&:capitalize).join
41
+ end
42
+ extend which
43
+ end
44
+
45
+ def patterns
46
+ @element.pattern_ids.map {|id| Library::Constants::Patterns.find(@default) { |_, v| v == id }.first }
47
+ end
48
+
18
49
  def children
19
50
  @element.children.map { |c| Element.new c }
20
51
  end
@@ -27,12 +58,5 @@ module Uia
27
58
  Library.click(@element)
28
59
  true
29
60
  end
30
-
31
- def method_missing(meth, *args, &block)
32
- if @element.respond_to? meth
33
- return @element.send(meth, *args, &block)
34
- end
35
- super
36
- end
37
61
  end
38
62
  end