watir 1.8.0 → 1.8.1.rc1

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/CHANGES CHANGED
@@ -1,3 +1,20 @@
1
+ == Version 1.8.1 - 2011/04/07
2
+
3
+ === IE improvements
4
+
5
+ * Added #frames method (Ivan Kabluchkov).
6
+ * Added Frame#exists?, #src, #name and other Element methods (Ivan Kabluchkov).
7
+ * Added multiple locators support for #frame method (Ivan Kabluchkov).
8
+ * Added *_no_wait methods (Ivan Kabluchkov).
9
+
10
+ === Firefox improvements
11
+
12
+ * Nothing
13
+
14
+ === General improvements
15
+
16
+ * Using Watir::Util for better compatibility with ActiveSupport used by Rails 3. Closes http://jira.openqa.org/browse/WTR-474 (Jarmo Pertman)
17
+
1
18
  == Version 1.8.0 - 2011/28/02
2
19
 
3
20
  === IE improvements
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.0
1
+ 1.8.1.rc1
@@ -355,6 +355,23 @@ module Watir
355
355
  def element_class; Em; end
356
356
  def element_tag; Em::TAG; end
357
357
  end
358
+
359
+ class Frames < ElementCollections
360
+ def element_class; Frame; end
361
+
362
+ def length
363
+ @container.document.getElementsByTagName("FRAME").length +
364
+ @container.document.getElementsByTagName("IFRAME").length
365
+ end
366
+ end
367
+
368
+ class Forms < ElementCollections
369
+ def element_class; Form; end
370
+ def element_tag; 'FORM'; end
371
+ def length
372
+ @container.document.getElementsByTagName("FORM").length
373
+ end
374
+ end
358
375
 
359
376
  class HTMLElements < ElementCollections
360
377
  include CommonCollection
@@ -103,6 +103,18 @@ module Watir
103
103
  how, what = process_default :name, how, what
104
104
  Frame.new(self, how, what)
105
105
  end
106
+
107
+ # this is the main method for accessing the frames iterator. Returns a Frames collection
108
+ #
109
+ # Typical usage:
110
+ #
111
+ # browser.frames.each { |f| puts f.src } # iterate through all the frames on the page
112
+ # browser.frames[1].to_s # goto the first frame on the page
113
+ # browser.frames.length # show how many frames are on the page.
114
+ #
115
+ def frames
116
+ Frames.new(self)
117
+ end
106
118
 
107
119
  # this method is used to access a form.
108
120
  # available ways of accessing it are, :index, :name, :id, :method, :action, :xpath
@@ -118,6 +130,18 @@ module Watir
118
130
  Form.new(self, how, what)
119
131
  end
120
132
 
133
+ # this is the main method for accessing the forms iterator. Returns a Forms collection
134
+ #
135
+ # Typical usage:
136
+ #
137
+ # browser.forms.each { |f| puts f.src } # iterate through all the forms on the page
138
+ # browser.forms[1].to_s # goto the first form on the page
139
+ # browser.forms.length # show how many forms are on the page.
140
+ #
141
+ def forms
142
+ Forms.new(self)
143
+ end
144
+
121
145
  # This method is used to get a table from the page.
122
146
  # :index (1 based counting) and :id are supported.
123
147
  # NOTE :name is not supported, as the table tag does not have a name attribute. It is not part of the DOM.
data/lib/watir/core.rb CHANGED
@@ -4,7 +4,7 @@ require 'timeout'
4
4
  require 'watir/win32ole'
5
5
 
6
6
  # these are required already in commonwatir, but not when using click_no_wait!
7
- require 'watir/core_ext'
7
+ require 'watir/util'
8
8
  require 'watir/exceptions'
9
9
  require 'watir/matches'
10
10
  require 'watir/wait'
data/lib/watir/element.rb CHANGED
@@ -231,31 +231,45 @@ module Watir
231
231
  @container.wait
232
232
  end
233
233
 
234
- def click_no_wait
235
- assert_exists
236
- assert_enabled
237
- highlight(:set)
234
+ def replace_method(method)
235
+ method == 'click' ? 'click!' : method
236
+ end
237
+ private :replace_method
238
+
239
+ def build_method(method_name, *args)
240
+ arguments = args.map do |argument|
241
+ if argument.is_a?(String)
242
+ argument = "'#{argument}'"
243
+ else
244
+ argument = argument.inspect
245
+ end
246
+ end
247
+ "#{replace_method(method_name)}(#{arguments.join(',')})"
248
+ end
249
+ private :build_method
250
+
251
+ def generate_ruby_code(element, method_name, *args)
238
252
  element = "#{self.class}.new(#{@page_container.attach_command}, :unique_number, #{self.unique_number})"
