rautomation 0.7.2 → 0.7.3

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/Gemfile.lock CHANGED
@@ -1,24 +1,30 @@
1
- PATH
2
- remote: .
3
- specs:
4
- rautomation (0.7.0)
5
-
6
- GEM
7
- remote: http://rubygems.org/
8
- specs:
9
- diff-lcs (1.1.3)
10
- rspec (2.8.0)
11
- rspec-core (~> 2.8.0)
12
- rspec-expectations (~> 2.8.0)
13
- rspec-mocks (~> 2.8.0)
14
- rspec-core (2.8.0)
15
- rspec-expectations (2.8.0)
16
- diff-lcs (~> 1.1.2)
17
- rspec-mocks (2.8.0)
18
-
19
- PLATFORMS
20
- x86-mingw32
21
-
22
- DEPENDENCIES
23
- rautomation!
24
- rspec (~> 2.3)
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rautomation (0.7.2)
5
+ ffi
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ ffi (1.0.11)
12
+ rake (0.9.2.2)
13
+ rspec (2.8.0)
14
+ rspec-core (~> 2.8.0)
15
+ rspec-expectations (~> 2.8.0)
16
+ rspec-mocks (~> 2.8.0)
17
+ rspec-core (2.8.0)
18
+ rspec-expectations (2.8.0)
19
+ diff-lcs (~> 1.1.2)
20
+ rspec-mocks (2.8.0)
21
+ yard (0.8.3)
22
+
23
+ PLATFORMS
24
+ x86-mingw32
25
+
26
+ DEPENDENCIES
27
+ rake
28
+ rautomation!
29
+ rspec (~> 2.3)
30
+ yard
data/History.rdoc CHANGED
@@ -1,3 +1,13 @@
1
+ == 0.7.3 / 2012-10-31
2
+
3
+ === Win32 adapter
4
+
5
+ * Add support for PasswordField.
6
+
7
+ === AutoIt adapter
8
+
9
+ * Show error message when registration of AutoIt dll fails.
10
+
1
11
  == 0.7.2 / 2012-03-18
2
12
 
3
13
  === Win32 adapter
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.2
1
+ 0.7.3
Binary file
@@ -349,6 +349,25 @@ extern "C" __declspec ( dllexport ) int RA_GetClassName(IUIAutomationElement *pE
349
349
  }
350
350
  }
351
351
 
