safariwatir 0.2.6 → 0.2.8

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.
Files changed (3) hide show
  1. data/safariwatir.rb +68 -41
  2. data/safariwatir/scripter.rb +31 -3
  3. metadata +5 -5
data/safariwatir.rb CHANGED
@@ -13,12 +13,35 @@ module Watir
13
13
  def text
14
14
  @scripter.document_text
15
15
  end
16
+
17
+ def title
18
+ @scripter.document_title
19
+ end
16
20
  end
17
21
 
18
22
  module Container
19
23
  attr_reader :scripter
20
24
  private :scripter
21
25
 
26
+ DEFAULT_TYPING_LAG = 0.08
27
+
28
+ def set_fast_speed
29
+ @scripter.typing_lag = 0
30
+ end
31
+
32
+ def set_slow_speed
33
+ @scripter.typing_lag = DEFAULT_TYPING_LAG
34
+ end
35
+
36
+ def speed=(how_fast)
37
+ case how_fast
38
+ when :fast : set_fast_speed
39
+ when :slow : set_slow_speed
40
+ else
41
+ raise ArgumentError, "Invalid speed: #{how_fast}"
42
+ end
43
+ end
44
+
22
45
  module Clickable
23
46
  def click
24
47
  @scripter.highlight(self) do
@@ -71,30 +94,23 @@ module Watir
71
94
  end
72
95
 
73
96
  def operate(&block)
74
- send("operate_by_" + how.to_s, &block)
97
+ scripter_suffix = OPERATIONS[how]
98
+ if scripter_suffix.nil?
99
+ raise "SafariWatir does not currently support finding by #{how}"
100
+ end
101
+ @scripter.send("operate_by_#{scripter_suffix}", self, &block)
75
102
  end
76
103
 
77
- protected
78
-
79
- def operate_by_id(&block)
80
- @scripter.operate_by_id(self, &block)
81
- end
82
- def operate_by_index(&block)
83
- @scripter.operate_by_index(self, &block)
84
- end
85
- def operate_by_name(&block)
86
- @scripter.operate_by_name(self, &block)
87
- end
88
- def operate_by_text(&block)
89
- @scripter.operate_on_link(self, &block)
90
- end
91
- def operate_by_url(&block)
92
- @scripter.operate_on_link(self, &block)
93
- end
94
- def operate_by_value(&block)
95
- @scripter.operate_by_input_value(self, &block)
96
- end
97
- alias_method :operate_by_caption, :operate_by_value
104
+ OPERATIONS = {
105
+ :id => "id",
106
+ :index => "index",
107
+ :class => "class",
108
+ :name => "name",
109
+ :text => "on_link",
110
+ :url => "on_link",
111
+ :value => "input_value",
112
+ :caption => "input_value"
113
+ }
98
114
  end
99
115
 
100
116
  class Form < HtmlElement
@@ -124,6 +140,10 @@ module Watir
124
140
  include Clickable
125
141
  include Container
126
142
 
143
+ def html
144
+ @scripter.get_html_for(self)
145
+ end
146
+
127
147
  def text
128
148
  @scripter.get_text_for(self)
129
149
  end
@@ -205,6 +225,22 @@ module Watir
205
225
  Option.new(@scripter, self, how, what)
206
226
  end
207
227
 
228
+ def selected_values
229
+ values = []
230
+ index = 1
231
+ loop do
232
+ option = option(:index, index)
233
+ break unless option.exists?
234
+ values << option if option.selected?
235
+ index += 1
236
+ end
237
+ values.map {|o| o.text } #TODO?
238
+ end
239
+
240
+ def selected_value
241
+ selected_values.first
242
+ end
243
+
208
244
  def speak
209
245
  @scripter.speak_options_for(self)
210
246
  end
@@ -230,6 +266,14 @@ module Watir
230
266
  end
231
267
  alias :exist? :exists?
232
268
 
269
+ def selected?
270
+ @scripter.option_selected?(self)
271
+ end
272
+
273
+ def text
274
+ @scripter.get_text_for(self)
275
+ end
276
+
233
277
  def tag; "OPTION"; end
234
278
  end
235
279
 
@@ -288,6 +332,8 @@ module Watir
288
332
  class TableCell < ContentElement
289
333
  def initialize(scripter, how, what, row = nil)
290
334
  @scripter = scripter.for_table(self)
335
+ set_slow_speed # TODO: Need to inherit this somehow
336
+
291
337
  @how = how
292
338
  @what = what
293
339
  @row = row
@@ -416,8 +462,6 @@ module Watir
416
462
  include Container
