rautomation 2.0.1-x86-mingw32
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 +7 -0
- data/.document +5 -0
- data/.gitignore +41 -0
- data/.rspec +2 -0
- data/.yardopts +8 -0
- data/CHANGES.md +276 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +142 -0
- data/Rakefile +73 -0
- data/ext/AutoItX/AutoItX.chm +0 -0
- data/ext/AutoItX/AutoItX3.dll +0 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.cpp +30 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.vcxproj +179 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.vcxproj.filters +42 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.vcxproj.user +3 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/ReadMe.txt +48 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/dllmain.cpp +19 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/stdafx.cpp +8 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/stdafx.h +22 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/table_support.cpp +282 -0
- data/ext/IAccessibleDLL/IAccessibleDLL/targetver.h +8 -0
- data/ext/IAccessibleDLL/IAccessibleDLL.sln +31 -0
- data/ext/IAccessibleDLL/IAccessibleDLL.suo +0 -0
- data/ext/IAccessibleDLL/Release/IAccessibleDLL.dll +0 -0
- data/ext/UiaDll/RAutomation.UIA/Controls/Clicker.cs +63 -0
- data/ext/UiaDll/RAutomation.UIA/Controls/SelectList.cs +116 -0
- data/ext/UiaDll/RAutomation.UIA/Controls/Spinner.cs +46 -0
- data/ext/UiaDll/RAutomation.UIA/Controls/TabControl.cs +54 -0
- data/ext/UiaDll/RAutomation.UIA/Controls/TableControl.cs +132 -0
- data/ext/UiaDll/RAutomation.UIA/Controls/TextControl.cs +50 -0
- data/ext/UiaDll/RAutomation.UIA/Expander.cs +59 -0
- data/ext/UiaDll/RAutomation.UIA/Extensions/Element.cs +166 -0
- data/ext/UiaDll/RAutomation.UIA/Extensions/Enumerable.cs +76 -0
- data/ext/UiaDll/RAutomation.UIA/Extensions/Property.cs +27 -0
- data/ext/UiaDll/RAutomation.UIA/Properties/AssemblyInfo.cs +36 -0
- data/ext/UiaDll/RAutomation.UIA/Properties/AutomationProperties.cs +18 -0
- data/ext/UiaDll/RAutomation.UIA/RAutomation.UIA.csproj +77 -0
- data/ext/UiaDll/Release/RAutomation.UIA.dll +0 -0
- data/ext/UiaDll/Release/UiaDll.dll +0 -0
- data/ext/UiaDll/UiaDll/ArrayHelper.cpp +14 -0
- data/ext/UiaDll/UiaDll/ArrayHelper.h +7 -0
- data/ext/UiaDll/UiaDll/AssemblyInfo.cpp +40 -0
- data/ext/UiaDll/UiaDll/ControlMethods.cpp +16 -0
- data/ext/UiaDll/UiaDll/DynamicAssemblyResolver.cpp +24 -0
- data/ext/UiaDll/UiaDll/DynamicAssemblyResolver.h +16 -0
- data/ext/UiaDll/UiaDll/Locator.cpp +93 -0
- data/ext/UiaDll/UiaDll/Locator.h +55 -0
- data/ext/UiaDll/UiaDll/MenuItemSelector.cpp +75 -0
- data/ext/UiaDll/UiaDll/MenuItemSelector.h +24 -0
- data/ext/UiaDll/UiaDll/MenuMethods.cpp +62 -0
- data/ext/UiaDll/UiaDll/ReadMe.txt +38 -0
- data/ext/UiaDll/UiaDll/SelectListMethods.cpp +84 -0
- data/ext/UiaDll/UiaDll/SpinnerMethods.cpp +61 -0
- data/ext/UiaDll/UiaDll/StringHelper.cpp +57 -0
- data/ext/UiaDll/UiaDll/StringHelper.h +15 -0
- data/ext/UiaDll/UiaDll/StringMethods.cpp +8 -0
- data/ext/UiaDll/UiaDll/TabControlMethods.cpp +40 -0
- data/ext/UiaDll/UiaDll/TableMethods.cpp +108 -0
- data/ext/UiaDll/UiaDll/TextMethods.cpp +25 -0
- data/ext/UiaDll/UiaDll/ToggleStateHelper.h +10 -0
- data/ext/UiaDll/UiaDll/UiaDll.cpp +216 -0
- data/ext/UiaDll/UiaDll/UiaDll.h +13 -0
- data/ext/UiaDll/UiaDll/UiaDll.vcxproj +167 -0
- data/ext/UiaDll/UiaDll/UiaDll.vcxproj.filters +110 -0
- data/ext/UiaDll/UiaDll/app.ico +0 -0
- data/ext/UiaDll/UiaDll/app.rc +0 -0
- data/ext/UiaDll/UiaDll/dllmain.cpp +1 -0
- data/ext/UiaDll/UiaDll/resource.h +3 -0
- data/ext/UiaDll/UiaDll/stdafx.cpp +5 -0
- data/ext/UiaDll/UiaDll/stdafx.h +41 -0
- data/ext/UiaDll/UiaDll/targetver.h +8 -0
- data/ext/UiaDll/UiaDll.sln +57 -0
- data/ext/WindowsForms/.nuget/NuGet.Config +6 -0
- data/ext/WindowsForms/.nuget/NuGet.exe +0 -0
- data/ext/WindowsForms/.nuget/NuGet.targets +136 -0
- data/ext/WindowsForms/Release/FizzWare.NBuilder.dll +0 -0
- data/ext/WindowsForms/Release/UIA.Extensions.dll +0 -0
- data/ext/WindowsForms/Release/WindowsForms.exe +0 -0
- data/ext/WindowsForms/WindowsForms/AboutBox.Designer.cs +168 -0
- data/ext/WindowsForms/WindowsForms/AboutBox.cs +103 -0
- data/ext/WindowsForms/WindowsForms/AboutBox.resx +123 -0
- data/ext/WindowsForms/WindowsForms/DataEntryForm.Designer.cs +218 -0
- data/ext/WindowsForms/WindowsForms/DataEntryForm.cs +52 -0
- data/ext/WindowsForms/WindowsForms/DataEntryForm.resx +120 -0
- data/ext/WindowsForms/WindowsForms/DataGridView.Designer.cs +77 -0
- data/ext/WindowsForms/WindowsForms/DataGridView.cs +43 -0
- data/ext/WindowsForms/WindowsForms/DataGridView.resx +120 -0
- data/ext/WindowsForms/WindowsForms/FizzWare.NBuilder.dll +0 -0
- data/ext/WindowsForms/WindowsForms/MainFormWindow.Designer.cs +527 -0
- data/ext/WindowsForms/WindowsForms/MainFormWindow.cs +109 -0
- data/ext/WindowsForms/WindowsForms/MainFormWindow.resx +126 -0
- data/ext/WindowsForms/WindowsForms/PersonForm.Designer.cs +119 -0
- data/ext/WindowsForms/WindowsForms/PersonForm.cs +34 -0
- data/ext/WindowsForms/WindowsForms/PersonForm.resx +120 -0
- data/ext/WindowsForms/WindowsForms/Program.cs +21 -0
- data/ext/WindowsForms/WindowsForms/Properties/AssemblyInfo.cs +36 -0
- data/ext/WindowsForms/WindowsForms/Properties/Resources.Designer.cs +71 -0
- data/ext/WindowsForms/WindowsForms/Properties/Resources.resx +117 -0
- data/ext/WindowsForms/WindowsForms/Properties/Settings.Designer.cs +30 -0
- data/ext/WindowsForms/WindowsForms/Properties/Settings.settings +7 -0
- data/ext/WindowsForms/WindowsForms/SimpleElementsForm.Designer.cs +93 -0
- data/ext/WindowsForms/WindowsForms/SimpleElementsForm.cs +19 -0
- data/ext/WindowsForms/WindowsForms/SimpleElementsForm.resx +120 -0
- data/ext/WindowsForms/WindowsForms/UIA.Extensions.dll +0 -0
- data/ext/WindowsForms/WindowsForms/ValueMonthCalendar.cs +28 -0
- data/ext/WindowsForms/WindowsForms/WindowsForms.csproj +166 -0
- data/ext/WindowsForms/WindowsForms/packages.config +4 -0
- data/ext/WindowsForms/WindowsForms.sln +46 -0
- data/lib/rautomation/adapter/autoit/button.rb +59 -0
- data/lib/rautomation/adapter/autoit/locators.rb +22 -0
- data/lib/rautomation/adapter/autoit/mouse.rb +38 -0
- data/lib/rautomation/adapter/autoit/text_field.rb +70 -0
- data/lib/rautomation/adapter/autoit/window.rb +197 -0
- data/lib/rautomation/adapter/autoit.rb +8 -0
- data/lib/rautomation/adapter/helper.rb +64 -0
- data/lib/rautomation/adapter/ms_uia/button.rb +21 -0
- data/lib/rautomation/adapter/ms_uia/button_helper.rb +19 -0
- data/lib/rautomation/adapter/ms_uia/checkbox.rb +23 -0
- data/lib/rautomation/adapter/ms_uia/constants.rb +111 -0
- data/lib/rautomation/adapter/ms_uia/control.rb +134 -0
- data/lib/rautomation/adapter/ms_uia/functions.rb +279 -0
- data/lib/rautomation/adapter/ms_uia/keys.rb +121 -0
- data/lib/rautomation/adapter/ms_uia/keystroke_converter.rb +122 -0
- data/lib/rautomation/adapter/ms_uia/label.rb +18 -0
- data/lib/rautomation/adapter/ms_uia/list_box.rb +46 -0
- data/lib/rautomation/adapter/ms_uia/list_item.rb +22 -0
- data/lib/rautomation/adapter/ms_uia/locators.rb +23 -0
- data/lib/rautomation/adapter/ms_uia/menu.rb +36 -0
- data/lib/rautomation/adapter/ms_uia/radio.rb +23 -0
- data/lib/rautomation/adapter/ms_uia/select_list.rb +85 -0
- data/lib/rautomation/adapter/ms_uia/spinner.rb +31 -0
- data/lib/rautomation/adapter/ms_uia/tab_control.rb +46 -0
- data/lib/rautomation/adapter/ms_uia/table.rb +140 -0
- data/lib/rautomation/adapter/ms_uia/text_field.rb +39 -0
- data/lib/rautomation/adapter/ms_uia/uia_dll.rb +428 -0
- data/lib/rautomation/adapter/ms_uia/value_control.rb +21 -0
- data/lib/rautomation/adapter/ms_uia/window.rb +289 -0
- data/lib/rautomation/adapter/ms_uia.rb +27 -0
- data/lib/rautomation/adapter/win_32/button.rb +14 -0
- data/lib/rautomation/adapter/win_32/button_helper.rb +24 -0
- data/lib/rautomation/adapter/win_32/checkbox.rb +14 -0
- data/lib/rautomation/adapter/win_32/constants.rb +73 -0
- data/lib/rautomation/adapter/win_32/control.rb +86 -0
- data/lib/rautomation/adapter/win_32/functions.rb +336 -0
- data/lib/rautomation/adapter/win_32/keys.rb +146 -0
- data/lib/rautomation/adapter/win_32/label.rb +10 -0
- data/lib/rautomation/adapter/win_32/list_box.rb +40 -0
- data/lib/rautomation/adapter/win_32/locators.rb +22 -0
- data/lib/rautomation/adapter/win_32/mouse.rb +59 -0
- data/lib/rautomation/adapter/win_32/password_field.rb +15 -0
- data/lib/rautomation/adapter/win_32/radio.rb +11 -0
- data/lib/rautomation/adapter/win_32/select_list.rb +97 -0
- data/lib/rautomation/adapter/win_32/table.rb +25 -0
- data/lib/rautomation/adapter/win_32/text_field.rb +52 -0
- data/lib/rautomation/adapter/win_32/window.rb +277 -0
- data/lib/rautomation/adapter/win_32.rb +23 -0
- data/lib/rautomation/button.rb +55 -0
- data/lib/rautomation/element_collections.rb +55 -0
- data/lib/rautomation/platform.rb +15 -0
- data/lib/rautomation/text_field.rb +60 -0
- data/lib/rautomation/version.rb +3 -0
- data/lib/rautomation/wait_helper.rb +23 -0
- data/lib/rautomation/window.rb +248 -0
- data/lib/rautomation.rb +8 -0
- data/rautomation.gemspec +52 -0
- data/spec/adapter/autoit/mouse_spec.rb +53 -0
- data/spec/adapter/autoit/window_spec.rb +17 -0
- data/spec/adapter/ms_uia/button_spec.rb +39 -0
- data/spec/adapter/ms_uia/checkbox_spec.rb +55 -0
- data/spec/adapter/ms_uia/control_spec.rb +88 -0
- data/spec/adapter/ms_uia/functions_spec.rb +39 -0
- data/spec/adapter/ms_uia/keystroke_converter_spec.rb +48 -0
- data/spec/adapter/ms_uia/label_spec.rb +18 -0
- data/spec/adapter/ms_uia/list_item_spec.rb +14 -0
- data/spec/adapter/ms_uia/listbox_spec.rb +73 -0
- data/spec/adapter/ms_uia/radio_spec.rb +39 -0
- data/spec/adapter/ms_uia/select_list_spec.rb +118 -0
- data/spec/adapter/ms_uia/spinner_spec.rb +44 -0
- data/spec/adapter/ms_uia/tab_control_spec.rb +53 -0
- data/spec/adapter/ms_uia/table_spec.rb +197 -0
- data/spec/adapter/ms_uia/text_field_spec.rb +43 -0
- data/spec/adapter/ms_uia/value_control_spec.rb +11 -0
- data/spec/adapter/ms_uia/window_spec.rb +81 -0
- data/spec/adapter/win_32/button_spec.rb +31 -0
- data/spec/adapter/win_32/checkbox_spec.rb +46 -0
- data/spec/adapter/win_32/label_spec.rb +13 -0
- data/spec/adapter/win_32/listbox_spec.rb +41 -0
- data/spec/adapter/win_32/mouse_spec.rb +49 -0
- data/spec/adapter/win_32/radio_spec.rb +33 -0
- data/spec/adapter/win_32/select_list_spec.rb +65 -0
- data/spec/adapter/win_32/table_spec.rb +27 -0
- data/spec/adapter/win_32/text_field_spec.rb +24 -0
- data/spec/adapter/win_32/window_spec.rb +61 -0
- data/spec/button_spec.rb +67 -0
- data/spec/buttons_spec.rb +21 -0
- data/spec/spec_helper.rb +128 -0
- data/spec/text_field_spec.rb +64 -0
- data/spec/text_fields_spec.rb +22 -0
- data/spec/window_spec.rb +150 -0
- data/spec/windows_spec.rb +76 -0
- metadata +369 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d8c326b3fdb48e487d3729957fb28e521a7d5d7e4390e1217937f5fc121fa95c
|
4
|
+
data.tar.gz: 678161c7a4adf3cb6d729ffa939f4d98044f9a3c9aba742937e9446f99b8fef6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 97ee462a55acfb4732813f47cca9b0132648ac1a4874973724cbe7f6d296d39e53567399c72323cf07497264417e68f05a1d74467f2722610846c8be23f13544
|
7
|
+
data.tar.gz: b6b54d63b44484daafc090ff99baf1bcbc90e9b0e5e4aee9c344d323dfa7f9436f0a96c34b762547590630fb6051a1962c68ff9575ae7d944d01fe51186c975d
|
data/.document
ADDED
data/.gitignore
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## PROJECT::GENERAL
|
17
|
+
/coverage
|
18
|
+
/rdoc
|
19
|
+
/pkg
|
20
|
+
/ext/IAccessibleDLL/x64Release/
|
21
|
+
/ext/IAccessibleDLL/x86Release/
|
22
|
+
/ext/UiaDll/x64Release/
|
23
|
+
/ext/UiaDll/x86Release/
|
24
|
+
|
25
|
+
## PROJECT::SPECIFIC
|
26
|
+
/.idea/*
|
27
|
+
|
28
|
+
/.yardoc/
|
29
|
+
/doc/
|
30
|
+
|
31
|
+
## VisualStudio
|
32
|
+
Debug
|
33
|
+
Release
|
34
|
+
ipch
|
35
|
+
*.sdf
|
36
|
+
*.suo
|
37
|
+
*.user
|
38
|
+
*.opensdf
|
39
|
+
_ReSharper*/
|
40
|
+
packages/
|
41
|
+
.vs/
|
data/.rspec
ADDED
data/.yardopts
ADDED
data/CHANGES.md
ADDED
@@ -0,0 +1,276 @@
|
|
1
|
+
## 2.0.1 / 2023-03-25
|
2
|
+
|
3
|
+
* Gem platform attribute value change.
|
4
|
+
|
5
|
+
## 2.0.0 / 2023-03-25
|
6
|
+
|
7
|
+
* Add support for 64bit Ruby for the Win32 adapter. PR #136
|
8
|
+
|
9
|
+
## 1.1.0 / 2021-12-03
|
10
|
+
|
11
|
+
* Update ffi dependency to ~> 1.15.0. PR #132
|
12
|
+
|
13
|
+
## 1.0.0 / 2019-12-11
|
14
|
+
|
15
|
+
* Update ffi dependency to ~> 1.11.0.
|
16
|
+
* Use Visual Studio 2019 Build Tools for running tests.
|
17
|
+
|
18
|
+
## 0.17.0 / 2014-09-29
|
19
|
+
|
20
|
+
### Win32 adapter
|
21
|
+
|
22
|
+
* Fix searching locators by hwnd. See more at issue #96.
|
23
|
+
|
24
|
+
## 0.16.0 / 2014-09-29
|
25
|
+
|
26
|
+
* Loosen up ffi dependency due to fixed segfault problem. See more at issue #81.
|
27
|
+
|
28
|
+
## 0.15.0 / 2014-06-01
|
29
|
+
|
30
|
+
* Fixes #send_keys with special characters. Issue #92.
|
31
|
+
|
32
|
+
## 0.14.1 / 2014-02-05
|
33
|
+
|
34
|
+
* Set ffi 1.9.0 as a dependency for now because newer versions are broken. See more at issue #81.
|
35
|
+
|
36
|
+
## 0.14.0 / 2014-02-05
|
37
|
+
|
38
|
+
### MsUia adapter
|
39
|
+
|
40
|
+
* Add SelectList#select and SelectList#clear.
|
41
|
+
* Add Table#select and Table#clear.
|
42
|
+
* Add Table#selected_rows.
|
43
|
+
* Improve performance of table Row lookups.
|
44
|
+
* SelectList#options accepts :index and :text (Regexp or String).
|
45
|
+
* Window#child in ms_uia works for popup windows as well.
|
46
|
+
|
47
|
+
## 0.13.0
|
48
|
+
|
49
|
+
### MsUia adapter
|
50
|
+
|
51
|
+
* Added #select and #clear into SelectList::SelectListOption for multi-select support
|
52
|
+
* Removed SelectList#select and SelectList#set
|
53
|
+
* Added #select, #selected? and #clear to Table::Row for multi-select support
|
54
|
+
* Removed Table#select and Table#selected?
|
55
|
+
* Fixed an issue with selecting ListBox items that our outside of the viewable area
|
56
|
+
|
57
|
+
## 0.12.0 / 2013-09-05
|
58
|
+
|
59
|
+
### MsUia adapter
|
60
|
+
|
61
|
+
* Add Control#help_text to relay ToolTip information
|
62
|
+
|
63
|
+
## 0.11.0 / 2013-08-10
|
64
|
+
|
65
|
+
### MsUia adapter
|
66
|
+
|
67
|
+
* Add support for Window#spinner
|
68
|
+
|
69
|
+
## 0.10.0 / 2013-07-26
|
70
|
+
|
71
|
+
### MsUia adapter
|
72
|
+
|
73
|
+
* Fixed an issue with trying to interact with a button after it goes away
|
74
|
+
* Add support for Window#tab_control
|
75
|
+
|
76
|
+
## 0.9.4 / 2013-07-23
|
77
|
+
|
78
|
+
* Add license part of gemspec. Closes #70.
|
79
|
+
|
80
|
+
## 0.9.3 / 2013-07-23
|
81
|
+
|
82
|
+
### MsUia adapter
|
83
|
+
|
84
|
+
* Added the ability to limit the scope to children only when looking for a control
|
85
|
+
* Fixed issues with ListBox controls not firing index change events
|
86
|
+
|
87
|
+
## 0.9.2 / 2013-05-19
|
88
|
+
|
89
|
+
### Win32 adapter
|
90
|
+
|
91
|
+
* Window#send_keys supports now :dash, :slash and :backslash. Closes #64.
|
92
|
+
|
93
|
+
### MsUia adapter
|
94
|
+
|
95
|
+
* Ability to get and set the text of a multi-line text control that only supports the TextPattern.
|
96
|
+
* Add some caching to speed up locating controls.
|
97
|
+
* Fix issue #67 that happens when clicking on controls.
|
98
|
+
|
99
|
+
### AutoIt adapter
|
100
|
+
|
101
|
+
* Add deprecation warning.
|
102
|
+
|
103
|
+
## 0.9.1 / 2013-04-26
|
104
|
+
|
105
|
+
### MsUia adapter
|
106
|
+
|
107
|
+
* Ability to interact with controls that do not have native window handles (for example WPF applications).
|
108
|
+
|
109
|
+
## 0.9.0 / 2013-04-22
|
110
|
+
|
111
|
+
### MsUia adapter
|
112
|
+
|
113
|
+
* Add support for :name locator.
|
114
|
+
* Add support for Window#value_control.
|
115
|
+
* Add Table#headers.
|
116
|
+
* Add Table#values.
|
117
|
+
* Control#exists? uses now uia code.
|
118
|
+
* ControlType.Document is also considered as a TextField.
|
119
|
+
* Table#select and Table#selected? use 0-based indexing.
|
120
|
+
* Table#select supports value too.
|
121
|
+
|
122
|
+
### Win32 adapter
|
123
|
+
|
124
|
+
* Add support for "[", "]" and "'" characters when using Window#send_keys. Fixes #61.
|
125
|
+
|
126
|
+
## 0.8.0 / 2012-12-26
|
127
|
+
|
128
|
+
### MsUia adapter
|
129
|
+
|
130
|
+
* Add Control#collapse for collapsing values in collapsable items.
|
131
|
+
* Add Control#expand for expanding values in expandable items.
|
132
|
+
* Add Row#cell(s).
|
133
|
+
* Add Table#cell(s).
|
134
|
+
* Add Table#row(s).
|
135
|
+
* Add Window#menu for selecting menu items.
|
136
|
+
* Fire change events when SelectList selections have been changed.
|
137
|
+
* Window#child instantiates MsUia adapter Window.
|
138
|
+
|
139
|
+
## 0.7.3 / 2012-10-31
|
140
|
+
|
141
|
+
### Win32 adapter
|
142
|
+
|
143
|
+
* Add support for PasswordField.
|
144
|
+
|
145
|
+
### AutoIt adapter
|
146
|
+
|
147
|
+
* Show error message when registration of AutoIt dll fails.
|
148
|
+
|
149
|
+
## 0.7.2 / 2012-03-18
|
150
|
+
|
151
|
+
### Win32 adapter
|
152
|
+
|
153
|
+
* add mouse API with Window#mouse method
|
154
|
+
* add Mouse#move, #position, #click, #press and #release methods
|
155
|
+
|
156
|
+
### AutoIt adapter
|
157
|
+
|
158
|
+
* support the same mouse API as Win32 adapter
|
159
|
+
|
160
|
+
## 0.7.1 / 2012-02-26
|
161
|
+
|
162
|
+
### Win32 adapter
|
163
|
+
|
164
|
+
* add Window#dimensions to get coordinates of the window
|
165
|
+
* add Window#move to move/resize the window
|
166
|
+
* fix Window#child not to raise any exceptions for cases where window isn't technically a child
|
167
|
+
|
168
|
+
## Version 0.7.0 / 2012-02-23
|
169
|
+
|
170
|
+
### All adapters
|
171
|
+
|
172
|
+
* renamed WinFfi adapter to Win32 adapter
|
173
|
+
* added experimental MsUia adapter
|
174
|
+
* added support for JRuby
|
175
|
+
* Window.windows accepts locators too
|
176
|
+
* added Window#class_names for retrieving internal class names of the window and it's controls
|
177
|
+
* default locator is :index => 0 when nothing else specified
|
178
|
+
|
179
|
+
### Win32 adapter
|
180
|
+
|
181
|
+
* Window#send_keys has now syntax similar to WatirSpec (https://github.com/watir/watirspec/blob/master/element_spec.rb#L206-249)
|
182
|
+
* added TextField#send_keys
|
183
|
+
|
184
|
+
### AutoIt adapter
|
185
|
+
|
186
|
+
* added Window#mouse_move, #mouse_click, #mouse_position, #press_mouse and #release_mouse methods for AutoIt adapter
|
187
|
+
|
188
|
+
## Version 0.6.3 / 2011-07-16
|
189
|
+
|
190
|
+
* use current window's handle (hwnd) in WinFfi::Window#child method
|
191
|
+
|
192
|
+
## Version 0.6.2 / 2011-07-07
|
193
|
+
|
194
|
+
### WinFFI adapter
|
195
|
+
|
196
|
+
* loading lazily oleacc.dll
|
197
|
+
* loading lazily uia_dll.rb due to problems on certain Windows XP machines
|
198
|
+
|
199
|
+
## Version 0.6.1 / 2011-07-05
|
200
|
+
|
201
|
+
### WinFFI adapter
|
202
|
+
|
203
|
+
* Fixed it for Ruby 1.9.2.
|
204
|
+
|
205
|
+
## Version 0.6.0 / 2011-07-03
|
206
|
+
|
207
|
+
### WinFFI adapter
|
208
|
+
|
209
|
+
* Window#send_keys now accepts only String argument similar to AutoIt's Send function.
|
210
|
+
* added Table#strings, #select, #selected? methods.
|
211
|
+
* added Label element support with #value method.
|
212
|
+
* added #has_focus? and #set_focus methods to controls.
|
213
|
+
* added possibility to search controls by automation id as :id.
|
214
|
+
* added #enabled? and #disabled? methods for controls.
|
215
|
+
* added Window#control and #controls methods for accessing controls generally.
|
216
|
+
* added SelectList#option method.
|
217
|
+
* added ListBox element support with #count, #items, #exist?, #selected? and #select methods.
|
218
|
+
|
219
|
+
## Version 0.5.1 / 2011-01-30
|
220
|
+
|
221
|
+
### All adapters
|
222
|
+
|
223
|
+
* added Window.windows, #windows, #buttons and #text_fields methods to retrieve collection of elements and use them with Enumerable/Array methods.
|
224
|
+
|
225
|
+
### WinFFI adapter
|
226
|
+
|
227
|
+
* added Window#child method for searching child windows and popups
|
228
|
+
* added initial support for Radio, Checkbox, SelectList and Table
|
229
|
+
|
230
|
+
### AutoIt adapter
|
231
|
+
|
232
|
+
* allow to search windows by PID
|
233
|
+
|
234
|
+
## Version 0.4.0 / 2010-12-23
|
235
|
+
|
236
|
+
* allow to search windows without text (like empty Notepad window for example).
|
237
|
+
* added possibility to use block for #click to specify successful clicking condition.
|
238
|
+
* renamed :ffi adapter to :win_ffi because FFI may be used on other platforms too.
|
239
|
+
|
240
|
+
## Version 0.3.0 / 2010-12-18
|
241
|
+
|
242
|
+
* added Ffi adapter specific method Window#child which searches for child windows and popups
|
243
|
+
|
244
|
+
## Version 0.2.1 / 2010-12-17
|
245
|
+
|
246
|
+
* added yard options for documentation
|
247
|
+
|
248
|
+
## Version 0.2.0 / 2010-12-17
|
249
|
+
|
250
|
+
* added Window#pid method
|
251
|
+
|
252
|
+
## Version 0.1.0 / 2010-12-14
|
253
|
+
|
254
|
+
* added new default adapter for Windows: FFI
|
255
|
+
* changes for AutoIt adapter:
|
256
|
+
- added 0-based :index locator for window locators to search for windows with the same criteria.
|
257
|
+
- renamed text_field and button locator :instance to :index instead.
|
258
|
+
- :class_name locator is not allowed anymore. Use :class and :index together instead.
|
259
|
+
- use :value for button locator instead of :text
|
260
|
+
|
261
|
+
## Version 0.0.4 / 2010-10-27
|
262
|
+
|
263
|
+
* most Window, Button and TextField methods wait until the object exists. Use RAutomation::Window.wait_timeout= to set timeout before failing. Default is 60 seconds.
|
264
|
+
|
265
|
+
## Version 0.0.3 / 2010-10-15
|
266
|
+
|
267
|
+
* RAutomation didn't load AutoIt correctly if it wasn't installed before
|
268
|
+
|
269
|
+
## Version 0.0.2 / 2010-10-14
|
270
|
+
|
271
|
+
* using :value locator for buttons instead of :text
|
272
|
+
* searching only visible windows with some text on them
|
273
|
+
|
274
|
+
## Version 0.0.1 / 2010-10-13
|
275
|
+
|
276
|
+
* Initial release
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) Jarmo Pertman
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
# RAutomation
|
2
|
+
|
3
|
+
[](http://badge.fury.io/rb/rautomation)
|
4
|
+
|
5
|
+
* Web: http://www.github.com/jarmo/RAutomation
|
6
|
+
* Author: Jarmo Pertman [jarmo@jarmopertman.com](mailto:jarmo@jarmopertman.com)
|
7
|
+
|
8
|
+
|
9
|
+
RAutomation is a small and easy to use library for helping out to automate
|
10
|
+
windows and their controls for automated testing.
|
11
|
+
|
12
|
+
RAutomation provides:
|
13
|
+
* Easy to use and user-friendly API (inspired by [Watir](http://www.watir.com))
|
14
|
+
* Cross-platform compatibility
|
15
|
+
* Easy extensibility - with small scripting effort it's possible to add
|
16
|
+
support for not yet supported platforms or technologies
|
17
|
+
|
18
|
+
|
19
|
+
## USAGE
|
20
|
+
|
21
|
+
require "rautomation"
|
22
|
+
|
23
|
+
window = RAutomation::Window.new(:title => /part of the title/i)
|
24
|
+
window.exists? # => true
|
25
|
+
|
26
|
+
window.title # => "blah blah part Of the title blah"
|
27
|
+
window.text # => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultricies..."
|
28
|
+
|
29
|
+
window.text_field(:class => "Edit", :index => 0).set "hello, world!"
|
30
|
+
button = window.button(:value => "&Save")
|
31
|
+
button.exists? # => true
|
32
|
+
button.click
|
33
|
+
|
34
|
+
all_windows = RAutomation::Window.windows
|
35
|
+
all_windows.each {|window| puts window.hwnd}
|
36
|
+
|
37
|
+
window = RAutomation::Window.new(:title => /part of the title/i)
|
38
|
+
windows = window.windows
|
39
|
+
puts windows.size # => 2
|
40
|
+
windows.map &:title # => ["part of the title 1", "part of the title 2"]
|
41
|
+
|
42
|
+
window.windows(:title => /part of other title/i) # => all windows with matching specified title
|
43
|
+
|
44
|
+
window.buttons.each {|button| puts button.value}
|
45
|
+
window.buttons(:value => /some value/i).each {|button| puts button.value}
|
46
|
+
|
47
|
+
window2 = RAutomation::Window.new(:title => "Other Title", :adapter => :autoit) # use AutoIt adapter
|
48
|
+
# use adapter's (in this case AutoIt's) internal methods not part of the public API directly
|
49
|
+
window2.WinClose("[TITLE:Other Title]")
|
50
|
+
|
51
|
+
Check out [the documentation](https://rubydoc.info/github/jarmo/RAutomation) for other possible usages!
|
52
|
+
|
53
|
+
## INSTALL
|
54
|
+
|
55
|
+
### Windows
|
56
|
+
|
57
|
+
gem install rautomation
|
58
|
+
|
59
|
+
Available adapters:
|
60
|
+
* :win_32 - uses Windows API directly with FFI (default)
|
61
|
+
* :ms_uia - an experimental adapter
|
62
|
+
* :autoit - uses AutoIt for automation (DEPRECATED)
|
63
|
+
|
64
|
+
|
65
|
+
When using AutoIt adapter: You might need administrative privileges if running
|
66
|
+
for the first time and you haven't installed AutoIt before!
|
67
|
+
|
68
|
+
### Linux
|
69
|
+
|
70
|
+
Feel yourself at home on Linux and know how to automate windows and their
|
71
|
+
controls? I would be happy if you'd contact me about that matter - or even
|
72
|
+
better, follow the instructions at "How to create a new adapter?"
|
73
|
+
|
74
|
+
### OS X
|
75
|
+
|
76
|
+
Feel yourself at home on OS X and know how to automate windows and their
|
77
|
+
controls? I would be happy if you'd contact me about that matter - or even
|
78
|
+
better, follow the instructions at "How to create a new adapter?"
|
79
|
+
|
80
|
+
### Others
|
81
|
+
|
82
|
+
Feel yourself at home on some operating system not listed in here and know how
|
83
|
+
to automate windows and their controls? Does Ruby also work on that operating
|
84
|
+
system? I would be happy if you'd contact me about that matter - or even
|
85
|
+
better, follow the instructions at "How to create a new adapter?"
|
86
|
+
|
87
|
+
## Supported Ruby Platforms
|
88
|
+
|
89
|
+
64bit Ruby platform is **only supported for Win32 adapter**.
|
90
|
+
Other adapters can be used only on a 32bit Ruby!
|
91
|
+
|
92
|
+
## How to create a new adapter?
|
93
|
+
|
94
|
+
1. Fork the project.
|
95
|
+
2. Create entry point file to lib/rautomation/adapter which should load all
|
96
|
+
adapter specific files.
|
97
|
+
3. Add `autoload` statement into lib/rautomation/adapter/helper.rb for that
|
98
|
+
file.
|
99
|
+
4. Create a directory for your adapter's specific code into
|
100
|
+
lib/rautomation/adapter
|
101
|
+
5. Copy button.rb, text_field.rb and window.rb from some of the existing
|
102
|
+
adapter's directory.
|
103
|
+
6. Add spec data for your adapter into spec/spec_helper DATA constant.
|
104
|
+
7. Use environment variable *RAUTOMATION_ADAPTER* to point to that adapter.
|
105
|
+
8. Start coding and spec-ing until as much of possible of the public API is
|
106
|
+
satisfied.
|
107
|
+
9. Make me a pull request.
|
108
|
+
|
109
|
+
|
110
|
+
Don't forget to fix the documentation for that adapter also!
|
111
|
+
|
112
|
+
In case of any problems, feel free to contact me.
|
113
|
+
|
114
|
+
## Contributors
|
115
|
+
|
116
|
+
* Levi Wilson - https://github.com/leviwilson
|
117
|
+
* Eric Kessler - https://github.com/enkessler
|
118
|
+
* Stephan Schwab - https://github.com/snscaimito
|
119
|
+
|
120
|
+
|
121
|
+
## Libraries Using RAutomation
|
122
|
+
|
123
|
+
* [watir-classic](https://github.com/watir/watir-classic)
|
124
|
+
* [mohawk](https://github.com/leviwilson/mohawk)
|
125
|
+
|
126
|
+
|
127
|
+
## Note on Patches/Pull Requests
|
128
|
+
|
129
|
+
* Fork the project.
|
130
|
+
* Make your feature addition or bug fix.
|
131
|
+
* Add tests for it. This is important so I don't break it in a future
|
132
|
+
version unintentionally.
|
133
|
+
* Commit, do not mess with rakefile, version, or history.
|
134
|
+
|
135
|
+
(if you want to have your own version, that is fine but bump version in a
|
136
|
+
commit by itself I can ignore when I pull)
|
137
|
+
* Send me a pull request. Bonus points for topic branches.
|
138
|
+
|
139
|
+
|
140
|
+
## Copyright
|
141
|
+
|
142
|
+
Copyright (c) Jarmo Pertman. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
def ext_dependencies(name)
|
8
|
+
FileList["ext/#{name}/**/*"].reject { |file| file =~ /(Release|Debug)/ }
|
9
|
+
end
|
10
|
+
|
11
|
+
def ms_build(name)
|
12
|
+
name = File.basename(name, File.extname(name))
|
13
|
+
cmd = "msbuild /p:Configuration=Release ext\\#{name}\\#{name}.sln"
|
14
|
+
cmd += " && #{cmd} /p:Platform=x64" unless name == 'WindowsForms'
|
15
|
+
sh(cmd)
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :build do
|
19
|
+
build_tasks = [
|
20
|
+
{:name => :uia_dll, :path => "UiaDll", :ext => "dll"},
|
21
|
+
{:name => :i_accessible_dll, :path => "IAccessibleDLL", :ext => "dll"},
|
22
|
+
{:name => :windows_forms, :path => "WindowsForms", :ext => "exe"}
|
23
|
+
]
|
24
|
+
|
25
|
+
build_tasks.each do |build_task|
|
26
|
+
full_ext_path = "ext/#{build_task[:path]}/Release/#{build_task[:path]}.#{build_task[:ext]}"
|
27
|
+
|
28
|
+
%w[x86Release x64Release].each do |output_dir|
|
29
|
+
full_ext_path = full_ext_path.gsub(/(?<!x86|x64)Release/, output_dir) unless build_task[:name] == :windows_forms
|
30
|
+
|
31
|
+
file full_ext_path => ext_dependencies(build_task[:path]) do |t|
|
32
|
+
ms_build(t.name)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Build #{build_task[:path]}"
|
37
|
+
task build_task[:name] => full_ext_path
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "Build all external dependencies"
|
41
|
+
task :all => build_tasks.map { |t| "build:#{t[:name]}"}
|
42
|
+
end
|
43
|
+
|
44
|
+
task :build => "build:all"
|
45
|
+
|
46
|
+
namespace :spec do
|
47
|
+
adapters = %w[win_32]
|
48
|
+
adapters << "ms_uia" if Platform.is_x86?
|
49
|
+
|
50
|
+
adapters.each do |adapter|
|
51
|
+
desc "Run RSpec code examples against #{adapter} adapter"
|
52
|
+
RSpec::Core::RakeTask.new(adapter) do |_task|
|
53
|
+
ENV["RAUTOMATION_ADAPTER"] = adapter
|
54
|
+
puts "Running specs for adapter: #{adapter}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "Run RSpec code examples against all adapters"
|
59
|
+
task :all => adapters.map {|a| "spec:#{a}"}
|
60
|
+
end
|
61
|
+
|
62
|
+
task :spec => "spec:all"
|
63
|
+
|
64
|
+
RSpec::Core::RakeTask.new(:rcov) { |spec| spec.rcov = true }
|
65
|
+
|
66
|
+
require 'yard'
|
67
|
+
YARD::Rake::YardocTask.new
|
68
|
+
|
69
|
+
task :default => "spec:all"
|
70
|
+
|
71
|
+
task "release:source_control_push" => :spec
|
72
|
+
|
73
|
+
task :install => :build
|
Binary file
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
// IAccessibleDLL.cpp : Defines the exported functions for the DLL application.
|
2
|
+
//
|
3
|
+
|
4
|
+
#include "stdafx.h"
|
5
|
+
|
6
|
+
extern "C"
|
7
|
+
__declspec( dllexport ) long get_button_state(HWND buttonHwnd) {
|
8
|
+
IAccessible *pIAccessible ;
|
9
|
+
VARIANT varState;
|
10
|
+
VARIANT varChildId;
|
11
|
+
BOOL checked = FALSE ;
|
12
|
+
HRESULT hr ;
|
13
|
+
HMODULE hModule ;
|
14
|
+
LPFNACCESSIBLEOBJECTFROMWINDOW lpfnAccessibleObjectFromWindow ;
|
15
|
+
|
16
|
+
hModule = LoadLibraryA("oleacc.dll");
|
17
|
+
lpfnAccessibleObjectFromWindow = (LPFNACCESSIBLEOBJECTFROMWINDOW)GetProcAddress(hModule, "AccessibleObjectFromWindow");
|
18
|
+
|
19
|
+
hr = lpfnAccessibleObjectFromWindow(buttonHwnd, OBJID_CLIENT, IID_IAccessible, (void**)&pIAccessible) ;
|
20
|
+
|
21
|
+
VariantInit(&varChildId);
|
22
|
+
varChildId.vt = VT_I4;
|
23
|
+
varChildId.lVal = CHILDID_SELF ;
|
24
|
+
|
25
|
+
pIAccessible->get_accState(varChildId, &varState);
|
26
|
+
|
27
|
+
return varState.lVal ;
|
28
|
+
}
|
29
|
+
|
30
|
+
|