239
- # fill the $LOAD_PATH in spawned process
253
+ method = build_method(method_name, *args)
240
254
  ruby_code = "$:.unshift(#{$LOAD_PATH.grep(%r{watir(-.*?)?/lib}).map {|p| "'#{p}'" }.join(").unshift(")});" <<
241
- "require '#{File.expand_path(File.dirname(__FILE__))}/core';#{element}.click!"
242
- system(spawned_click_no_wait_command(ruby_code))
243
- highlight(:clear)
255
+ "require '#{File.expand_path(File.dirname(__FILE__))}/core';#{element}.#{method};"
256
+ return ruby_code
244
257
  end
258
+ private :generate_ruby_code
245
259
 
246
- def spawned_click_no_wait_command(command)
260
+ def spawned_no_wait_command(command)
247
261
  command = "-e #{command.inspect}"
248
262
  unless $DEBUG
249
263
  "start rubyw #{command}"
250
264
  else
251
- puts "#click_no_wait command:"
265
+ puts "#no_wait command:"
252
266
  command = "ruby #{command}"
253
267
  puts command
254
268
  command
255
269
  end
256
270
  end
257
271
 
258
- private :spawned_click_no_wait_command
272
+ private :spawned_no_wait_command
259
273
 
260
274
  def click!
261
275
  assert_exists
@@ -352,6 +366,18 @@ module Watir
352
366
  return ole_object.getAttribute(attribute_name)
353
367
  end
354
368
 
369
+ def method_missing(method_name, *args, &block)
370
+ if method_name.to_s =~ /(.*)_no_wait/ && self.respond_to?($1)
371
+ assert_exists
372
+ assert_enabled
373
+ highlight(:set)
374
+ ruby_code = generate_ruby_code(self, $1, *args)
375
+ system(spawned_no_wait_command(ruby_code))
376
+ highlight(:clear)
377
+ else
378
+ super
379
+ end
380
+ end
355
381
  end
356
382
 
357
383
  class ElementMapper # Still to be used
data/lib/watir/form.rb CHANGED
@@ -1,37 +1,35 @@
1
1
  module Watir
2
2
 
3
3
  # Forms
4
-
5
- module FormAccess
4
+
5
+ class FormElement < Element
6
+ def_wrap_guard :action
7
+
6
8
  def name
7
- @ole_object.getAttributeNode('name').value
8
- end
9
- def action
10
- @ole_object.action
11
- end
12
- def method
13
- @ole_object.invoke('method')
9
+ assert_exists
10
+ @o.getAttributeNode('name').value
14
11
  end
15
- def id
16
- @ole_object.invoke('id')
12
+
13
+ def form_method
14
+ assert_exists
15
+ @o.invoke('method')
17
16
  end
18
- end
19
-
20
- # wraps around a form OLE object
21
- class FormWrapper
22
- include FormAccess
23
- def initialize ole_object
24
- @ole_object = ole_object
17
+
18
+ def method(arg = nil)
19
+ if arg.nil?
20
+ form_method
21
+ else
22
+ super(arg)
23
+ end
25
24
  end
26
25
  end
27
26
 
28
27
  # Form Factory object
29
- class Form < Element
30
- include FormAccess
28
+ class Form < FormElement
31
29
  include Container
32
30
 
33
- attr_accessor :form, :ole_object
34
-
31
+ attr_accessor :form
32
+
35
33
  # * container - the containing object, normally an instance of IE
36
34
  # * how - symbol - how we access the form (:name, :id, :index, :action, :method)
37
35
  # * what - what we use to access the form
@@ -39,76 +37,41 @@ module Watir
39
37
  set_container container
40
38
  @how = how
41
39
  @what = what
42
-
40
+ copy_test_config container
41
+ end
42
+
43
+ def locate
43
44
  log "Get form how is #{@how} what is #{@what} "
44
-
45
+
45
46
  # Get form using xpath.
46
47
  if @how == :xpath
47
- @ole_object = @container.element_by_xpath(@what)
48
+ @o = @container.element_by_xpath(@what)
48
49
  elsif @how == :css
49
- @ole_object = @container.element_by_css(@what)
50
+ @o = @container.element_by_css(@what)
50
51
  else
51
- count = 1
52
- doc = @container.document
53
- doc.forms.each do |thisForm|
54
- next unless @ole_object == nil
55
-
56
- wrapped = FormWrapper.new(thisForm)
57
- @ole_object =
58
- case @how
59
- when :name, :id, :method, :action
60
- @what.matches(wrapped.send(@how)) ? thisForm : nil
61
- when :index
62
- count == @what ? thisForm : nil
63
- else
64
- raise MissingWayOfFindingObjectException, "#{how} is an unknown way of finding a form (#{what})"
65
- end
66
- count += 1
67
- end
52
+ locator = FormLocator.new(@container, 'FORM')
53
+ locator.set_specifier(@how, @what)
54
+ @o = locator.locate
68
55
  end
69
- super(@ole_object)
70
-
71
- copy_test_config container
72
56
  end
73
-
74
- def exists?
75
- @ole_object ? true : false
76
- end
77
- alias :exist? :exists?
78
-
79
- def assert_exists
80
- unless exists?
81
- raise UnknownFormException,
82
- "Unable to locate a form using #{@how} and #{@what}"
83
- end
84
- end
85
-
57
+
86
58
  # Submit the data -- equivalent to pressing Enter or Return to submit a form.
87
59
  def submit
88
60
  assert_exists
89
- @ole_object.invoke('submit')
61
+ @o.invoke('submit')
90
62
  @container.wait
91
63
  end
92
64
 
93
65
  def ole_inner_elements
94
66
  assert_exists
95
- @ole_object.elements
67
+ @o.elements
96
68
  end
97
69
  private :ole_inner_elements
98
-
99
- def document
100
- return @ole_object
101
- end
102
-
103
- def wait(no_sleep=false)
104
- @container.wait(no_sleep)
105
- end
106
-
70
+
107
71
  # This method is responsible for setting and clearing the colored highlighting on the specified form.
108
72
  # use :set to set the highlight
109
73
  # :clear to clear the highlight
110
74
  def highlight(set_or_clear, element, count)
111
-
112
75
  if set_or_clear == :set
113
76
  begin
114
77
  original_color = element.style.backgroundColor
@@ -135,16 +98,17 @@ module Watir
135
98
  # causes the object to flash. Normally used in IRB when creating scripts
136
99
  # Default is 10
137
100
  def flash number=10
101
+ assert_exists
138
102
  @original_styles = {}
139
103
  number.times do
140
104
  count = 0
141
- @ole_object.elements.each do |element|
105
+ @o.elements.each do |element|
142
106
  highlight(:set, element, count)
143
107
  count += 1
144
108
  end
145
109
  sleep 0.05
146
110
  count = 0
147
- @ole_object.elements.each do |element|
111
+ @o.elements.each do |element|
148
112
  highlight(:clear, element, count)
149
113
  count += 1
150
114
  end
@@ -154,20 +118,4 @@ module Watir
154
118
 
155
119
  end # class Form
156
120
 
157
- end
158
-
159
- module Watir
160
- class Forms < ElementCollections
161
- def element_class; Form; end
162
- def element_tag; 'FORM'; end
163
- def length
164
- @container.document.getElementsByTagName("FORM").length
165
- end
166
- end
167
-
168
- module Container
169
- def forms
170
- Forms.new(self)
171
- end
172
- end
173
121
  end
data/lib/watir/frame.rb CHANGED
@@ -1,55 +1,44 @@
1
1
  module Watir
2
- class Frame
3
- include Container
2
+ class Frame < Element
4
3
  include PageContainer
5
-
4
+
6
5
  # Find the frame denoted by how and what in the container and return its ole_object
7
6
  def locate
8
- how = @how
9
- what = @what
10
- frames = @container.document.frames
11
- target = nil
12
-
13
- for i in 0..(frames.length - 1)
14
- this_frame = frames.item(i)
15
- case how
16
- when :index
17
- index = i + 1
18
- return this_frame if index == what
19
- when :name
20
- begin
21
- return this_frame if what.matches(this_frame.name)
22
- rescue # access denied?
7
+ @o = nil
8
+ if @how == :xpath
9
+ @o = @container.element_by_xpath(@what)
10
+ elsif @how == :css
11
+ @o = @container.element_by_css(@what)
12
+ else
13
+ locator = FrameLocator.new(@container)
14
+ locator.set_specifier(@how, @what)
15
+ ['FRAME', 'IFRAME'].each do |frame_tag|
16
+ locator.tag = frame_tag
17
+ located_frame, document = locator.locate
18
+ unless (located_frame.nil? && document.nil?)
19
+ @o = located_frame
20
+ @document = document.document
21
+ break
23
22
  end
24
- when :id
25
- # We assume that pages contain frames or iframes, but not both.
26
- this_frame_tag = @container.document.getElementsByTagName("FRAME").item(i)
27
- return this_frame if this_frame_tag and what.matches(this_frame_tag.invoke("id"))
28
- this_iframe_tag = @container.document.getElementsByTagName("IFRAME").item(i)
29
- return this_frame if this_iframe_tag and what.matches(this_iframe_tag.invoke("id"))
30
- when :src
31
- this_frame_tag = @container.document.getElementsByTagName("FRAME").item(i)
32
- return this_frame if this_frame_tag and what.matches(this_frame_tag.src)
33
- this_iframe_tag = @container.document.getElementsByTagName("IFRAME").item(i)
34
- return this_frame if this_iframe_tag and what.matches(this_iframe_tag.src)
35
- else
36
- raise ArgumentError, "Argument #{how} not supported"
37
23
  end
38
24
  end
39
-
40
- raise UnknownFrameException, "Unable to locate a frame with #{how.to_s} #{what}"
41
25
  end
42
-
26
+
27
+ def ole_inner_elements
28
+ document.body.all
29
+ end
30
+ private :ole_inner_elements
31
+
43
32
  def initialize(container, how, what)
44
33
  set_container container
45
34
  @how = how
46
35
  @what = what
47
- @o = locate
48
36
  copy_test_config container
49
37
  end
50
38
 
51
39
  def document
52
- @o.document
40
+ assert_exists
41
+ @document
53
42
  end
54
43
 
55
44
  def attach_command
@@ -554,15 +554,14 @@ module Watir
554
554
 
555
555
  # Show all forms displays all the forms that are on a web page.
556
556
  def show_forms
557
- if allForms = document.forms
558
- count = allForms.length
557
+ if all_forms = self.forms
558
+ count = all_forms.length
559
559
  puts "There are #{count} forms"
560
- for i in 0..count-1 do
561
- wrapped = FormWrapper.new(allForms.item(i))
562
- puts "Form name: #{wrapped.name}"
563
- puts " id: #{wrapped.id}"
564
- puts " method: #{wrapped.method}"
565
- puts " action: #{wrapped.action}"
560
+ all_forms.each do |form|
561
+ puts "Form name: #{form.name}"
562
+ puts " id: #{form.id}"
563
+ puts " method: #{form.method}"
564
+ puts " action: #{form.action}"
566
565
  end
567
566
  else
568
567
  puts "No forms"
data/lib/watir/locator.rb CHANGED
@@ -14,13 +14,21 @@ module Watir
14
14
  how = :class_name
15
15
  when :caption
16
16
  how = :value
17
+ when :method
18
+ how = :form_method
17
19
  end
18
20
 
19
21
  @specifiers[how] = what
20
22
  end
21
23
  end
22
24
 
23
-
25
+ def match_with_specifiers?(element)
26
+ @specifiers.each do |how, what|
27
+ next if how == :index
28
+ return false unless match? element, how, what
29
+ end
30
+ return true
31
+ end
24
32
  end
25
33
 
26
34
  class TaggedElementLocator < Locator
@@ -49,21 +57,9 @@ module Watir
49
57
  def locate
50
58
  count = 0
51
59
  each_element(@tag) do |element|
52
-
53
- catch :next_element do
54
- @specifiers.each do |how, what|
55
- next if how == :index
56
- unless match? element, how, what
57
- throw :next_element
58
- end
59
- end
60
- count += 1
61
- unless count == @specifiers[:index]
62
- throw :next_element
63
- end
64
- return element.ole_object
65
- end
66
-
60
+ next unless match_with_specifiers?(element)
61
+ count += 1
62
+ return element.ole_object if count == @specifiers[:index]
67
63
  end # elements
68
64
  nil
69
65
  end
@@ -73,7 +69,7 @@ module Watir
73
69
  method = element.method(how)
74
70
  rescue NameError
75
71
  raise MissingWayOfFindingObjectException,
76
- "#{how} is an unknown way of finding a <#{@tag}> element (#{what})"
72
+ "#{how} is an unknown way of finding a <#{@tag}> element (#{what})"
77
73
  end
78
74
  case method.arity
79
75
  when 0
@@ -82,11 +78,49 @@ module Watir
82
78
  method.call(what)
83
79
  else
84
80
  raise MissingWayOfFindingObjectException,
85
- "#{how} is an unknown way of finding a <#{@tag}> element (#{what})"
81
+ "#{how} is an unknown way of finding a <#{@tag}> element (#{what})"
82
+ end
83
+ end
84
+
85
+ end
86
+
87
+ class FrameLocator < TaggedElementLocator
88
+ attr_accessor :tag
89
+
90
+ def initialize(container)
91
+ @container = container
92
+ end
93
+
94
+ def each_element tag
95
+ frames = @container.document.frames
96
+ i = 0
97
+ @container.document.getElementsByTagName(tag).each do |frame|
98
+ element = Element.new(frame)
99
+ document = frames.item(i)
100
+ yield element, document
101
+ i += 1
86
102
  end
87
103
  end
88
104
 
105
+ def locate
106
+ count = 0
107
+ each_element(@tag) do |element, document|
108
+ next unless match_with_specifiers?(element)
109
+ count += 1
110
+ return element.ole_object, document if count == @specifiers[:index]
111
+ end # elements
112
+ nil
113
+ end
89
114
  end
115
+
116
+ class FormLocator < TaggedElementLocator
117
+ def each_element(tag)
118
+ @container.document.forms.each do |form|
119
+ yield FormElement.new(form)
120
+ end
121
+ end
122
+ end
123
+
90
124
  class InputElementLocator < Locator
91
125
 
92
126
  attr_accessor :document, :element, :elements, :klass
@@ -126,19 +160,10 @@ module Watir
126
160
  def element.locate; @o; end
127
161
  end
128
162
 
129
- catch :next_element do
130
- throw :next_element unless @types.include?(element.type)
131
- @specifiers.each do |how, what|
132
- next if how == :index
133
- unless match? element, how, what
134
- throw :next_element
135
- end
136
- end
137
- count += 1
138
- throw :next_element unless count == @specifiers[:index]
139
- return object
140
- end
141
-
163
+ next unless @types.include?(element.type) && match_with_specifiers?(element)
164
+
165
+ count += 1
166
+ return object if count == @specifiers[:index]
142
167
  end
143
168
  nil
144
169
  end
@@ -166,7 +191,7 @@ module Watir
166
191
 
167
192
  the_id = @specifiers[:id]
168
193
  if the_id && the_id.class == String &&
169
- @specifiers[:index] == 1 && @specifiers.length == 2
194
+ @specifiers[:index] == 1 && @specifiers.length == 2
170
195
  @element = @document.getElementById(the_id) rescue nil
171
196
  # Return if our fast match really HAS a matching :id
172
197
  return true if @element && @element.invoke('id') == the_id
@@ -190,15 +215,8 @@ module Watir
190
215
  def each
191
216
  count = 0
192
217
  each_element('*') do |element|
193
- catch :next_element do
194
- @specifiers.each do |how, what|
195
- next if how == :index
196
- unless match? element, how, what
197
- throw :next_element
198
- end
199
- end
200
- yield element
201
- end
218
+ next unless match_with_specifiers?(element)
219
+ yield element
202
220
  end
203
221
  nil
204
222
  end
@@ -8,8 +8,8 @@ module Watir
8
8
  class NonControlElement < Element
9
9
 
10
10
  def self.inherited subclass
11
- class_name = subclass.to_s.demodulize
12
- method_name = class_name.underscore
11
+ class_name = Watir::Util.demodulize(subclass.to_s)
12
+ method_name = Watir::Util.underscore(class_name)
13
13
  Watir::Container.module_eval <<-RUBY
14
14
  def #{method_name}(how, what=nil)
15
15
  return #{class_name}.new(self, how, what)
@@ -145,4 +145,4 @@ module Watir
145
145
  TAG = 'EM'
146
146
  end
147
147
 
148
- end
148
+ end
@@ -15,7 +15,7 @@ class ClickNoWait_Tests < Watir::TestCase
15
15
  end
16
16
 
17
17
  def test_spawned_click_no_wait_command
18
- assert_equal("start rubyw -e \"some command\"", browser.link(:id => 'link1').send(:__spawned_click_no_wait_command, "some command"))
18
+ assert_equal("start rubyw -e \"some command\"", browser.link(:id => 'link1').send(:__spawned_no_wait_command, "some command"))
19
19
  end
20
20
 
21
21
  end
@@ -27,7 +27,12 @@ class TC_Forms2 < Test::Unit::TestCase # Note: there is no TC_Forms1
27
27
  assert(browser.form(:action, "pass.html").exists?)
28
28
  assert_false(browser.form(:action, "missing").exists?)
29
29
  end
30
-
30
+
31
+ def test_multiple_attribute
32
+ assert_true(browser.form(:name => 'test2', :id => 'f2').exists?)
33
+ assert_true(browser.form(:name => 'test2', :method => 'get', :action => 'pass2.html'))
34
+ end
35
+
31
36
  def test_button_in_form
32
37
  assert(browser.form(:name, "test2").button(:caption, "Submit").exists?)
33
38
  end
@@ -62,6 +67,19 @@ class TC_Forms2 < Test::Unit::TestCase # Note: there is no TC_Forms1
62
67
  end
63
68
  end
64
69
 
70
+ class TC_Forms_Collection < Test::Unit::TestCase
71
+ def setup
72
+ goto_page "forms2.html"
73
+ end
74
+
75
+ def test_forms_collection
76
+ forms = browser.forms
77
+ assert_equal(4, forms.length)
78
+ assert_equal('pass.html', forms.first.action)
79
+ assert_equal('test2', forms.last.name)
80
+ end
81
+ end
82
+
65
83
  class TC_Form_Display < Test::Unit::TestCase
66
84
  include CaptureIOHelper
67
85
  def test_showforms
@@ -288,3 +306,4 @@ class TC_Hidden_Fields < Test::Unit::TestCase
288
306
  assert_equal("hidden_1", browser.hiddens[2].id)
289
307
  end
290
308
  end
309
+
@@ -11,43 +11,44 @@ class TC_Frames < Test::Unit::TestCase
11
11
  end
12
12
 
13
13
  def test_frame_no_what
14
- assert_raises(UnknownFrameException) { browser.frame("missingFrame").button(:id, "b2").enabled? }
14
+ assert_raises(UnknownObjectException) { browser.frame("missingFrame").button(:id, "b2").enabled? }
15
15
  assert_raises(UnknownObjectException) { browser.frame("buttonFrame2").button(:id, "b2").enabled? }
16
16
  assert(browser.frame("buttonFrame").button(:id, "b2").enabled?)
17
17
  assert_false(browser.frame("buttonFrame").button(:caption, "Disabled Button").enabled?)
18
18
  end
19
19
 
20
20
  def test_frame_using_name
21
- assert_raises(UnknownFrameException) { browser.frame(:name, "missingFrame").button(:id, "b2").enabled? }
21
+ assert_raises(UnknownObjectException) { browser.frame(:name, "missingFrame").button(:id, "b2").enabled? }
22
22
  assert_raises(UnknownObjectException) { browser.frame(:name, "buttonFrame2").button(:id, "b2").enabled? }
23
23
  assert(browser.frame(:name, "buttonFrame").button(:id, "b2").enabled?)
24
24
  assert_false(browser.frame(:name, "buttonFrame").button(:caption, "Disabled Button").enabled?)
25
25
  end
26
26
 
27
27
  def test_frame_using_name_and_regexp
28
- assert_raises(UnknownFrameException) { browser.frame(:name, /missingFrame/).button(:id, "b2").enabled? }
28
+ assert_raises(UnknownObjectException) { browser.frame(:name, /missingFrame/).button(:id, "b2").enabled? }
29
29
  assert(browser.frame(:name, /button/).button(:id, "b2").enabled?)
30
30
  end
31
31
 
32
32
  def test_frame_using_index
33
- assert_raises(UnknownFrameException) { browser.frame(:index, 8).button(:id, "b2").enabled? }
33
+ assert_raises(UnknownObjectException) { browser.frame(:index, 8).button(:id, "b2").enabled? }
34
34
  assert_raises(UnknownObjectException) { browser.frame(:index, 2).button(:id, "b2").enabled? }
35
35
  assert(browser.frame(:index, 1 ).button(:id, "b2").enabled?)
36
36
  assert_false(browser.frame(:index, 1).button(:caption, "Disabled Button").enabled?)
37
+ assert_equal('blankpage.html', browser.frame(:index, 2).src)
37
38
  end
38
39
 
39
40
  tag_method :test_frame_with_invalid_attribute, :fails_on_firefox
40
41
 
41
42
  def test_frame_with_invalid_attribute
42
- assert_raises(ArgumentError) { browser.frame(:blah, 'no_such_thing').button(:id, "b2").enabled? }
43
+ assert_raises(MissingWayOfFindingObjectException) { browser.frame(:blah, 'no_such_thing').button(:id, "b2").enabled? }
43
44
  end
44
45
 
45
46
  def test_preset_frame
46
47
  # with ruby's instance_eval, we are able to use the same frame for several actions
47
48
  results = browser.frame("buttonFrame").instance_eval do
48
49
  [
49
- button(:id, "b2").enabled?,
50
- button(:caption, "Disabled Button").enabled?
50
+ button(:id, "b2").enabled?,
51
+ button(:caption, "Disabled Button").enabled?
51
52
  ]
52
53
  end
53
54
  assert_equal([true, false], results)
@@ -63,11 +64,11 @@ class TC_Frames2 < Test::Unit::TestCase
63
64
  end
64
65
 
65
66
  def test_frame_with_no_name
66
- assert_raises(UnknownFrameException) { browser.frame(:name, "missingFrame").button(:id, "b2").enabled? }
67
+ assert_raises(UnknownObjectException) { browser.frame(:name, "missingFrame").button(:id, "b2").enabled? }
67
68
  end
68
69
 
69
70
  def test_frame_by_id
70
- assert_raises(UnknownFrameException) { browser.frame(:id, "missingFrame").button(:id, "b2").enabled? }
71
+ assert_raises(UnknownObjectException) { browser.frame(:id, "missingFrame").button(:id, "b2").enabled? }
71
72
  assert(browser.frame(:id, 'first_frame').button(:id, "b2").enabled?)
72
73
  end
73
74
 
@@ -85,8 +86,8 @@ class TC_NestedFrames < Test::Unit::TestCase
85
86
  end
86
87
 
87
88
  def test_frame
88
- assert_raises(UnknownFrameException) { browser.frame("missingFrame").button(:id, "b2").enabled? }
89
- assert_raises(UnknownFrameException) { browser.frame("nestedFrame").frame("subFrame").button(:id, "b2").enabled? }
89
+ assert_raises(UnknownObjectException) { browser.frame("missingFrame").button(:id, "b2").enabled? }
90
+ assert_raises(UnknownObjectException) { browser.frame("nestedFrame").frame("subFrame").button(:id, "b2").enabled? }
90
91
  assert(browser.frame("nestedFrame").frame("senderFrame").button(:name, "sendIt").enabled?)
91
92
  browser.frame("nestedFrame").frame("senderFrame").text_field(:index, "1").set("Hello")
92
93
  browser.frame("nestedFrame").frame("senderFrame").button(:name, "sendIt").click
@@ -171,3 +172,25 @@ class TC_Frames_click_no_wait < Test::Unit::TestCase
171
172
  end
172
173
  end
173
174
 
175
+ class TC_Frame_multiple_attributes < Test::Unit::TestCase
176
+ def setup
177
+ goto_page "frame_multi.html"
178
+ end
179
+
180
+ def test_get_frame_by_name_and_id
181
+ assert_equal('blankpage.html', browser.frame(:id => 'second_frame', :name => 'buttonFrame2').src)
182
+ end
183
+ end
184
+
185
+ class TC_frames_method_for_container < Test::Unit::TestCase
186
+ def setup
187
+ goto_page "frame_multi.html"
188
+ end
189
+
190
+ def test_frames_collection
191
+ frames = browser.frames
192
+ assert_equal(3, frames.length)
193
+ assert_equal('first_frame', frames[1].id)
194
+ assert_equal('pass.html', frames[3].src)
195
+ end
196
+ end
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', '..') unless $SETUP_LOADED
2
+ require 'unittests/setup'
3
+
4
+ class TC_No_Wait_Commands < Test::Unit::TestCase
5
+ def test_fire_event_no_wait
6
+ goto_page "javascriptevents.html"
7
+ browser.link(:text, "Check the Status").fire_event_no_wait("onMouseOver")
8
+ assert_equal("It worked", browser.status)
9
+ end
10
+
11
+ def test_set_no_wait_text_field
12
+ goto_page "textfields1.html"
13
+ browser.text_field(:name, "text1").set_no_wait("watir IE Controller")
14
+ assert_equal("watir IE Controller", browser.text_field(:name, "text1").value)
15
+ end
16
+
17
+ def test_set_no_wait_text_select_list
18
+ goto_page "selectboxes1.html"
19
+ browser.select_list(:name,'sel1').set_no_wait(/Option 1/)
20
+ assert_equal('Option 1', browser.select_list(:name , 'sel1').selected_options.first)
21
+ end
22
+ end
data/unittests/setup.rb CHANGED
@@ -71,9 +71,9 @@ $window_tests = Dir["unittests/windows/*_test.rb"] - ["unittests/windows/ie-each
71
71
 
72
72
  # load development libs also in #click_no_wait processes
73
73
  Watir::Element.class_eval do
74
- alias_method :__spawned_click_no_wait_command, :spawned_click_no_wait_command
74
+ alias_method :__spawned_no_wait_command, :spawned_no_wait_command
75
75
 
76
- def spawned_click_no_wait_command(command)
76
+ def spawned_no_wait_command(command)
77
77
  # make it actually wait in tests for easier testing
78
78
  #
79
79
  # please note that this implementation of click_no_wait takes considerably more time than
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watir
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
5
- prerelease: false
4
+ hash: 977940506
5
+ prerelease: true
6
6
  segments:
7
7
  - 1
8
8
  - 8
9
- - 0
10
- version: 1.8.0
9
+ - 1
10
+ - rc1
11
+ version: 1.8.1.rc1
11
12
  platform: ruby
12
13
  authors:
13
14
  - Bret Pettichord
@@ -15,7 +16,7 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2011-02-28 00:00:00 -07:00
19
+ date: 2011-04-07 00:00:00 +03:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
@@ -58,12 +59,13 @@ dependencies:
58
59
  requirements:
59
60
  - - "="
60
61
  - !ruby/object:Gem::Version
61
- hash: 55
62
+ hash: 977940506
62
63
  segments:
63
64
  - 1
64
65
  - 8
65
- - 0
66
- version: 1.8.0
66
+ - 1
67
+ - rc1
68
+ version: 1.8.1.rc1
67
69
  type: :runtime
68
70
  version_requirements: *id003
69
71
  - !ruby/object:Gem::Dependency
@@ -74,12 +76,13 @@ dependencies:
74
76
  requirements:
75
77
  - - "="
76
78
  - !ruby/object:Gem::Version
77
- hash: 55
79
+ hash: 977940506
78
80
  segments:
79
81
  - 1
80
82
  - 8
81
- - 0
82
- version: 1.8.0
83
+ - 1
84
+ - rc1
85
+ version: 1.8.1.rc1
83
86
  type: :runtime
84
87
  version_requirements: *id004
85
88
  - !ruby/object:Gem::Dependency
@@ -185,6 +188,7 @@ files:
185
188
  - unittests/navigate_test.rb
186
189
  - unittests/nbsp_xpath_test.rb
187
190
  - unittests/non_core_tests.rb
191
+ - unittests/no_wait_test.rb
188
192
  - unittests/pagecontainstext_test.rb
189
193
  - unittests/parent_child_test.rb
190
194
  - unittests/perf_test.rb
@@ -332,12 +336,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
332
336
  required_rubygems_version: !ruby/object:Gem::Requirement
333
337
  none: false
334
338
  requirements:
335
- - - ">="
339
+ - - ">"
336
340
  - !ruby/object:Gem::Version
337
- hash: 3
341
+ hash: 25
338
342
  segments:
339
- - 0
340
- version: "0"
343
+ - 1
344
+ - 3
345
+ - 1
346
+ version: 1.3.1
341
347
  requirements:
342
348
  - Microsoft Windows running Internet Explorer 5.5 or later.
343
349
  rubyforge_project: Watir