uia 0.0.5.1 → 0.0.6
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.
- data/ChangeLog +17 -2
 - data/Gemfile +1 -0
 - data/Rakefile +13 -0
 - data/ext/UiaDll/UIA.Helper/{AutomationProperty.cs → AutomationPropertyCondition.cs} +1 -1
 - data/ext/UiaDll/UIA.Helper/Element.cs +46 -6
 - data/ext/UiaDll/UIA.Helper/Extensions.cs +13 -0
 - data/ext/UiaDll/UIA.Helper/UIA.Helper.csproj +1 -1
 - data/ext/UiaDll/UiaDll.Test/ElementInformationTest.cpp +20 -4
 - data/ext/UiaDll/UiaDll.Test/ElementStub.h +16 -2
 - data/ext/UiaDll/UiaDll.Test/PatternInformationTest.cpp +35 -0
 - data/ext/UiaDll/UiaDll.Test/UiaDll.Test.vcxproj +6 -4
 - data/ext/UiaDll/UiaDll.Test/UiaDll.Test.vcxproj.filters +3 -0
 - data/ext/UiaDll/UiaDll/ElementMethods.cpp +62 -17
 - data/ext/UiaDll/UiaDll/ElementStructures.h +19 -9
 - data/ext/UiaDll/UiaDll/ExpandCollapseMethods.cpp +33 -0
 - data/ext/UiaDll/UiaDll/InvokePatternMethods.cpp +11 -0
 - data/ext/UiaDll/UiaDll/PatternInformationStructures.h +90 -0
 - data/ext/UiaDll/UiaDll/SelectionItemMethods.cpp +40 -0
 - data/ext/UiaDll/UiaDll/SelectionMethods.cpp +16 -0
 - data/ext/UiaDll/UiaDll/Stdafx.h +3 -0
 - data/ext/UiaDll/UiaDll/ToggleMethods.cpp +25 -0
 - data/ext/UiaDll/UiaDll/UiaDll.vcxproj +9 -0
 - data/ext/UiaDll/UiaDll/UiaDll.vcxproj.filters +24 -0
 - data/ext/UiaDll/UiaDll/ValuePatternMethods.cpp +25 -0
 - data/lib/uia.rb +14 -6
 - data/lib/uia/element.rb +35 -11
 - data/lib/uia/finder.rb +33 -0
 - data/lib/uia/library.rb +48 -6
 - data/lib/uia/library/element_attributes.rb +11 -0
 - data/lib/uia/library/structs.rb +93 -5
 - data/lib/uia/patterns/expand_collapse.rb +17 -0
 - data/lib/uia/patterns/invoke.rb +9 -0
 - data/lib/uia/patterns/selection.rb +17 -0
 - data/lib/uia/patterns/selection_item.rb +25 -0
 - data/lib/uia/patterns/toggle.rb +17 -0
 - data/lib/uia/patterns/value.rb +22 -0
 - data/lib/uia/version.rb +1 -1
 - data/spec/spec_helper.rb +0 -2
 - data/spec/uia/element_spec.rb +35 -8
 - data/spec/uia/patterns/expand_collapse_spec.rb +24 -0
 - data/spec/uia/patterns/invoke_spec.rb +15 -0
 - data/spec/uia/patterns/selection_item_spec.rb +55 -0
 - data/spec/uia/patterns/selection_spec.rb +30 -0
 - data/spec/uia/patterns/toggle_spec.rb +41 -0
 - data/spec/uia/patterns/value_spec.rb +16 -0
 - data/spec/uia_spec.rb +26 -7
 - 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 
     | 
    
         
            -
               
     | 
| 
      
 16 
     | 
    
         
            +
              bool isEnabled;
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
              _ElementInformation( 
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 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  
     | 
| 
      
 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, * 
     | 
| 
      
 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++]. 
     | 
| 
      
 67 
     | 
    
         
            +
                  this->elements[index++].Refresh(element);
         
     | 
| 
       58 
68 
     | 
    
         
             
                }
         
     | 
| 
       59 
69 
     | 
    
         
             
              }
         
     | 
| 
       60 
70 
     | 
    
         | 
| 
       61 
71 
     | 
    
         
             
              ~_Elements() {
         
     | 
| 
       62 
72 
     | 
    
         
             
                delete[] elements;
         
     | 
| 
       63 
73 
     | 
    
         
             
              }
         
     | 
| 
       64 
     | 
    
         
            -
            } Elements, * 
     | 
| 
      
 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 
     | 
    
         
            +
            }
         
     | 
    
        data/ext/UiaDll/UiaDll/Stdafx.h
    CHANGED
    
    
| 
         @@ -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 
     | 
    
         
            -
                     
     | 
| 
      
 18 
     | 
    
         
            +
                    find_by_id how[:id]
         
     | 
| 
      
 19 
     | 
    
         
            +
                  when how[:name]
         
     | 
| 
      
 20 
     | 
    
         
            +
                    find_by_name how[:name]
         
     | 
| 
       13 
21 
     | 
    
         
             
                  when how[:pid]
         
     | 
| 
       14 
     | 
    
         
            -
                     
     | 
| 
      
 22 
     | 
    
         
            +
                    find_by_pid how[:pid]
         
     | 
| 
       15 
23 
     | 
    
         
             
                  when how[:runtime_id]
         
     | 
| 
       16 
     | 
    
         
            -
                     
     | 
| 
      
 24 
     | 
    
         
            +
                    find_by_runtime_id how[:runtime_id]
         
     | 
| 
       17 
25 
     | 
    
         
             
                  when how[:handle]
         
     | 
| 
       18 
     | 
    
         
            -
                     
     | 
| 
      
 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  
     | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 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
         
     |