vapir-common 1.9.0 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
data/lib/vapir-common/browser.rb
CHANGED
@@ -90,10 +90,10 @@ module Vapir
|
|
90
90
|
|
91
91
|
# does the work of #screen_capture when the WinWindow library is being used for that. see #screen_capture documentation (browser-specific)
|
92
92
|
def screen_capture_win_window(filename, options = {})
|
93
|
-
|
94
|
-
|
95
|
-
raise ArgumentError, ":format was specified as #{options[:format].inspect} but only 'bmp' is supported when :dc is #{options[:dc].inspect}"
|
93
|
+
if filename =~ /\.(\w+)\z/
|
94
|
+
extension = $1
|
96
95
|
end
|
96
|
+
options = handle_options(options, :dc => :window, :format => extension)
|
97
97
|
if options[:dc] == :desktop
|
98
98
|
win_window.really_set_foreground!
|
99
99
|
screenshot_win=WinWindow.desktop_window
|
@@ -101,7 +101,18 @@ module Vapir
|
|
101
101
|
else
|
102
102
|
screenshot_win=win_window
|
103
103
|
end
|
104
|
-
|
104
|
+
if !options[:format] || options[:format].downcase == 'bmp'
|
105
|
+
screenshot_win.capture_to_bmp_file(filename, :dc => options[:dc])
|
106
|
+
else
|
107
|
+
begin
|
108
|
+
require 'rmagick'
|
109
|
+
rescue LoadError
|
110
|
+
raise $!.class, "To use :format => #{format.inspect}, please install rmagick: http://rmagick.rubyforge.org/install-faq.html#win\n\n"+$!.message
|
111
|
+
end
|
112
|
+
bmp_blob = screenshot_win.capture_to_bmp_blob(:dc => options[:dc])
|
113
|
+
magick_img = Magick::Image.from_blob(bmp_blob)[0]
|
114
|
+
magick_img.write(filename) # magick handles converting based on extension
|
115
|
+
end
|
105
116
|
end
|
106
117
|
private :screen_capture_win_window
|
107
118
|
end
|
data/lib/vapir-common/config.rb
CHANGED
@@ -76,6 +76,18 @@ module Vapir
|
|
76
76
|
@config_hash = {}
|
77
77
|
@recognized_options = {}
|
78
78
|
yield(self) if block_given?
|
79
|
+
define_key_methods
|
80
|
+
end
|
81
|
+
# this is redundant with #method_missing, really, but it makes autocomplete possible in irb
|
82
|
+
def define_key_methods
|
83
|
+
recognized_keys.each do |recognized_key|
|
84
|
+
(class << self; self; end).send(:define_method, recognized_key) do
|
85
|
+
read(recognized_key)
|
86
|
+
end
|
87
|
+
(class << self; self; end).send(:define_method, "#{recognized_key}=") do |value|
|
88
|
+
update recognized_key, value
|
89
|
+
end
|
90
|
+
end
|
79
91
|
end
|
80
92
|
# if the method invoked looks like assignment (ends with an =), calls to #update with
|
81
93
|
# the given method as the key and its argument as the value. otherwise calls #read with
|
@@ -109,7 +121,7 @@ module Vapir
|
|
109
121
|
def []=(key, value)
|
110
122
|
update(key, value)
|
111
123
|
end
|
112
|
-
# returns an array of
|
124
|
+
# returns an array of configuration keys which are recognized (either locally or inherited from a parent)
|
113
125
|
def recognized_keys
|
114
126
|
((@parent ? @parent.recognized_keys : [])+@recognized_options.keys).uniq
|
115
127
|
end
|
@@ -173,7 +185,7 @@ module Vapir
|
|
173
185
|
end
|
174
186
|
@recognized_options[key]= Option.new(key, options)
|
175
187
|
end
|
176
|
-
# reads the value for the given key. if
|
188
|
+
# reads the value for the given key. if no value is defined, raises NoValueError.
|
177
189
|
def read(key)
|
178
190
|
key = recognize_key! key
|
179
191
|
if @config_hash.key?(key)
|
@@ -201,7 +213,7 @@ module Vapir
|
|
201
213
|
update(k,v)
|
202
214
|
end
|
203
215
|
end
|
204
|
-
# deletes the given
|
216
|
+
# deletes the given key from the hash. this does not affect any ancestor Configurations.
|
205
217
|
def delete(key)
|
206
218
|
key = check_key key
|
207
219
|
@config_hash.delete(key)
|
@@ -305,6 +317,15 @@ module Vapir
|
|
305
317
|
end
|
306
318
|
|
307
319
|
# :stopdoc:
|
320
|
+
|
321
|
+
# reopen this module to add stuff that's sort of separate from the Configurable module itself
|
322
|
+
module Configurable
|
323
|
+
# call the given block with :wait set to false
|
324
|
+
def without_waiting(&block)
|
325
|
+
with_config(:wait => false, &block)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
308
329
|
@configurations = []
|
309
330
|
def (@configurations).update_from_source # :nodoc:
|
310
331
|
self.each do |c|
|
data/lib/vapir-common/element.rb
CHANGED
@@ -267,7 +267,10 @@ module Vapir
|
|
267
267
|
def locate!
|
268
268
|
locate || begin
|
269
269
|
klass=self.is_a?(Frame) ? Vapir::Exception::UnknownFrameException : Vapir::Exception::UnknownObjectException
|
270
|
-
|
270
|
+
using = []
|
271
|
+
using << "#{@how}: #{@what.inspect}" if @how
|
272
|
+
using << "index: #{@index}" if @index
|
273
|
+
message="Unable to locate #{self.class}" + (using.any? ? ", using #{using.join(", ")}" : "")
|
271
274
|
message+="\non container: #{@container.inspect}" if @container
|
272
275
|
raise(klass, message)
|
273
276
|
end
|
@@ -304,16 +304,14 @@ module Vapir
|
|
304
304
|
dom_attr :text, :value, :selected
|
305
305
|
|
306
306
|
# sets this Option's selected state to the given (true or false).
|
307
|
-
#
|
308
|
-
# got this Option from a SelectList container), will fire the onchange event on the
|
309
|
-
# select list if our state changes.
|
307
|
+
# will fire the onchange event on the select list if our state changes.
|
310
308
|
def set_selected(state, method_options={})
|
311
|
-
method_options={:highlight => true, :wait =>
|
309
|
+
method_options={:highlight => true, :wait => config.wait}.merge(method_options)
|
312
310
|
with_highlight(method_options) do
|
313
311
|
state_was=element_object.selected
|
314
312
|
element_object.selected=state # TODO: if state is false and this isn't an option of a multiple select list, should this error?
|
315
|
-
if
|
316
|
-
@extra[:select_list].fire_event(:onchange, method_options)
|
313
|
+
if state_was != state
|
314
|
+
(@extra[:select_list] || parent_select_list).fire_event(:onchange, method_options)
|
317
315
|
end
|
318
316
|
wait if method_options[:wait]
|
319
317
|
end
|
@@ -433,10 +431,10 @@ module Vapir
|
|
433
431
|
# any have changed. raises Vapir::Exception::NoValueFoundException if none matched.
|
434
432
|
# breaks after the first match found if this is not a multiple select list.
|
435
433
|
# takes options hash (note, these are flags for the function, not to be confused with the Options of the select list)
|
436
|
-
# - :wait => true/false
|
437
|
-
# used for the onchange event.
|
434
|
+
# - :wait => true/false - default is the current config.wait value. controls whether #wait is called and whether
|
435
|
+
# fire_event or fire_event_no_wait is used for the onchange event.
|
438
436
|
def select_options_if(method_options={})
|
439
|
-
method_options={:wait =>
|
437
|
+
method_options={:wait => config.wait, :highlight => true}.merge(method_options)
|
440
438
|
raise ArgumentError, "no block given!" unless block_given?
|
441
439
|
assert_enabled
|
442
440
|
any_matched=false
|
@@ -496,7 +494,7 @@ module Vapir
|
|
496
494
|
# Fires the onchange event if value changes.
|
497
495
|
# Fires the onclick event the state is true.
|
498
496
|
def set(state=true, options={})
|
499
|
-
options=handle_options(options, :highlight => true, :wait =>
|
497
|
+
options=handle_options(options, :highlight => true, :wait => config.wait)
|
500
498
|
with_highlight(options) do
|
501
499
|
assert_enabled
|
502
500
|
if checked!=state
|
@@ -527,9 +525,9 @@ module Vapir
|
|
527
525
|
#
|
528
526
|
# takes options:
|
529
527
|
# * :highlight => true/false (defaults to true)
|
530
|
-
# * :wait => true/false (defaults to
|
528
|
+
# * :wait => true/false (defaults to true)
|
531
529
|
def set(state=true, options={})
|
532
|
-
options=handle_options(options, :highlight => true, :wait =>
|
530
|
+
options=handle_options(options, :highlight => true, :wait => config.wait)
|
533
531
|
with_highlight(options) do
|
534
532
|
assert_enabled
|
535
533
|
if checked!=state
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'vapir-common/external/core_extensions'
|
2
2
|
module Vapir
|
3
|
+
# Hash of all known key codes. hash keys are symbols representing the key. hash values are integers.
|
3
4
|
KeyCodes = (('0'..'9').to_a+('a'..'z').to_a).inject({}){|hash, char| hash.merge(char.to_sym => char.vapir_ord) }.merge(
|
4
5
|
{
|
5
6
|
:cancel => 3,
|
@@ -83,6 +84,8 @@ module Vapir
|
|
83
84
|
:quote => 222,
|
84
85
|
:meta => 224,
|
85
86
|
})
|
87
|
+
# Hash of key codes for characters that get printed when you hit the key (in a text field for example).
|
88
|
+
# hash keys are single-character strings; values are integers.
|
86
89
|
PrintKeyCodes = (('0'..'9').to_a+('a'..'z').to_a).inject({}){|hash, char| hash.merge(char => char.to_sym) }.merge(
|
87
90
|
{
|
88
91
|
"\t" => :tab,
|
@@ -100,6 +103,9 @@ module Vapir
|
|
100
103
|
']' => :close_bracket,
|
101
104
|
"'" => :quote,
|
102
105
|
}).inject({}){|hash, (key, key_codes_key)| hash.merge(key => KeyCodes[key_codes_key]) }
|
106
|
+
# Hash of key codes for characters that get printed when you hit the key combined with the shift key
|
107
|
+
# (in a text field for example).
|
108
|
+
# hash keys are single-character strings; values are integers.
|
103
109
|
ShiftPrintKeyCodes = ('A'..'Z').to_a.inject({}){|hash, char| hash.merge(char => char.downcase.to_sym) }.merge(
|
104
110
|
{
|
105
111
|
')' => :'0',
|
@@ -123,6 +129,8 @@ module Vapir
|
|
123
129
|
'}' => :close_bracket,
|
124
130
|
'"' => :quote,
|
125
131
|
}).inject({}){|hash, (key, key_codes_key)| hash.merge(key => KeyCodes[key_codes_key]) }
|
132
|
+
# Hash of key codes for characters on the number pad.
|
133
|
+
# hash keys are single-character strings; values are integers.
|
126
134
|
NumpadKeyCodes = ('0'..'9').inject({}){|hash, char| hash.merge(char => "numpad#{char}".to_sym) }.merge(
|
127
135
|
{
|
128
136
|
'*' => :multiply,
|
data/lib/vapir-common/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vapir-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 51
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
|
-
-
|
7
|
+
- 10
|
9
8
|
- 0
|
10
|
-
version: 1.
|
9
|
+
version: 1.10.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Ethan
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-
|
17
|
+
date: 2011-09-28 00:00:00 -04:00
|
19
18
|
default_executable:
|
20
19
|
dependencies: []
|
21
20
|
|
@@ -68,27 +67,23 @@ rdoc_options:
|
|
68
67
|
require_paths:
|
69
68
|
- lib
|
70
69
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
70
|
requirements:
|
73
71
|
- - ">="
|
74
72
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 3
|
76
73
|
segments:
|
77
74
|
- 0
|
78
75
|
version: "0"
|
79
76
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
-
none: false
|
81
77
|
requirements:
|
82
78
|
- - ">="
|
83
79
|
- !ruby/object:Gem::Version
|
84
|
-
hash: 3
|
85
80
|
segments:
|
86
81
|
- 0
|
87
82
|
version: "0"
|
88
83
|
requirements: []
|
89
84
|
|
90
85
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.3.
|
86
|
+
rubygems_version: 1.3.6
|
92
87
|
signing_key:
|
93
88
|
specification_version: 3
|
94
89
|
summary: Common basis for Vapir libraries for automating web browsers in Ruby
|