417
463
  include PageContainer
418
464
 
419
- DEFAULT_TYPING_LAG = 0.08
420
-
421
465
  def self.start(url = nil)
422
466
  safari = new
423
467
  safari.goto(url) if url
@@ -429,23 +473,6 @@ module Watir
429
473
  @scripter.ensure_window_ready
430
474
  set_slow_speed
431
475
  end
432
-
433
- def set_fast_speed
434
- @scripter.typing_lag = 0
435
- end
436
-
437
- def set_slow_speed
438
- @scripter.typing_lag = DEFAULT_TYPING_LAG
439
- end
440
-
441
- def speed=(how_fast)
442
- case how_fast
443
- when :fast : set_fast_speed
444
- when :slow : set_slow_speed
445
- else
446
- raise ArgumentError, "Invalid speed: #{how_fast}"
447
- end
448
- end
449
476
 
450
477
  def close
451
478
  scripter.close
@@ -120,6 +120,10 @@ if (element) {
120
120
  execute(element.operate { %|return element.innerText| }, element)
121
121
  end
122
122
 
123
+ def get_html_for(element = @element)
124
+ execute(element.operate { %|return element.innerHTML| }, element)
125
+ end
126
+
123
127
  def operate_by_table_cell(element = @element)
124
128
  %|var element = document;
125
129
  if (element == undefined) {
@@ -137,7 +141,11 @@ if (element == undefined) {
137
141
  end
138
142
 
139
143
  def document_html
140
- execute(%|return document.getElementsByTagName('BODY').item(0).outerHTML;|)
144
+ execute(%|return document.all[0].outerHTML;|)
145
+ end
146
+
147
+ def document_title
148
+ execute(%|return document.title;|)
141
149
  end
142
150
 
143
151
  def focus(element)
@@ -196,11 +204,10 @@ if (selected == -1) {
196
204
  element_exists?(element) { handle_option(element) }
197
205
  end
198
206
 
199
- def handle_option(select_list, selection = nil)
207
+ def handle_option(select_list)
200
208
  %|var option_found = false;
201
209
  for (var i = 0; i < element.options.length; i++) {
202
210
  if (element.options[i].#{select_list.how} == '#{select_list.what}') {
203
- #{selection}
204
211
  option_found = true;
205
212
  }
206
213
  }
@@ -209,6 +216,21 @@ if (!option_found) {
209
216
  }|
210
217
  end
211
218
  private :handle_option
219
+
220
+ def option_selected?(element = @element)
221
+ element_exists?(element) { handle_selected(element) == "true" }
222
+ end
223
+
224
+ def handle_selected(select_list)
225
+ %|var selected = false;
226
+ for (var i = 0; i < element.options.length; i++) {
227
+ if (element.options[i].#{select_list.how} == '#{select_list.what}' && element.options[i].selected) {
228
+ selected = true;
229
+ }
230
+ }
231
+ return selected;|
232
+ end
233
+ private :handle_option
212
234
 
213
235
  def clear_text_input(element = @element)
214
236
  execute(element.operate { %|element.value = '';| }, element)
@@ -342,6 +364,12 @@ for (var i = 0; i < elements.length; i++) {
342
364
  }
343
365
  }|, yield)
344
366
  end
367
+
368
+ def operate_by_class(element)
369
+ js.operate(%|
370
+ var elements = document.getElementsByClassName('#{element.what}');
371
+ var element = elements[0];|, yield)
372
+ end
345
373
 
346
374
  # Checkboxes/Radios have the same name, different values
347
375
  def handle_form_element_name_match(element)
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safariwatir
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Hoover
8
- autorequire: safariwatir
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-11 00:00:00 -06:00
12
+ date: 2008-08-17 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -35,7 +35,7 @@ files:
35
35
  - safariwatir/core_ext.rb
36
36
  - safariwatir/scripter.rb
37
37
  - watir/exceptions.rb
38
- has_rdoc: false
38
+ has_rdoc: true
39
39
  homepage: http://safariwatir.rubyforge.org/
40
40
  post_install_message:
41
41
  rdoc_options: []
@@ -58,7 +58,7 @@ requirements:
58
58
  - Mac OS X running Safari
59
59
  - Some features require you to turn on "Enable access for assistive devices" in System Preferences > Universal Access
60
60
  rubyforge_project: safariwatir
61
- rubygems_version: 1.0.0
61
+ rubygems_version: 1.1.1
62
62
  signing_key:
63
63
  specification_version: 2
64
64
  summary: Automated testing tool for web applications.