352
+ extern "C" __declspec ( dllexport ) BOOL RA_GetIsSet(IUIAutomationElement *pElement) {
353
+ IToggleProvider *pTogglePattern ;
354
+ HRESULT hr = pElement->GetCurrentPattern(UIA_TogglePatternId, (IUnknown**)&pTogglePattern) ;
355
+
356
+ if (FAILED(hr)) {
357
+ printf("RA_GetIsSet: getCurrentPattern failed 0x%x\r\n") ;
358
+ return FALSE ;
359
+ }
360
+
361
+ ToggleState RetVal ;
362
+ hr = pTogglePattern->get_ToggleState(&RetVal) ;
363
+ if (FAILED(hr)) {
364
+ printf("RA_GetIsSet: get_ToggleState failed 0x%x\r\n", hr) ;
365
+ return FALSE ;
366
+ } else {
367
+ return RetVal ;
368
+ }
369
+ }
370
+
352
371
  extern "C" __declspec ( dllexport ) BOOL RA_GetIsSelected(IUIAutomationElement *pElement) {
353
372
  ISelectionItemProvider *pSelectionPattern ;
354
373
  HRESULT hr = pElement->GetCurrentPattern(UIA_SelectionItemPatternId, (IUnknown**)&pSelectionPattern) ;
Binary file
@@ -96,9 +96,10 @@
96
96
  // checkBox
97
97
  //
98
98
  this.checkBox.AutoSize = true;
99
+ this.checkBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
99
100
  this.checkBox.Location = new System.Drawing.Point(142, 105);
100
101
  this.checkBox.Name = "checkBox";
101
- this.checkBox.Size = new System.Drawing.Size(74, 17);
102
+ this.checkBox.Size = new System.Drawing.Size(80, 18);
102
103
  this.checkBox.TabIndex = 6;
103
104
  this.checkBox.Text = "checkBox";
104
105
  this.checkBox.UseVisualStyleBackColor = true;
@@ -131,9 +132,10 @@
131
132
  //
132
133
  this.radioButtonDisabled.AutoSize = true;
133
134
  this.radioButtonDisabled.Enabled = false;
135
+ this.radioButtonDisabled.FlatStyle = System.Windows.Forms.FlatStyle.System;
134
136
  this.radioButtonDisabled.Location = new System.Drawing.Point(188, 28);
135
137
  this.radioButtonDisabled.Name = "radioButtonDisabled";
136
- this.radioButtonDisabled.Size = new System.Drawing.Size(100, 17);
138
+ this.radioButtonDisabled.Size = new System.Drawing.Size(106, 18);
137
139
  this.radioButtonDisabled.TabIndex = 10;
138
140
  this.radioButtonDisabled.TabStop = true;
139
141
  this.radioButtonDisabled.Text = "Option Disabled";
@@ -161,9 +163,10 @@
161
163
  // radioButton2
162
164
  //
163
165
  this.radioButton2.AutoSize = true;
166
+ this.radioButton2.FlatStyle = System.Windows.Forms.FlatStyle.System;
164
167
  this.radioButton2.Location = new System.Drawing.Point(107, 28);
165
168
  this.radioButton2.Name = "radioButton2";
166
- this.radioButton2.Size = new System.Drawing.Size(65, 17);
169
+ this.radioButton2.Size = new System.Drawing.Size(71, 18);
167
170
  this.radioButton2.TabIndex = 8;
168
171
  this.radioButton2.TabStop = true;
169
172
  this.radioButton2.Text = "Option 2";
@@ -173,9 +176,10 @@
173
176
  // radioButton1
174
177
  //
175
178
  this.radioButton1.AutoSize = true;
179
+ this.radioButton1.FlatStyle = System.Windows.Forms.FlatStyle.System;
176
180
  this.radioButton1.Location = new System.Drawing.Point(9, 28);
177
181
  this.radioButton1.Name = "radioButton1";
178
- this.radioButton1.Size = new System.Drawing.Size(65, 17);
182
+ this.radioButton1.Size = new System.Drawing.Size(71, 18);
179
183
  this.radioButton1.TabIndex = 7;
180
184
  this.radioButton1.TabStop = true;
181
185
  this.radioButton1.Text = "Option 1";
@@ -287,9 +291,10 @@
287
291
  //
288
292
  this.checkBoxDisabled.AutoSize = true;
289
293
  this.checkBoxDisabled.Enabled = false;
294
+ this.checkBoxDisabled.FlatStyle = System.Windows.Forms.FlatStyle.System;
290
295
  this.checkBoxDisabled.Location = new System.Drawing.Point(353, 102);
291
296
  this.checkBoxDisabled.Name = "checkBoxDisabled";
292
- this.checkBoxDisabled.Size = new System.Drawing.Size(115, 17);
297
+ this.checkBoxDisabled.Size = new System.Drawing.Size(121, 18);
293
298
  this.checkBoxDisabled.TabIndex = 12;
294
299
  this.checkBoxDisabled.Text = "checkBoxDisabled";
295
300
  this.checkBoxDisabled.UseVisualStyleBackColor = true;
@@ -16,7 +16,9 @@ module RAutomation
16
16
  @@autoit = WIN32OLE.new('AutoItX3.Control')
17
17
  rescue WIN32OLERuntimeError
18
18
  dll = File.dirname(__FILE__) + "/../../../../ext/AutoItX/AutoItX3.dll"
19
- system("regsvr32.exe /s #{dll.gsub('/', '\\')}")
19
+ unless system("regsvr32.exe /s #{dll.gsub('/', '\\')}")
20
+ raise "Start Ruby with administrative rights when using AutoIt adapter for the first time."
21
+ end
20
22
  @@autoit = WIN32OLE.new('AutoItX3.Control')
21
23
  end
22
24
  end
@@ -5,6 +5,7 @@ rescue Gem::LoadError
5
5
  end
6
6
  require "ffi"
7
7
  require File.dirname(__FILE__) + "/ms_uia/constants"
8
+ require File.dirname(__FILE__) + "/ms_uia/keys"
8
9
  require File.dirname(__FILE__) + "/ms_uia/keystroke_converter"
9
10
  require File.dirname(__FILE__) + "/ms_uia/functions"
10
11
  require File.dirname(__FILE__) + "/ms_uia/locators"
@@ -7,11 +7,11 @@ module RAutomation
7
7
  include ButtonHelper
8
8
 
9
9
  def value
10
- hwnd = Functions.control_hwnd(@window.hwnd, @locators)
11
- checkbox = UiaDll::element_from_handle(hwnd)
10
+ checkbox = uia_element
12
11
 
13
12
  checkbox_value = FFI::MemoryPointer.new :char, UiaDll::get_name(checkbox, nil) + 1
14
13
  UiaDll::get_name(checkbox, checkbox_value)
14
+
15
15
  checkbox_value.read_string
16
16
  end
17
17
 
@@ -19,6 +19,10 @@ module RAutomation
19
19
  super && matches_type?(Constants::UIA_CHECKBOX_CONTROL_TYPE)
20
20
  end
21
21
 
22
+ def set?
23
+ UiaDll::get_is_set(uia_element)
24
+ end
25
+
22
26
  alias_method :exists?, :exist?
23
27
 
24
28
  end
@@ -106,11 +106,11 @@ module RAutomation
106
106
  end
107
107
 
108
108
  #todo - replace with UIA version
109
- def has_focus?
109
+ def focused?
110
110
  Functions.has_focus?(hwnd)
111
111
  end
112
112
 
113
- def set_focus
113
+ def focus
114
114
  assert_enabled
115
115
  uia_control = UiaDll::element_from_handle(hwnd)
116
116
  UiaDll::set_focus(uia_control)
@@ -0,0 +1,121 @@
1
+ module RAutomation
2
+ module Adapter
3
+ module MsUia
4
+ class Keys
5
+ KEYS = {
6
+ # keycodes from http://msdn.microsoft.com/en-us/library/ms927178.aspx
7
+ :null => 0x00,
8
+ :cancel => 0x03,
9
+ :help => 0x2F,
10
+ :backspace => 0x08,
11
+ :tab => 0x09,
12
+ :clear => 0x0C,
13
+ :return => 0x0D,
14
+ :enter => 0x0D,
15
+ :shift => 0x10,
16
+ :left_shift => 0xA0,
17
+ :control => 0x11,
18
+ :left_control => 0xA2,
19
+ :alt => 0x12,
20
+ :left_alt => 0xA4,
21
+ :pause => 0x13,
22
+ :escape => 0x1B,
23
+ :space => 0x20,
24
+ :page_up => 0x21,
25
+ :page_down => 0x22,
26
+ :end => 0x23,
27
+ :home => 0x24,
28
+ :left => 0x25,
29
+ :arrow_left => 0x25,
30
+ :up => 0x26,
31
+ :arrow_up => 0x26,
32
+ :right => 0x27,
33
+ :arrow_right => 0x27,
34
+ :down => 0x28,
35
+ :arrow_down => 0x28,
36
+ :insert => 0x2D,
37
+ :delete => 0x2E,
38
+ :semicolon => 0x3B,
39
+ :equals => 0x3D,
40
+ :numpad0 => 0x60,
41
+ :numpad1 => 0x61,
42
+ :numpad2 => 0x62,
43
+ :numpad3 => 0x63,
44
+ :numpad4 => 0x64,
45
+ :numpad5 => 0x65,
46
+ :numpad6 => 0x66,
47
+ :numpad7 => 0x67,
48
+ :numpad8 => 0x68,
49
+ :numpad9 => 0x69,
50
+ :multiply => 0x6A,
51
+ :add => 0x6B,
52
+ :separator => 0x6C,
53
+ :subtract => 0x6D,
54
+ :decimal => 0x6E,
55
+ :divide => 0x6F,
56
+ :f1 => 0x70,
57
+ :f2 => 0x71,
58
+ :f3 => 0x72,
59
+ :f4 => 0x73,
60
+ :f5 => 0x74,
61
+ :f6 => 0x75,
62
+ :f7 => 0x76,
63
+ :f8 => 0x77,
64
+ :f9 => 0x78,
65
+ :f10 => 0x79,
66
+ :f11 => 0x7A,
67
+ :f12 => 0x7B,
68
+ }
69
+
70
+ SPECIAL_KEYS = {
71
+ "!" => 0x31,
72
+ "@" => 0x32,
73
+ "#" => 0x33,
74
+ "$" => 0x34,
75
+ "%" => 0x35,
76
+ "^" => 0x36,
77
+ "&" => 0x37,
78
+ "*" => 0x38,
79
+ "(" => 0x39,
80
+ ")" => 0x30,
81
+ "_" => 0x2D,
82
+ "+" => 0x3D,
83
+ "{" => 0x5B,
84
+ "}" => 0x5D,
85
+ ":" => 0x3B,
86
+ "\"" => 0x27,
87
+ "|" => 0x5C,
88
+ "?" => 0x2F,
89
+ ">" => 0x2E,
90
+ "<" => 0x2C
91
+ }
92
+
93
+ def self.[](key)
94
+ KEYS[key] or raise "unsupported key #{key.inspect}"
95
+ end
96
+
97
+ def self.encode(keys)
98
+ keys.reduce([]) do |converted, key|
99
+ if key.is_a?(Symbol)
100
+ converted << Keys[key]
101
+ elsif key.is_a?(Array)
102
+ converted << (key.map {|k| encode([k])} << Keys[:null]).flatten
103
+ else # key is a string
104
+ converted += encode_str(key)
105
+ end
106
+ converted
107
+ end
108
+ end
109
+
110
+ def self.encode_str(keys)
111
+ keys.to_s.split("").map do |key|
112
+ key =~ /[a-z]/ ? key.upcase.unpack("c")[0] :
113
+ key =~ /[A-Z]/ || SPECIAL_KEYS[key] ? [Keys[:shift], SPECIAL_KEYS[key] || key.unpack("c")[0], Keys[:null]] :
114
+ key.unpack("c")[0]
115
+ end
116
+ end
117
+
118
+ end
119
+ end
120
+ end
121
+ end
@@ -11,6 +11,10 @@ module RAutomation
11
11
  super && matches_type?(Constants::UIA_RADIO_BUTTON_CONTROL_TYPE)
12
12
  end
13
13
 
14
+ def set?
15
+ UiaDll::get_is_selected(uia_element)
16
+ end
17
+
14
18
  alias_method :exists?, :exist?
15
19
 
16
20
  end
@@ -48,6 +48,8 @@ module RAutomation
48
48
  [:pointer, :pointer], :int
49
49
  attach_function :get_is_selected, :RA_GetIsSelected,
50
50
  [:pointer], :bool
51
+ attach_function :get_is_set, :RA_GetIsSet,
52
+ [:pointer], :bool
51
53
  attach_function :select, :RA_Select,
52
54
  [:pointer], :int
53
55
  attach_function :set_value, :RA_Set_Value,
@@ -135,32 +135,35 @@ module RAutomation
135
135
  sleep 1
136
136
  end
137
137
 
138
- #todo - replace with UIA version if possible
139
138
  # Activates the window and sends keys to it.
140
139
  #
141
- # Refer to KeystrokeConverter#convert_special_characters for the special keycodes.
140
+ # @example
141
+ # RAutomation::Window.new(:title => //).send_keys "hello!"
142
+ # RAutomation::Window.new(:title => //).send_keys [:control, "a"], "world!"
143
+ # Refer to {Keys::KEYS} for all the special keycodes.
142
144
  # @see RAutomation::Window#send_keys
143
- def send_keys(keys)
144
- shift_pressed = false
145
- KeystrokeConverter.convert(keys[0]).each do |key|
145
+ def send_keys(args)
146
+ Keys.encode(args).each do |arg|
146
147
  wait_until do
147
148
  activate
148
149
  active?
149
150
  end
150
- press_key key
151
-
152
- if key == Constants::VK_LSHIFT
153
- shift_pressed = true
154
- next
155
- end
156
151
 
157
- release_key key
158
-
159
- if shift_pressed
160
- shift_pressed = false
161
- release_key Constants::VK_LSHIFT
152
+ if arg.is_a?(Array)
153
+ arg.reduce([]) do |pressed_keys, k|
154
+ if k == Keys[:null]
155
+ pressed_keys.each {|pressed_key| release_key pressed_key}
156
+ pressed_keys = []
157
+ else
158
+ pressed_keys << press_key(k)
159
+ end
160
+ pressed_keys
161
+ end
162
+ else
163
+ send_key arg
162
164
  end
163
165
  end
166
+ sleep 1
164
167
  end
165
168
 
166
169
  #todo - replace with UIA version
@@ -353,11 +356,20 @@ module RAutomation
353
356
 
354
357
  def press_key key
355
358
  Functions.send_key(key, 0, 0, nil)
359
+ key
356
360
  end
357
361
 
358
362
  def release_key key
359
363
  Functions.send_key(key, 0, Constants::KEYEVENTF_KEYUP, nil)
364
+ key
360
365
  end
366
+
367
+ def send_key key
368
+ press_key key
369
+ release_key key
370
+ key
371
+ end
372
+
361
373
  end
362
374
  end
363
375
  end
@@ -20,3 +20,4 @@ require File.dirname(__FILE__) + "/win_32/table"
20
20
  require File.dirname(__FILE__) + "/win_32/label"
21
21
  require File.dirname(__FILE__) + "/win_32/list_box"
22
22
  require File.dirname(__FILE__) + "/win_32/mouse"
23
+ require File.dirname(__FILE__) + "/win_32/password_field"
@@ -0,0 +1,15 @@
1
+ module RAutomation
2
+ module Adapter
3
+ module Win32
4
+ class PasswordField < TextField
5
+
6
+ private
7
+
8
+ def set?(text)
9
+ # getting value from password field will not retrieve anything
10
+ true
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -10,7 +10,7 @@ module RAutomation
10
10
 
11
11
  # @see RAutomation::TextField#set
12
12
  def set(text)
13
- raise "Cannot set value on a disabled text field" if disabled?
13
+ assert_enabled
14
14
 
15
15
  wait_until do
16
16
  hwnd = Functions.control_hwnd(@window.hwnd, @locators)
@@ -18,13 +18,13 @@ module RAutomation
18
18
  @window.active? &&
19
19
  focus &&
20
20
  Functions.set_control_text(hwnd, text) &&
21
- value == text
21
+ set?(text)
22
22
  end
23
23
  end
24
24
 
25
25
  # @see RAutomation::TextField#clear
26
26
  def clear
27
- raise "Cannot set value on a disabled text field" if disabled?
27
+ assert_enabled
28
28
  set ""
29
29
  end
30
30
 
@@ -36,6 +36,16 @@ module RAutomation
36
36
  focus
37
37
  @window.send_keys(keys)
38
38
  end
39
+
40
+ private
41
+
42
+ def set?(text)
43
+ value == text
44
+ end
45
+
46
+ def assert_enabled
47
+ raise "Cannot set value on a disabled text field" if disabled?
48
+ end
39
49
  end
40
50
  end
41
51
  end
@@ -177,6 +177,8 @@ module RAutomation
177
177
  Functions.close_window(hwnd)
178
178
  end
179
179
 
180
+ # Retrieves the {Mouse} object for automating mouse movements and clicks
181
+ # @raise [UnknownWindowException] if the window doesn't exist.
180
182
  def mouse
181
183
  @container.wait_until_present
182
184
  Mouse.new(self)
@@ -206,6 +208,11 @@ module RAutomation
206
208
  Label.new(self, locator)
207
209
  end
208
210
 
211
+ def password_field(locator)
212
+ @container.wait_until_present
213
+ PasswordField.new(self, locator)
214
+ end
215
+
209
216
  def control(locator={})
210
217
  @container.wait_until_present
211
218
  Control.new(self, locator)
data/rautomation.gemspec CHANGED
@@ -19,6 +19,9 @@ RAutomation provides:
19
19
  s.test_files = `git ls-files -- spec/*`.split("\n")
20
20
  s.require_paths = ["lib"]
21
21
 
22
+ s.add_runtime_dependency("ffi")
22
23
  s.add_development_dependency("rspec", "~>2.3")
24
+ s.add_development_dependency("rake")
25
+ s.add_development_dependency("yard")
23
26
  end
24
27
 
@@ -20,12 +20,12 @@ describe "MsUia::Button", :if => SpecHelper.adapter == :ms_uia do
20
20
  window.button(:id => "disabledButton").should_not be_enabled
21
21
  end
22
22
 
23
- it "#set_focus" do
23
+ it "#focus" do
24
24
  button = RAutomation::Window.new(:title => SpecHelper::DATA[:window1_title]).button(:id => "enabledButton")
25
- button.should_not have_focus
25
+ button.should_not be_focused
26
26
 
27
- button.set_focus
28
- button.should have_focus
27
+ button.focus
28
+ button.should be_focused
29
29
  end
30
30
 
31
31
  it "cannot click disabled button" do
@@ -35,7 +35,7 @@ describe "MsUia::Button", :if => SpecHelper.adapter == :ms_uia do
35
35
 
36
36
  it "cannot set focus to disabled button" do
37
37
  window = RAutomation::Window.new(:title => SpecHelper::DATA[:window1_title])
38
- lambda { window.button(:id => "disabledButton").set_focus }.should raise_error
38
+ lambda { window.button(:id => "disabledButton").focus }.should raise_error
39
39
  end
40
40
 
41
41
  end
@@ -1,11 +1,12 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe "MsUia::Window", :if => SpecHelper.adapter == :ms_uia do
4
+ let(:window) {RAutomation::Window.new(:title => /MainFormWindow/i)}
4
5
 
5
6
 
6
7
 
7
8
  it "move and click" do
8
- window = RAutomation::Window.new(:title => /MainFormWindow/i)
9
+ #window = RAutomation::Window.new(:title => /MainFormWindow/i)
9
10
  window.maximize
10
11
  window.move_mouse(62,46)
11
12
  sleep 1
@@ -14,6 +15,31 @@ describe "MsUia::Window", :if => SpecHelper.adapter == :ms_uia do
14
15
 
15
16
  end
16
17
 
18
+ context "#send_keys" do
19
+ it "send tab keystrokes to move focus between elements" do
20
+ window.button(:value => "&About").focus
21
+ window.button(:value => "&About").should be_focused
22
+
23
+ window.send_keys(:tab, :tab, :tab)
24
+ button = window.button(:value => "Close")
25
+ button.should exist
26
+ button.should be_focused
27
+ end
28
+
29
+ it "send arbitrary characters and control keys" do
30
+ text_field = window.text_field(:index => 1)
31
+ text_field.focus
32
+ window.send_keys "abc123ABChiHI!"
33
+ text_field.value.should == "abc123ABChiHI!"
34
+
35
+ window.send_keys :space, "X"
36
+ text_field.value.should == "abc123ABChiHI! X"
37
+
38
+ window.send_keys [:control, "a"], :backspace
39
+ text_field.value.should be_empty
40
+ end
41
+ end
42
+
17
43
  =begin
18
44
  it "control by focus" do
19
45
  window = RAutomation::Window.new(:title => /MainFormWindow/i)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rautomation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,27 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-17 00:00:00.000000000 Z
12
+ date: 2012-10-31 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: rspec
16
- requirement: &25277112 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
17
33
  none: false
18
34
  requirements:
19
35
  - - ~>
@@ -21,7 +37,44 @@ dependencies:
21
37
  version: '2.3'
22
38
  type: :development
23
39
  prerelease: false
24
- version_requirements: *25277112
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: yard
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
25
78
  description: ! "RAutomation is a small and easy to use library for helping out to
26
79
  automate windows and their controls\nfor automated testing.\n\nRAutomation provides:\n*
27
80
  Easy to use and user-friendly API (inspired by Watir http://www.watir.com)\n* Cross-platform
@@ -107,7 +160,6 @@ files:
107
160
  - ext/WindowsForms/src/WindowsForms/WindowsForms/SimpleElementsForm.cs
108
161
  - ext/WindowsForms/src/WindowsForms/WindowsForms/SimpleElementsForm.resx
109
162
  - ext/WindowsForms/src/WindowsForms/WindowsForms/WindowsForms.csproj
110
- - ext/WindowsForms/src/WindowsForms/WindowsForms/bin/Release/WindowsForms.exe
111
163
  - lib/rautomation.rb
112
164
  - lib/rautomation/adapter/autoit.rb
113
165
  - lib/rautomation/adapter/autoit/button.rb
@@ -123,6 +175,7 @@ files:
123
175
  - lib/rautomation/adapter/ms_uia/constants.rb
124
176
  - lib/rautomation/adapter/ms_uia/control.rb
125
177
  - lib/rautomation/adapter/ms_uia/functions.rb
178
+ - lib/rautomation/adapter/ms_uia/keys.rb
126
179
  - lib/rautomation/adapter/ms_uia/keystroke_converter.rb
127
180
  - lib/rautomation/adapter/ms_uia/label.rb
128
181
  - lib/rautomation/adapter/ms_uia/list_box.rb
@@ -146,6 +199,7 @@ files:
146
199
  - lib/rautomation/adapter/win_32/list_box.rb
147
200
  - lib/rautomation/adapter/win_32/locators.rb
148
201
  - lib/rautomation/adapter/win_32/mouse.rb
202
+ - lib/rautomation/adapter/win_32/password_field.rb
149
203
  - lib/rautomation/adapter/win_32/radio.rb
150
204
  - lib/rautomation/adapter/win_32/select_list.rb
151
205
  - lib/rautomation/adapter/win_32/table.rb
@@ -208,7 +262,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
262
  version: '0'
209
263
  requirements: []
210
264
  rubyforge_project:
211
- rubygems_version: 1.8.12
265
+ rubygems_version: 1.8.24
212
266
  signing_key:
213
267
  specification_version: 3
214
268
  summary: Automate windows and their controls through user-friendly API with Ruby