watir-webdriver 0.4.1 → 0.5.0

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/.gitignore CHANGED
@@ -9,4 +9,5 @@ rdoc
9
9
  Gemfile.lock
10
10
  .rvmrc
11
11
  *.rbc
12
- .rbx/*
12
+ .rbx/*
13
+ chromedriver.log
data/.gitmodules CHANGED
@@ -1,3 +1,3 @@
1
1
  [submodule "spec/watirspec"]
2
2
  path = spec/watirspec
3
- url = git://github.com/jarib/watirspec.git
3
+ url = git://github.com/watir/watirspec.git
data/.travis.yml CHANGED
@@ -10,7 +10,7 @@ before_script:
10
10
  env:
11
11
  - WATIR_WEBDRIVER_BROWSER=firefox
12
12
  - WATIR_WEBDRIVER_BROWSER=firefox ALWAYS_LOCATE=false
13
- # - WATIR_WEBDRIVER_BROWSER=chrome
14
- # - WATIR_WEBDRIVER_BROWSER=chrome ALWAYS_LOCATE=false
15
13
  # - WATIR_WEBDRIVER_BROWSER=firefox NATIVE_EVENTS=true
14
+ - WATIR_WEBDRIVER_BROWSER=chrome
15
+ - WATIR_WEBDRIVER_BROWSER=chrome ALWAYS_LOCATE=false
16
16
  # - WATIR_WEBDRIVER_BROWSER=chrome NATIVE_EVENTS=true
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009-2011 Jari Bakken
1
+ Copyright (c) 2009-2012 Jari Bakken
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -4,7 +4,7 @@ watir-webdriver
4
4
  Watir implementation built on WebDriver's Ruby bindings.
5
5
  See http://rubyforge.org/pipermail/wtr-development/2009-October/001313.html.
6
6
 
7
- [![Build Status](https://secure.travis-ci.org/jarib/watir-webdriver.png)](http://travis-ci.org/jarib/watir-webdriver)
7
+ [![Build Status](https://secure.travis-ci.org/watir/watir-webdriver.png)](http://travis-ci.org/watir/watir-webdriver)
8
8
 
9
9
  API docs
10
10
  --------
@@ -33,7 +33,7 @@ The file in lib/watir/elements/generated.rb is autogenerated from the HTML5 spec
33
33
  Specs
34
34
  -----
35
35
 
36
- watir-webdriver uses [watirspec](http://github.com/jarib/watirspec) for testing. After cloning, you should fetch the submodule:
36
+ watir-webdriver uses [watirspec](http://github.com/watir/watirspec) for testing. After cloning, you should fetch the submodule:
37
37
 
38
38
  git submodule init && git submodule update
39
39
 
@@ -43,7 +43,7 @@ See also
43
43
  --------
44
44
 
45
45
  * http://github.com/jarib/webidl
46
- * http://github.com/jarib/watirspec/tree/watir2
46
+ * http://github.com/watir/watirspec
47
47
  * http://selenium.googlecode.com
48
48
 
49
49
  Dependencies
@@ -65,4 +65,4 @@ Note on Patches/Pull Requests
65
65
  Copyright
66
66
  ---------
67
67
 
68
- Copyright (c) 2009-2011 Jari Bakken. See LICENSE for details.
68
+ Copyright (c) 2009-2012 Jari Bakken. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+
1
3
  require 'rubygems'
2
4
  require 'bundler'
3
5
  Bundler::GemHelper.install_tasks
@@ -19,10 +21,6 @@ end
19
21
 
20
22
  task :default => :spec
21
23
 
22
- task :lib do
23
- $LOAD_PATH.unshift(File.expand_path("lib", File.dirname(__FILE__)))
24
- end
25
-
26
24
  namespace :html5 do
27
25
  SPEC_URI = "http://www.whatwg.org/specs/web-apps/current-work/"
28
26
  SPEC_PATH = "support/html5.html"
@@ -86,17 +84,11 @@ namespace :html5 do
86
84
  task :update => [:download, :generate, :overwrite]
87
85
  end # html5
88
86
 
89
- begin
90
- require 'yard'
91
- Rake::Task[:lib].invoke
92
- require "yard/handlers/watir"
93
- YARD::Rake::YardocTask.new do |task|
94
- task.options = %w[--debug] # this is pretty slow, so nice with some output
95
- end
96
- rescue LoadError
97
- task :yard do
98
- abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
99
- end
87
+
88
+ require 'yard'
89
+ require "yard/handlers/watir"
90
+ YARD::Rake::YardocTask.new do |task|
91
+ task.options = %w[--debug] # this is pretty slow, so nice with some output
100
92
  end
101
93
 
102
94
  load "spec/watirspec/watirspec.rake" if File.exist?("spec/watirspec/watirspec.rake")
@@ -57,26 +57,31 @@ end
57
57
  require 'watir-webdriver/attribute_helper'
58
58
  require 'watir-webdriver/row_container'
59
59
  require 'watir-webdriver/cell_container'
60
+ require 'watir-webdriver/user_editable'
60
61
  require 'watir-webdriver/element_collection'
61
62
  require 'watir-webdriver/elements/element'
62
63
  require 'watir-webdriver/elements/generated'
63
- require 'watir-webdriver/elements/frame'
64
- require 'watir-webdriver/elements/input'
64
+
65
65
  require 'watir-webdriver/elements/button'
66
66
  require 'watir-webdriver/elements/checkbox'
67
67
  require 'watir-webdriver/elements/file_field'
68
+ require 'watir-webdriver/elements/font'
69
+ require 'watir-webdriver/elements/form'
70
+ require 'watir-webdriver/elements/frame'
71
+ require 'watir-webdriver/elements/hidden'
68
72
  require 'watir-webdriver/elements/image'
73
+ require 'watir-webdriver/elements/input'
69
74
  require 'watir-webdriver/elements/link'
70
- require 'watir-webdriver/elements/font'
75
+ require 'watir-webdriver/elements/option'
71
76
  require 'watir-webdriver/elements/radio'
72
- require 'watir-webdriver/elements/text_field'
73
- require 'watir-webdriver/elements/hidden'
74
77
  require 'watir-webdriver/elements/select'
75
- require 'watir-webdriver/elements/form'
76
- require 'watir-webdriver/elements/option'
77
78
  require 'watir-webdriver/elements/table'
78
- require 'watir-webdriver/elements/table_row'
79
79
  require 'watir-webdriver/elements/table_cell'
80
+ require 'watir-webdriver/elements/table_row'
80
81
  require 'watir-webdriver/elements/table_section'
82
+ require 'watir-webdriver/elements/text_area'
83
+ require 'watir-webdriver/elements/text_field'
84
+
85
+ require 'watir-webdriver/aliases'
81
86
 
82
87
  Watir.tag_to_class.freeze
@@ -0,0 +1,6 @@
1
+ module Watir
2
+ module Container
3
+ alias_method :field_set, :fieldset
4
+ alias_method :field_sets, :fieldsets
5
+ end
6
+ end
@@ -70,35 +70,128 @@ module Watir
70
70
  @element.tag_name.downcase
71
71
  end
72
72
 
73
- def click
73
+ #
74
+ # Clicks the element, optionally while pressing the given mofifier keys.
75
+ # Note that support for holding a modifier key is currently experimental,
76
+ # and may not work at all.
77
+ #
78
+ # @example Click an element
79
+ #
80
+ # element.click
81
+ #
82
+ # @example Click an element with shift key pressed
83
+ #
84
+ # element.click(:shift)
85
+ #
86
+ # @example Click an element with several modifier keys pressed
87
+ #
88
+ # element.click(:shift, :control)
89
+ #
90
+ # @param [:shift, :alt, :control, :command, :meta] Modifier key(s) to press while clicking.
91
+ #
92
+
93
+ def click(*modifiers)
74
94
  assert_exists
75
95
  assert_enabled
76
- @element.click
96
+
97
+ if modifiers.any?
98
+ assert_has_input_devices_for "click(#{modifiers.join ', '})"
99
+
100
+ action = driver.action
101
+ modifiers.each { |mod| action.key_down mod }
102
+ action.click @element
103
+ modifiers.each { |mod| action.key_up mod }
104
+
105
+ action.perform
106
+ else
107
+ @element.click
108
+ end
109
+
77
110
  run_checkers
78
111
  end
79
112
 
113
+ #
114
+ # Double clicks the element.
115
+ #
116
+ # Note that browser support may vary.
117
+ #
118
+
119
+
80
120
  def double_click
81
121
  assert_exists
82
-
83
- unless driver.kind_of? WebDriver::DriverExtensions::HasInputDevices
84
- raise NotImplementedError, "Element#double_click is not supported by this driver"
85
- end
122
+ assert_has_input_devices_for :double_click
86
123
 
87
124
  driver.action.double_click(@element).perform
88
125
  run_checkers
89
126
  end
90
127
 
128
+ #
129
+ # Right clicks the element.
130
+ #
131
+ # Note that browser support may vary.
132
+ #
133
+
91
134
  def right_click
92
135
  assert_exists
93
-
94
- unless driver.kind_of? WebDriver::DriverExtensions::HasInputDevices
95
- raise NotImplementedError, "Element#context_click is not supported by this driver"
96
- end
136
+ assert_has_input_devices_for :right_click
97
137
 
98
138
  driver.action.context_click(@element).perform
99
139
  run_checkers
100
140
  end
101
141
 
142
+ #
143
+ # Moves the mouse to the middle of this element.
144
+ #
145
+ # Note that browser/platform support may vary.
146
+ #
147
+
148
+ def hover
149
+ assert_exists
150
+ assert_has_input_devices_for :hover
151
+
152
+ driver.action.move_to(@element).perform
153
+ end
154
+
155
+ #
156
+ # Drag and drop this element on to another element instance.
157
+ #
158
+ # Example:
159
+ #
160
+ # a = browser.div(:id => "draggable")
161
+ # b = browser.div(:id => "droppable")
162
+ #
163
+ # a.drag_and_drop_on b
164
+ #
165
+
166
+ def drag_and_drop_on(other)
167
+ assert_is_element other
168
+ assert_exists
169
+ assert_has_input_devices_for :drag_and_drop_on
170
+
171
+ driver.action.
172
+ drag_and_drop(@element, other.wd).
173
+ perform
174
+ end
175
+
176
+ #
177
+ # Drag and drop this element by the given offsets.
178
+ #
179
+ # Example:
180
+ #
181
+ # a = browser.div(:id => "draggable")
182
+ #
183
+ # a.drag_and_drop_by 100, -200
184
+ #
185
+
186
+ def drag_and_drop_by(right_by, down_by)
187
+ assert_exists
188
+ assert_has_input_devices_for :drag_and_drop_by
189
+
190
+ driver.action.
191
+ drag_and_drop_by(@element, right_by, down_by).
192
+ perform
193
+ end
194
+
102
195
  def flash
103
196
  original_color = style("backgroundColor")
104
197
 
@@ -144,6 +237,11 @@ module Watir
144
237
  driver.execute_script "return arguments[0].focus()", @element
145
238
  end
146
239
 
240
+ def focused?
241
+ assert_exists
242
+ @element == driver.switch_to.active_element
243
+ end
244
+
147
245
  def fire_event(event_name)
148
246
  assert_exists
149
247
  event_name = event_name.to_s.sub(/^on/, '').downcase
@@ -309,6 +407,18 @@ module Watir
309
407
  raise ObjectReadOnlyException if respond_to?(:readonly?) && readonly?
310
408
  end
311
409
 
410
+ def assert_has_input_devices_for(name)
411
+ unless driver.kind_of? WebDriver::DriverExtensions::HasInputDevices
412
+ raise NotImplementedError, "#{self.class}##{name} is not supported by this driver"
413
+ end
414
+ end
415
+
416
+ def assert_is_element(obj)
417
+ unless obj.kind_of? Watir::Element
418
+ raise TypeError, "execpted Watir::Element, got #{obj.inspect}:#{obj.class}"
419
+ end
420
+ end
421
+
312
422
  def method_missing(meth, *args, &blk)
313
423
  method = meth.to_s
314
424
  if method =~ /^data_(.+)$/
@@ -49,18 +49,6 @@ module Watir
49
49
 
50
50
 
51
51
 
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
52
 
65
53
 
66
54
 
@@ -538,6 +526,14 @@ module Watir
538
526
  Span
539
527
  end
540
528
  end
529
+ class Time < HTMLElement
530
+ attributes(:string => [:datetime])
531
+ end
532
+ class TimeCollection < ElementCollection
533
+ def element_class
534
+ Time
535
+ end
536
+ end
541
537
  class Data < HTMLElement
542
538
  attributes(:string => [:value])
543
539
  end
@@ -1422,6 +1418,23 @@ module Watir
1422
1418
 
1423
1419
  Watir.tag_to_class[:form] = Form
1424
1420
  #
1421
+ # @return [FrameSet]
1422
+ #
1423
+
1424
+ def frameset(*args)
1425
+ FrameSet.new(self, extract_selector(args).merge(:tag_name => "frameset"))
1426
+ end
1427
+
1428
+ #
1429
+ # @return [FrameSetCollection]
1430
+ #
1431
+
1432
+ def framesets(*args)
1433
+ FrameSetCollection.new(self, extract_selector(args).merge(:tag_name => "frameset"))
1434
+ end
1435
+
1436
+ Watir.tag_to_class[:frameset] = FrameSet
1437
+ #
1425
1438
  # @return [Heading]
1426
1439
  #
1427
1440
 
@@ -2459,6 +2472,23 @@ module Watir
2459
2472
 
2460
2473
  Watir.tag_to_class[:thead] = TableSection
2461
2474
  #
2475
+ # @return [Time]
2476
+ #
2477
+
2478
+ def time(*args)
2479
+ Time.new(self, extract_selector(args).merge(:tag_name => "time"))
2480
+ end
2481
+
2482
+ #
2483
+ # @return [TimeCollection]
2484
+ #
2485
+
2486
+ def times(*args)
2487
+ TimeCollection.new(self, extract_selector(args).merge(:tag_name => "time"))
2488
+ end
2489
+
2490
+ Watir.tag_to_class[:time] = Time
2491
+ #
2462
2492
  # @return [Title]
2463
2493
  #
2464
2494
 
@@ -2,7 +2,14 @@
2
2
  module Watir
3
3
  class Image < HTMLElement
4
4
 
5
- alias_method :loaded?, :complete?
5
+ def loaded?
6
+ return false unless complete?
7
+
8
+ driver.execute_script(
9
+ 'return typeof arguments[0].naturalWidth != "undefined" && arguments[0].naturalWidth > 0',
10
+ @element
11
+ )
12
+ end
6
13
 
7
14
  #
8
15
  # returns the image's width in pixels
@@ -25,6 +25,10 @@ module Watir
25
25
  @element.click
26
26
  end
27
27
 
28
+ def clear
29
+ @element.click if selected?
30
+ end
31
+
28
32
  #
29
33
  # Is this option selected?
30
34
  #
@@ -111,12 +111,12 @@ module Watir
111
111
 
112
112
 
113
113
  #
114
- # @return [Array<String>] An array of strings representing the text value of the currently selected options.
114
+ # @return [Array<Watir::Option>] An array of Watir::Option elements that are currently selected.
115
115
  #
116
116
 
117
117
  def selected_options
118
118
  assert_exists
119
- options.map { |e| e.text if e.selected? }.compact
119
+ options.select { |e| e.selected? }
120
120
  end
121
121
 
122
122
  private