rautomation 2.0.1-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- 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: 904141eafc394a154ceaa212c56fe18f0e2ed268fee6ac0e3d53b9166ac4d74b
|
4
|
+
data.tar.gz: 54c79e05c06a23f8ef2e11d2d0edadc3c4f064dbb269eb8a967c89d7a78e415c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ad73f0c8d270c19e2593341f8f151bb3c9e4785c87cc77588679fb17d6d311d4a254c50bc23cf9cc791fdd096d4c61df6b2370214cb3405a4c778b45eb46fe72
|
7
|
+
data.tar.gz: 6ea982118ef3c70706e2926d2146ec76e9f66cda158e37a601669fd60b5c325dfec416574c79c4cdbdb114d8c35b6d27b113dfbeb29c936550c6a181876fae85
|
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
|
+
[![Gem Version](https://badge.fury.io/rb/rautomation.png)](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
|
+
|