rautomation 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +6 -0
- data/VERSION +1 -1
- data/lib/{rautomation.rb → RAutomation.rb} +0 -0
- data/lib/rautomation/adapter/autoit/button.rb +3 -3
- data/lib/rautomation/adapter/autoit/window.rb +3 -3
- data/lib/rautomation/adapter/helper.rb +2 -2
- data/lib/rautomation/adapter/win_ffi.rb +12 -0
- data/lib/rautomation/adapter/{ffi → win_ffi}/button.rb +4 -3
- data/lib/rautomation/adapter/{ffi → win_ffi}/constants.rb +1 -1
- data/lib/rautomation/adapter/{ffi → win_ffi}/functions.rb +3 -4
- data/lib/rautomation/adapter/{ffi → win_ffi}/locators.rb +1 -1
- data/lib/rautomation/adapter/{ffi → win_ffi}/text_field.rb +1 -1
- data/lib/rautomation/adapter/{ffi → win_ffi}/window.rb +7 -4
- data/lib/rautomation/button.rb +12 -4
- data/lib/rautomation/text_field.rb +2 -2
- data/lib/rautomation/wait_helper.rb +2 -2
- data/lib/rautomation/window.rb +4 -4
- data/rautomation.gemspec +13 -11
- data/spec/adapter/win_ffi/window_spec.rb +20 -0
- data/spec/button_spec.rb +21 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/test.html +4 -2
- data/spec/text_field_spec.rb +2 -2
- data/spec/window_spec.rb +1 -10
- metadata +14 -12
- data/lib/rautomation/adapter/ffi.rb +0 -12
data/History.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== Version 0.4.0 / 2010-12-23
|
2
|
+
|
3
|
+
* allow to search windows without text (like empty Notepad window for example).
|
4
|
+
* added possibility to use block for #click to specify successful clicking condition.
|
5
|
+
* renamed :ffi adapter to :win_ffi because FFI may be used on other platforms too.
|
6
|
+
|
1
7
|
=== Version 0.3.0 / 2010-12-18
|
2
8
|
|
3
9
|
* added Ffi adapter specific method Window#child which searches for child windows and popups
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
File without changes
|
@@ -27,7 +27,7 @@ module RAutomation
|
|
27
27
|
extract(locators)
|
28
28
|
end
|
29
29
|
|
30
|
-
# @see RAutomation::Button#click
|
30
|
+
# @see RAutomation::Button#click
|
31
31
|
def click
|
32
32
|
clicked = false
|
33
33
|
wait_until do
|
@@ -37,7 +37,7 @@ module RAutomation
|
|
37
37
|
Window.autoit.ControlClick(@window.locator_hwnd, "", @locators) == 1 &&
|
38
38
|
clicked = true # is clicked at least once
|
39
39
|
|
40
|
-
clicked && !exists?
|
40
|
+
block_given? ? yield : clicked && !exists?
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -53,4 +53,4 @@ module RAutomation
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
|
-
end
|
56
|
+
end
|
@@ -51,11 +51,11 @@ module RAutomation
|
|
51
51
|
end
|
52
52
|
|
53
53
|
# Retrieves handle of the window.
|
54
|
-
# @note Searches only for visible windows
|
54
|
+
# @note Searches only for visible windows.
|
55
55
|
# @see RAutomation::Window#hwnd
|
56
56
|
def hwnd
|
57
57
|
@hwnd ||= @@autoit.WinList(@locators, @locator_text).pop.compact.
|
58
|
-
find {|handle|
|
58
|
+
find {|handle| self.class.new(:hwnd => handle.hex).visible?}.
|
59
59
|
hex rescue nil
|
60
60
|
end
|
61
61
|
|
@@ -165,4 +165,4 @@ module RAutomation
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
end
|
168
|
-
end
|
168
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RAutomation
|
2
2
|
module Adapter
|
3
3
|
autoload :Autoit, File.dirname(__FILE__) + "/autoit.rb"
|
4
|
-
autoload :
|
4
|
+
autoload :WinFfi, File.dirname(__FILE__) + "/win_ffi.rb"
|
5
5
|
|
6
6
|
module Helper
|
7
7
|
extend self
|
@@ -11,7 +11,7 @@ module RAutomation
|
|
11
11
|
def default_adapter
|
12
12
|
case RUBY_PLATFORM
|
13
13
|
when /mswin|msys|mingw32/
|
14
|
-
:
|
14
|
+
:win_ffi
|
15
15
|
else
|
16
16
|
raise "unsupported platform for RAutomation: #{RUBY_PLATFORM}"
|
17
17
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
begin
|
2
|
+
gem "ffi", "0.6.3"
|
3
|
+
rescue Gem::LoadError
|
4
|
+
raise Gem::LoadError, "Unable to load FFI gem. Install it with:\n\tgem install ffi -v 0.6.3"
|
5
|
+
end
|
6
|
+
require "ffi"
|
7
|
+
require File.dirname(__FILE__) + "/win_ffi/constants"
|
8
|
+
require File.dirname(__FILE__) + "/win_ffi/functions"
|
9
|
+
require File.dirname(__FILE__) + "/win_ffi/locators"
|
10
|
+
require File.dirname(__FILE__) + "/win_ffi/window"
|
11
|
+
require File.dirname(__FILE__) + "/win_ffi/button"
|
12
|
+
require File.dirname(__FILE__) + "/win_ffi/text_field"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RAutomation
|
2
2
|
module Adapter
|
3
|
-
module
|
3
|
+
module WinFfi
|
4
4
|
class Button
|
5
5
|
include WaitHelper
|
6
6
|
include Locators
|
@@ -29,7 +29,8 @@ module RAutomation
|
|
29
29
|
Functions.set_control_focus(hwnd) &&
|
30
30
|
Functions.control_click(hwnd) &&
|
31
31
|
clicked = true # is clicked at least once
|
32
|
-
|
32
|
+
|
33
|
+
block_given? ? yield : clicked && !exists?
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -46,4 +47,4 @@ module RAutomation
|
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
49
|
-
end
|
50
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RAutomation
|
2
2
|
module Adapter
|
3
|
-
module
|
3
|
+
module WinFfi
|
4
4
|
# @private
|
5
5
|
module Functions
|
6
6
|
extend FFI::Library
|
@@ -90,8 +90,7 @@ module RAutomation
|
|
90
90
|
|
91
91
|
def window_hwnd(locators)
|
92
92
|
find_hwnd(locators) do |hwnd|
|
93
|
-
window_visible(hwnd) &&
|
94
|
-
locators_match?(locators, window_properties(hwnd, locators))
|
93
|
+
window_visible(hwnd) && locators_match?(locators, window_properties(hwnd, locators))
|
95
94
|
end
|
96
95
|
end
|
97
96
|
|
@@ -246,4 +245,4 @@ module RAutomation
|
|
246
245
|
end
|
247
246
|
end
|
248
247
|
end
|
249
|
-
end
|
248
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RAutomation
|
2
2
|
module Adapter
|
3
|
-
module
|
3
|
+
module WinFfi
|
4
4
|
class Window
|
5
5
|
include WaitHelper
|
6
6
|
include Locators
|
@@ -26,7 +26,7 @@ module RAutomation
|
|
26
26
|
end
|
27
27
|
|
28
28
|
# Retrieves handle of the window.
|
29
|
-
# @note Searches only for visible windows
|
29
|
+
# @note Searches only for visible windows.
|
30
30
|
# @see RAutomation::Window#hwnd
|
31
31
|
def hwnd
|
32
32
|
@hwnd ||= Functions.window_hwnd(@locators)
|
@@ -134,7 +134,10 @@ module RAutomation
|
|
134
134
|
end
|
135
135
|
|
136
136
|
# Creates the child window object.
|
137
|
-
# @note This is an
|
137
|
+
# @note This is an WinFfi adapter specific method, not part of the public API
|
138
|
+
# @example
|
139
|
+
# RAutomation::Window.new(:title => /Windows Internet Explorer/i).
|
140
|
+
# child(:title => /some popup/)
|
138
141
|
# @param (see Window#initialize)
|
139
142
|
# @return [RAutomation::Window] child window, popup or regular window.
|
140
143
|
def child(locators)
|
@@ -144,4 +147,4 @@ module RAutomation
|
|
144
147
|
end
|
145
148
|
end
|
146
149
|
end
|
147
|
-
end
|
150
|
+
end
|
data/lib/rautomation/button.rb
CHANGED
@@ -8,11 +8,19 @@ module RAutomation
|
|
8
8
|
@button = @window.button(@locators)
|
9
9
|
end
|
10
10
|
|
11
|
-
# Performs a click on the
|
11
|
+
# Performs a click on the button.
|
12
|
+
# By default click is considered successful if the button doesn't exist after clicking (e.g. window has closed)
|
13
|
+
# @yield [button] optional block specifying successful clicking condition.
|
14
|
+
# @yieldparam [Button] button which is being clicked on.
|
15
|
+
# @yieldreturn [Boolean] true if clicking on the button is successful, false otherwise.
|
12
16
|
# @raise [UnknownButtonException] if the button doesn't exist.
|
13
17
|
def click
|
14
18
|
wait_until_exists
|
15
|
-
|
19
|
+
if block_given?
|
20
|
+
@button.click {yield self}
|
21
|
+
else
|
22
|
+
@button.click
|
23
|
+
end
|
16
24
|
end
|
17
25
|
|
18
26
|
# Retrieves the value (text) of the button, usually the visible text.
|
@@ -34,9 +42,9 @@ module RAutomation
|
|
34
42
|
private
|
35
43
|
|
36
44
|
def wait_until_exists
|
37
|
-
WaitHelper.wait_until
|
45
|
+
WaitHelper.wait_until {exists?}
|
38
46
|
rescue WaitHelper::TimeoutError
|
39
47
|
raise UnknownButtonException, "Button #{@locators.inspect} doesn't exist on window #{@window.locators.inspect}!"
|
40
48
|
end
|
41
49
|
end
|
42
|
-
end
|
50
|
+
end
|
@@ -42,9 +42,9 @@ module RAutomation
|
|
42
42
|
private
|
43
43
|
|
44
44
|
def wait_until_exists
|
45
|
-
WaitHelper.wait_until
|
45
|
+
WaitHelper.wait_until {exists?}
|
46
46
|
rescue WaitHelper::TimeoutError
|
47
47
|
raise UnknownTextFieldException, "Text field #{@locators.inspect} doesn't exist on window #{@window.locators.inspect}!" unless exists?
|
48
48
|
end
|
49
49
|
end
|
50
|
-
end
|
50
|
+
end
|
@@ -8,7 +8,7 @@ module RAutomation
|
|
8
8
|
|
9
9
|
# @private
|
10
10
|
# Wait until the block evaluates to true or times out.
|
11
|
-
def wait_until(timeout =
|
11
|
+
def wait_until(timeout = Window.wait_timeout, &block)
|
12
12
|
end_time = ::Time.now + timeout
|
13
13
|
|
14
14
|
until ::Time.now > end_time
|
@@ -20,4 +20,4 @@ module RAutomation
|
|
20
20
|
raise TimeoutError, "timed out after #{timeout} seconds"
|
21
21
|
end
|
22
22
|
end
|
23
|
-
end
|
23
|
+
end
|
data/lib/rautomation/window.rb
CHANGED
@@ -37,8 +37,8 @@ module RAutomation
|
|
37
37
|
# It is also possible to change the default adapter by using environment variable called
|
38
38
|
# __RAUTOMATION_ADAPTER__
|
39
39
|
#
|
40
|
-
# @note This constructor doesn't
|
41
|
-
# @note
|
40
|
+
# @note This constructor doesn't check for window's existance.
|
41
|
+
# @note Only visible Windows are supported.
|
42
42
|
# @param [Hash] locators for the window.
|
43
43
|
def initialize(locators)
|
44
44
|
@adapter = locators.delete(:adapter) || ENV["RAUTOMATION_ADAPTER"] && ENV["RAUTOMATION_ADAPTER"].to_sym || default_adapter
|
@@ -191,7 +191,7 @@ module RAutomation
|
|
191
191
|
private
|
192
192
|
|
193
193
|
def wait_until_exists
|
194
|
-
WaitHelper.wait_until
|
194
|
+
WaitHelper.wait_until {exists?}
|
195
195
|
rescue WaitHelper::TimeoutError
|
196
196
|
raise UnknownWindowException, "Window with locator #{@window.locators.inspect} doesn't exist!" unless exists?
|
197
197
|
end
|
@@ -201,4 +201,4 @@ module RAutomation
|
|
201
201
|
end
|
202
202
|
|
203
203
|
end
|
204
|
-
end
|
204
|
+
end
|
data/rautomation.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rautomation}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jarmo Pertman"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-23}
|
13
13
|
s.description = %q{RAutomation is a small and easy to use library for helping out to automate windows and their controls
|
14
14
|
for automated testing.
|
15
15
|
|
@@ -35,25 +35,26 @@ RAutomation provides:
|
|
35
35
|
"VERSION",
|
36
36
|
"ext/AutoItX/AutoItX.chm",
|
37
37
|
"ext/AutoItX/AutoItX3.dll",
|
38
|
-
"lib/
|
38
|
+
"lib/RAutomation.rb",
|
39
39
|
"lib/rautomation/adapter/autoit.rb",
|
40
40
|
"lib/rautomation/adapter/autoit/button.rb",
|
41
41
|
"lib/rautomation/adapter/autoit/locators.rb",
|
42
42
|
"lib/rautomation/adapter/autoit/text_field.rb",
|
43
43
|
"lib/rautomation/adapter/autoit/window.rb",
|
44
|
-
"lib/rautomation/adapter/ffi.rb",
|
45
|
-
"lib/rautomation/adapter/ffi/button.rb",
|
46
|
-
"lib/rautomation/adapter/ffi/constants.rb",
|
47
|
-
"lib/rautomation/adapter/ffi/functions.rb",
|
48
|
-
"lib/rautomation/adapter/ffi/locators.rb",
|
49
|
-
"lib/rautomation/adapter/ffi/text_field.rb",
|
50
|
-
"lib/rautomation/adapter/ffi/window.rb",
|
51
44
|
"lib/rautomation/adapter/helper.rb",
|
45
|
+
"lib/rautomation/adapter/win_ffi.rb",
|
46
|
+
"lib/rautomation/adapter/win_ffi/button.rb",
|
47
|
+
"lib/rautomation/adapter/win_ffi/constants.rb",
|
48
|
+
"lib/rautomation/adapter/win_ffi/functions.rb",
|
49
|
+
"lib/rautomation/adapter/win_ffi/locators.rb",
|
50
|
+
"lib/rautomation/adapter/win_ffi/text_field.rb",
|
51
|
+
"lib/rautomation/adapter/win_ffi/window.rb",
|
52
52
|
"lib/rautomation/button.rb",
|
53
53
|
"lib/rautomation/text_field.rb",
|
54
54
|
"lib/rautomation/wait_helper.rb",
|
55
55
|
"lib/rautomation/window.rb",
|
56
56
|
"rautomation.gemspec",
|
57
|
+
"spec/adapter/win_ffi/window_spec.rb",
|
57
58
|
"spec/button_spec.rb",
|
58
59
|
"spec/spec_helper.rb",
|
59
60
|
"spec/test.html",
|
@@ -66,7 +67,8 @@ RAutomation provides:
|
|
66
67
|
s.rubygems_version = %q{1.3.7}
|
67
68
|
s.summary = %q{Automate windows and their controls through user-friendly API with Ruby}
|
68
69
|
s.test_files = [
|
69
|
-
"spec/
|
70
|
+
"spec/adapter/win_ffi/window_spec.rb",
|
71
|
+
"spec/button_spec.rb",
|
70
72
|
"spec/spec_helper.rb",
|
71
73
|
"spec/text_field_spec.rb",
|
72
74
|
"spec/window_spec.rb"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "WinFfi::Window", :if => SpecHelper.adapter == :win_ffi do
|
4
|
+
before :all do
|
5
|
+
window = RAutomation::Window.new(:title => SpecHelper::DATA[:window1_title])
|
6
|
+
RAutomation::WaitHelper.wait_until {window.present?}
|
7
|
+
|
8
|
+
window = RAutomation::Window.new(:title => SpecHelper::DATA[:window2_title])
|
9
|
+
RAutomation::WaitHelper.wait_until {window.present?}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "#child" do
|
13
|
+
window = RAutomation::Window.new(:title => /Internet Explorer$/i)
|
14
|
+
window.should exist
|
15
|
+
child = window.child(:title => SpecHelper::DATA[:window2_title])
|
16
|
+
child.should exist
|
17
|
+
child.title.should == SpecHelper::DATA[:window2_title]
|
18
|
+
child.text.should include(SpecHelper::DATA[:window2_text])
|
19
|
+
end
|
20
|
+
end
|
data/spec/button_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RAutomation::Button do
|
4
4
|
it "#button" do
|
@@ -31,10 +31,29 @@ describe RAutomation::Button do
|
|
31
31
|
expect {window.button(:value => "non-existent-button").click}.
|
32
32
|
to raise_exception(RAutomation::UnknownButtonException)
|
33
33
|
|
34
|
+
RAutomation::Window.wait_timeout = 60
|
34
35
|
button = window.button(:value => SpecHelper::DATA[:window2_button_text])
|
35
36
|
button.should exist
|
36
37
|
button.click
|
37
38
|
button.should_not exist
|
38
39
|
window.should_not exist
|
39
40
|
end
|
40
|
-
|
41
|
+
|
42
|
+
it "#click with a block for defining successful click" do
|
43
|
+
window = RAutomation::Window.new(:title => SpecHelper::DATA[:window2_title])
|
44
|
+
RAutomation::Window.wait_timeout = 5
|
45
|
+
button = window.button(:value => SpecHelper::DATA[:window2_button_text])
|
46
|
+
expect {button.click {false}}.
|
47
|
+
to raise_exception(RAutomation::WaitHelper::TimeoutError)
|
48
|
+
button.should_not exist
|
49
|
+
window.should_not exist
|
50
|
+
|
51
|
+
RAutomation::Window.wait_timeout = 10
|
52
|
+
window = RAutomation::Window.new(:title => SpecHelper::DATA[:window2_title])
|
53
|
+
button = window.button(:value => SpecHelper::DATA[:window2_button_text])
|
54
|
+
button.should exist
|
55
|
+
button.click {|button| !button.exists? && !window.exists?}
|
56
|
+
button.should_not exist
|
57
|
+
window.should_not exist
|
58
|
+
end
|
59
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -42,7 +42,7 @@ module SpecHelper
|
|
42
42
|
:title_proc => lambda {|win| win.WinGetTitle("[TITLE:Explorer User Prompt]")}
|
43
43
|
},
|
44
44
|
# This adapter needs Windows OS with Internet Explorer installed into 'c:\program files\internet explorer'.
|
45
|
-
:
|
45
|
+
:win_ffi => {
|
46
46
|
# Path to some binary, which opens up a window, what can be
|
47
47
|
# minimized, maximized, activated, closed and etc.
|
48
48
|
:window1 => "mspaint",
|
data/spec/test.html
CHANGED
@@ -3,11 +3,13 @@
|
|
3
3
|
<title>RAutomation testing page</title>
|
4
4
|
<script type="text/javascript">
|
5
5
|
function showPrompt() {
|
6
|
-
|
6
|
+
if (prompt("Where do you want to go today?")) {
|
7
|
+
showPrompt();
|
8
|
+
}
|
7
9
|
}
|
8
10
|
</script>
|
9
11
|
</head>
|
10
12
|
<body onload="setTimeout(showPrompt, 1000)">
|
11
13
|
<h1>RAutomation testing page</h1>
|
12
14
|
</body>
|
13
|
-
</html>
|
15
|
+
</html>
|
data/spec/text_field_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RAutomation::TextField do
|
4
4
|
it "#text_field" do
|
@@ -50,4 +50,4 @@ describe RAutomation::TextField do
|
|
50
50
|
field.should exist
|
51
51
|
window.text_field(:class => "non-existent-field").should_not exist
|
52
52
|
end
|
53
|
-
end
|
53
|
+
end
|
data/spec/window_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RAutomation::Window do
|
4
4
|
before :all do
|
@@ -102,15 +102,6 @@ describe RAutomation::Window do
|
|
102
102
|
to raise_exception(RAutomation::UnknownWindowException)
|
103
103
|
end
|
104
104
|
|
105
|
-
it "#child", :if => SpecHelper.adapter == :ffi do
|
106
|
-
window = RAutomation::Window.new(:title => /Windows Internet Explorer/i)
|
107
|
-
window.should exist
|
108
|
-
child = window.child(:title => SpecHelper::DATA[:window2_title])
|
109
|
-
child.should exist
|
110
|
-
child.title.should == SpecHelper::DATA[:window2_title]
|
111
|
-
child.text.should include(SpecHelper::DATA[:window2_text])
|
112
|
-
end
|
113
|
-
|
114
105
|
it "#method_missing" do
|
115
106
|
win = RAutomation::Window.new(:title => SpecHelper::DATA[:window2_title])
|
116
107
|
SpecHelper::DATA[:title_proc].call(win).should == SpecHelper::DATA[:window2_title]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rautomation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jarmo Pertman
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-23 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -62,25 +62,26 @@ files:
|
|
62
62
|
- VERSION
|
63
63
|
- ext/AutoItX/AutoItX.chm
|
64
64
|
- ext/AutoItX/AutoItX3.dll
|
65
|
-
- lib/
|
65
|
+
- lib/RAutomation.rb
|
66
66
|
- lib/rautomation/adapter/autoit.rb
|
67
67
|
- lib/rautomation/adapter/autoit/button.rb
|
68
68
|
- lib/rautomation/adapter/autoit/locators.rb
|
69
69
|
- lib/rautomation/adapter/autoit/text_field.rb
|
70
70
|
- lib/rautomation/adapter/autoit/window.rb
|
71
|
-
- lib/rautomation/adapter/ffi.rb
|
72
|
-
- lib/rautomation/adapter/ffi/button.rb
|
73
|
-
- lib/rautomation/adapter/ffi/constants.rb
|
74
|
-
- lib/rautomation/adapter/ffi/functions.rb
|
75
|
-
- lib/rautomation/adapter/ffi/locators.rb
|
76
|
-
- lib/rautomation/adapter/ffi/text_field.rb
|
77
|
-
- lib/rautomation/adapter/ffi/window.rb
|
78
71
|
- lib/rautomation/adapter/helper.rb
|
72
|
+
- lib/rautomation/adapter/win_ffi.rb
|
73
|
+
- lib/rautomation/adapter/win_ffi/button.rb
|
74
|
+
- lib/rautomation/adapter/win_ffi/constants.rb
|
75
|
+
- lib/rautomation/adapter/win_ffi/functions.rb
|
76
|
+
- lib/rautomation/adapter/win_ffi/locators.rb
|
77
|
+
- lib/rautomation/adapter/win_ffi/text_field.rb
|
78
|
+
- lib/rautomation/adapter/win_ffi/window.rb
|
79
79
|
- lib/rautomation/button.rb
|
80
80
|
- lib/rautomation/text_field.rb
|
81
81
|
- lib/rautomation/wait_helper.rb
|
82
82
|
- lib/rautomation/window.rb
|
83
83
|
- rautomation.gemspec
|
84
|
+
- spec/adapter/win_ffi/window_spec.rb
|
84
85
|
- spec/button_spec.rb
|
85
86
|
- spec/spec_helper.rb
|
86
87
|
- spec/test.html
|
@@ -121,6 +122,7 @@ signing_key:
|
|
121
122
|
specification_version: 3
|
122
123
|
summary: Automate windows and their controls through user-friendly API with Ruby
|
123
124
|
test_files:
|
125
|
+
- spec/adapter/win_ffi/window_spec.rb
|
124
126
|
- spec/button_spec.rb
|
125
127
|
- spec/spec_helper.rb
|
126
128
|
- spec/text_field_spec.rb
|
@@ -1,12 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
gem "ffi", "0.6.3"
|
3
|
-
rescue Gem::LoadError
|
4
|
-
raise Gem::LoadError, "Unable to load FFI gem. Install it with:\n\tgem install ffi -v 0.6.3"
|
5
|
-
end
|
6
|
-
require "ffi"
|
7
|
-
require File.dirname(__FILE__) + "/ffi/constants"
|
8
|
-
require File.dirname(__FILE__) + "/ffi/functions"
|
9
|
-
require File.dirname(__FILE__) + "/ffi/locators"
|
10
|
-
require File.dirname(__FILE__) + "/ffi/window"
|
11
|
-
require File.dirname(__FILE__) + "/ffi/button"
|
12
|
-
require File.dirname(__FILE__) + "/ffi/text_field"
|