operawatir 0.4.3.pre1-jruby → 0.5-jruby

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 (98) hide show
  1. data/.gitmodules +1 -1
  2. data/CHANGES +230 -0
  3. data/Gemfile +4 -0
  4. data/Rakefile +3 -2
  5. data/VERSION +1 -1
  6. data/bin/desktopwatir +1 -1
  7. data/bin/operawatir +16 -4
  8. data/lib/operadriver/guava-r09.jar +0 -0
  9. data/lib/operadriver/operadriver-v0.7.2.jar +0 -0
  10. data/lib/operadriver/selenium-nodeps-20100909.jar +0 -0
  11. data/lib/operawatir.rb +10 -3
  12. data/lib/operawatir/actions.rb +111 -0
  13. data/lib/operawatir/browser.rb +24 -20
  14. data/lib/operawatir/clickable_item.rb +68 -0
  15. data/lib/operawatir/compat.rb +4 -4
  16. data/lib/operawatir/compat/collection.rb +1 -1
  17. data/lib/operawatir/compat/element.rb +1 -1
  18. data/lib/operawatir/compat/window.rb +4 -3
  19. data/lib/operawatir/desktop_browser.rb +299 -95
  20. data/lib/operawatir/desktop_common.rb +88 -23
  21. data/lib/operawatir/desktop_container.rb +103 -34
  22. data/lib/operawatir/desktop_enums.rb +4 -4
  23. data/lib/operawatir/desktop_exceptions.rb +2 -2
  24. data/lib/operawatir/desktop_helper.rb +31 -8
  25. data/lib/operawatir/element.rb +6 -2
  26. data/lib/operawatir/exceptions.rb +4 -4
  27. data/lib/operawatir/helper.rb +6 -6
  28. data/lib/operawatir/keys.rb +4 -4
  29. data/lib/operawatir/preferences.rb +126 -155
  30. data/lib/operawatir/quickwidgets.rb +3 -3
  31. data/lib/operawatir/quickwidgets/quick_addressfield.rb +12 -5
  32. data/lib/operawatir/quickwidgets/quick_button.rb +39 -53
  33. data/lib/operawatir/quickwidgets/quick_checkbox.rb +6 -6
  34. data/lib/operawatir/quickwidgets/quick_dialogtab.rb +5 -5
  35. data/lib/operawatir/quickwidgets/quick_dropdown.rb +28 -4
  36. data/lib/operawatir/quickwidgets/quick_dropdownitem.rb +46 -0
  37. data/lib/operawatir/quickwidgets/quick_editfield.rb +16 -13
  38. data/lib/operawatir/quickwidgets/quick_label.rb +1 -1
  39. data/lib/operawatir/quickwidgets/quick_menu.rb +155 -0
  40. data/lib/operawatir/quickwidgets/quick_menuitem.rb +387 -0
  41. data/lib/operawatir/quickwidgets/quick_searchfield.rb +7 -4
  42. data/lib/operawatir/quickwidgets/quick_tab.rb +23 -12
  43. data/lib/operawatir/quickwidgets/quick_thumbnail.rb +4 -4
  44. data/lib/operawatir/quickwidgets/quick_toolbar.rb +1 -1
  45. data/lib/operawatir/quickwidgets/quick_treeitem.rb +45 -29
  46. data/lib/operawatir/quickwidgets/quick_treeview.rb +2 -2
  47. data/lib/operawatir/quickwidgets/quick_widget.rb +267 -77
  48. data/lib/operawatir/quickwidgets/quick_window.rb +64 -38
  49. data/lib/operawatir/screenshot.rb +1 -1
  50. data/lib/operawatir/utils.rb +31 -0
  51. data/lib/operawatir/window.rb +1 -1
  52. data/operawatir.gemspec +38 -132
  53. data/spec/operawatir/core/actions_spec.rb +202 -0
  54. data/spec/operawatir/core/browser_spec.rb +8 -8
  55. data/spec/operawatir/core/element_spec.rb +11 -2
  56. data/spec/operawatir/core/keys_spec.rb +50 -2
  57. data/spec/operawatir/core/preferences_spec.rb +44 -128
  58. data/spec/operawatir/core/spatnav_spec.rb +16 -16
  59. data/spec/operawatir/core/utils_spec.rb +47 -0
  60. data/spec/operawatir/core/window_spec.rb +1 -1
  61. data/spec/operawatir/desktop/desktopbrowser_spec.rb +191 -22
  62. data/spec/operawatir/desktop/quickbutton_spec.rb +197 -164
  63. data/spec/operawatir/desktop/quickcheckbox_spec.rb +12 -12
  64. data/spec/operawatir/desktop/quickdialogtab_spec.rb +11 -11
  65. data/spec/operawatir/desktop/quickdropdown_spec.rb +25 -25
  66. data/spec/operawatir/desktop/quickeditfield_spec.rb +31 -31
  67. data/spec/operawatir/desktop/quickmenu_spec.rb +57 -0
  68. data/spec/operawatir/desktop/quickmenuitem_spec.rb +168 -0
  69. data/spec/operawatir/desktop/quicktab_spec.rb +26 -15
  70. data/spec/operawatir/desktop/quickthumbnail_spec.rb +18 -4
  71. data/spec/operawatir/desktop/quicktreeitem_spec.rb +72 -72
  72. data/spec/operawatir/desktop/quicktreeview_spec.rb +13 -13
  73. data/spec/operawatir/desktop/quickwidget_spec.rb +51 -13
  74. data/spec/operawatir/desktop/quickwindow_spec.rb +4 -0
  75. data/spec/operawatir/desktop/shared/shared.rb +25 -9
  76. data/spec/operawatir/fixtures/draggableLists.html +67 -0
  77. data/spec/operawatir/fixtures/formSelectionPage.html +46 -0
  78. data/spec/operawatir/fixtures/js/jquery-1.4.4.min.js +167 -0
  79. data/spec/operawatir/fixtures/js/jquery-ui-1.8.10.custom.min.js +782 -0
  80. data/spec/operawatir/fixtures/keys.html +40 -0
  81. data/spec/operawatir/fixtures/label_submit.html +5 -0
  82. data/spec/operawatir/fixtures/mouse.html +59 -0
  83. data/spec/operawatir/fixtures/simple.html +10 -0
  84. data/spec/operawatir/matchers.rb +20 -19
  85. data/spec/operawatir/watirspec_desktophelper.rb +51 -3
  86. data/spec/operawatir/watirspec_helper.rb +0 -2
  87. metadata +91 -220
  88. data/lib/operadriver/client-combined-nodeps.jar +0 -0
  89. data/lib/operadriver/webdriver-opera.jar +0 -0
  90. data/spec/watir3/browser_spec.rb +0 -190
  91. data/spec/watir3/clipboard_spec.rb +0 -64
  92. data/spec/watir3/collection_spec.rb +0 -387
  93. data/spec/watir3/element_spec.rb +0 -474
  94. data/spec/watir3/guards.rb +0 -39
  95. data/spec/watir3/keys_spec.rb +0 -204
  96. data/spec/watir3/server.rb +0 -91
  97. data/spec/watir3/watirspec_helper.rb +0 -62
  98. data/spec/watir3/window_spec.rb +0 -295
@@ -1,39 +0,0 @@
1
- module WatirSpec
2
- class Guard
3
-
4
- attr_accessor :type, :browsers, :data
5
-
6
- def initialize(type, browsers, data={})
7
- self.type, self.browsers, self.data = type, browsers, data
8
- WatirSpec.guards << self
9
- end
10
-
11
- def guarded?(browser)
12
- WatirSpec.guarded? || browsers.include?(browser.name)
13
- end
14
-
15
- module Helpers
16
- def deviates_on(*browsers)
17
- guard = WatirSpec::Guard.new :deviation, browsers, :file => caller.first
18
- yield unless guard.guarded?(OperaWatir::Helper.browser)
19
- end
20
-
21
- def not_compliant_on(*browsers)
22
- guard = WatirSpec::Guard.new :non_compliance, browsers, :file => caller.first
23
- yield unless guard.guarded?(OperaWatir::Helper.browser)
24
- end
25
-
26
- def compliant_on(*browsers)
27
- guard = WatirSpec::Guard.new :compliance, browsers, :file => caller.first
28
- yield unless guard.guarded?(OperaWatir::Helper.browser)
29
- end
30
-
31
- def bug(url, *browsers)
32
- guard = WatirSpec::Guard.new :bug, browsers, :file => caller.first, :url => url
33
- yield unless guard.guarded?(OperaWatir::Helper.browser)
34
- end
35
- end
36
-
37
- end
38
- end
39
-
@@ -1,204 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require File.expand_path('../watirspec_helper', __FILE__)
3
-
4
- # keyboard input
5
- # ---------------
6
- describe 'Keys' do
7
- after :each do
8
- browser.keys.release
9
- end
10
-
11
- describe '#send' do
12
- before :each do
13
- browser.url = fixture('two_input_fields.html')
14
- @one = window.find_by_name('one')
15
- @two = window.find_by_name('two')
16
- @one.click
17
- end
18
-
19
- it 'types a single character' do
20
- browser.keys.send 'A'
21
- @one.value.should == 'A'
22
- end
23
-
24
- it 'types a mixed-case string' do
25
- browser.keys.send 'ABC abc'
26
- @one.value.should == 'ABC abc'
27
- end
28
-
29
- it 'types a string containing multi-byte characters' do
30
- browser.keys.send 'ルビー 水'
31
- @one.value.should == 'ルビー 水'
32
- end
33
-
34
- it 'types many single characters in sequence' do
35
- browser.keys.send 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
36
- 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
37
- 'W', 'X', 'Y', 'Z'
38
- @one.value.should == 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
39
- end
40
-
41
- it 'moves the caret using arrow keys' do
42
- browser.keys.send 'AC', :left, 'B'
43
- @one.value.should == 'ABC'
44
- end
45
-
46
- it 'switches to a different input element with tab' do
47
- browser.keys.send 'AB', :tab, 'C'
48
- @one.value.should == 'AB'
49
- @two.value.should == 'C'
50
- end
51
-
52
- it 'uses modifier keys' do
53
- browser.keys.send [:shift, 'a'], 'bc'
54
- @one.value.should == 'Abc'
55
- end
56
-
57
- it 'uses multiple modifier keys to manipulate selection' do
58
- browser.keys.send 'ABC 123'
59
-
60
- # Selection using keys works differently on OS X
61
- if Config::CONFIG['host_os'] =~ /darwin|mac os/
62
- browser.keys.send [:shift, :alt, :left], :backspace
63
- else
64
- browser.keys.send [:shift, :control, :left], :backspace
65
- end
66
-
67
- @one.value.should == 'ABC '
68
- end
69
-
70
- it 'presses an invalid key' do
71
- browser.keys.send(:hoobaflooba).should raise_error InvalidKeyException
72
- end
73
- end
74
-
75
- describe '#down' do
76
- it 'types a mixed-case string by holding shift' do
77
- browser.url = fixture('two_input_fields.html')
78
- window.find_by_name('one').click
79
- browser.keys.send 'a'
80
- browser.keys.down :shift
81
- browser.keys.send 'b'
82
- window.find_by_name('one').value.should == 'aB'
83
- browser.keys.up :shift
84
- end
85
-
86
- it 'holds down a non-modifier key for one second' do
87
- browser.url = fixture('two_input_fields.html')
88
- window.find_by_name('one').click
89
- browser.keys.down 'a'
90
- sleep 1
91
- browser.keys.up 'a'
92
- window.find_by_name('one').value.should include 'aa' # Two or more characters are expected.
93
- end
94
-
95
- it 'triggers onkeydown' do
96
- browser.url = fixture('keys.html')
97
- browser.keys.down :shift
98
- window.find_by_id('log').text.should include 'down, 16'
99
- browser.keys.up :shift
100
- end
101
-
102
- it 'does not trigger onkeyup' do
103
- browser.url = fixture('keys.html')
104
- browser.keys.down :shift
105
- window.find_by_id('log').text.should_not include 'up, 16'
106
- browser.keys.up :shift
107
- end
108
-
109
- it 'presses two buttons at the same time' do
110
- browser.url = fixture('keys.html')
111
- browser.keys.down :shift, :control
112
- window.find_by_id('log').text.should include 'down, 16'
113
- window.find_by_id('log').text.should include 'down, 17'
114
- browser.keys.up :shift
115
- browser.keys.up :control
116
- end
117
-
118
- it 'presses an invalid key' do
119
- browser.keys.down(:hoobaflooba).should raise_error InvalidKeyException
120
- end
121
-
122
- it 'passes an array instead of a string' do
123
- browser.keys.down([:shift, :control]).should raise_error NativeException
124
- end
125
- end
126
-
127
- describe '#up' do
128
- it 'types a mixed-case string by holding shift' do
129
- browser.url = fixture('two_input_fields.html')
130
- window.find_by_name('one').click
131
- browser.keys.down :shift
132
- browser.keys.send 'a'
133
- browser.keys.send 'b' # Testing that we do not release prematurely
134
- browser.keys.up :shift
135
- browser.keys.send 'c'
136
- window.find_by_name('one').value.should == 'ABc'
137
- end
138
-
139
- it 'holds down a non-modifier key for one second (but no longer)' do
140
- browser.url = fixture('two_input_fields.html')
141
- window.find_by_name('one').click
142
- browser.keys.down 'a'
143
- sleep 1
144
- browser.keys.up 'a'
145
- result_string = window.find_by_name('one').value
146
- sleep 1
147
- window.find_by_name('one').value.should == result_string
148
- result_string = nil
149
- end
150
-
151
- it 'triggers onkeyup' do
152
- browser.url = fixture('keys.html')
153
- browser.keys.down :shift
154
- browser.keys.up :shift
155
- window.find_by_id('log').text.should include 'up, 16'
156
- end
157
-
158
- it 'presses two buttons, but releases only one' do
159
- browser.url = fixture('keys.html')
160
- browser.keys.down :shift, :control
161
- browser.keys.up :shift
162
- window.find_by_id('log').text.should include 'up, 16'
163
- window.find_by_id('log').text.should_not include 'up, 17'
164
- browser.keys.up :control
165
- end
166
-
167
- it 'releases two buttons' do
168
- browser.url = fixture('keys.html')
169
- browser.keys.down :shift, :control
170
- browser.keys.up :shift, :control
171
- window.find_by_id('log').text.should include 'up, 16'
172
- window.find_by_id('log').text.should include 'up, 17'
173
- end
174
-
175
- it 'presses an invalid key' do
176
- browser.keys.down(:hoobaflooba).should raise_error InvalidKeyException
177
- end
178
-
179
- it 'passes an array instead of a string' do
180
- browser.keys.up([:shift, :control]).should raise_error NativeException
181
- end
182
- end
183
-
184
- describe '#release' do
185
- it 'releases one button' do
186
- browser.url = fixture('two_input_fields.html')
187
- window.find_by_name('one').click
188
- browser.keys.down :shift
189
- browser.keys.send 'a'
190
- browser.keys.release
191
- browser.keys.send 'b'
192
- window.find_by_name('one').value.should == 'Ab'
193
- end
194
-
195
- it 'releases two buttons' do
196
- browser.url = fixture('keys.html')
197
- browser.keys.down :shift, :control
198
- browser.keys.release
199
- window.find_by_id('log').text.should include 'up, 16'
200
- window.find_by_id('log').text.should include 'up, 17'
201
- end
202
- end
203
-
204
- end
@@ -1,91 +0,0 @@
1
- # encoding: utf-8
2
- require 'sinatra/base'
3
-
4
- class WatirSpec::Server < ::Sinatra::Base
5
-
6
- set :app_file, __FILE__
7
- set :root, File.dirname(__FILE__)
8
- set :public, lambda { File.join(root, 'fixtures')}
9
- set :static, true
10
- set :run, false
11
- set :environment, :production
12
- set :bind, 'localhost'
13
- set :port, 2000
14
- set :server, %w[thin mongrel webrick]
15
-
16
- get '/' do
17
- self.class.name
18
- end
19
-
20
- get '/big' do
21
- Class.new do
22
- def each(&blk)
23
- yield "<html><head><title>Big Content</title></head><body>"
24
- string = "hello "*205
25
- 300.times { yield string }
26
- yield "</body></html>"
27
- end
28
- end.new
29
- end
30
-
31
- post '/post_to_me' do
32
- "You posted the following content:\n#{ env['rack.input'].read }"
33
- end
34
-
35
- get '/plain_text' do
36
- content_type 'text/plain'
37
- 'This is text/plain'
38
- end
39
-
40
- get '/ajax' do
41
- sleep 10
42
- "A slooow ajax response"
43
- end
44
-
45
- get '/charset_mismatch' do
46
- content_type 'text/html; charset=UTF-8'
47
- %{
48
- <html>
49
- <head>
50
- <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
51
- </head>
52
- <body>
53
- <h1>ø</h1>
54
- </body>
55
- </html>
56
- }
57
- end
58
-
59
- get '/octet_stream' do
60
- content_type 'application/octet-stream'
61
- 'This is application/octet-stream'
62
- end
63
-
64
- get '/set_cookie' do
65
- content_type 'text/plain'
66
- headers 'Set-Cookie' => "monster=/"
67
-
68
- "C is for cookie, it's good enough for me"
69
- end
70
-
71
- get '/header_echo' do
72
- content_type 'text/plain'
73
- env.inspect
74
- end
75
-
76
- get '/authentication' do
77
- auth = Rack::Auth::Basic::Request.new(env)
78
-
79
- unless auth.provided? && auth.credentials == %w[foo bar]
80
- headers 'WWW-Authenticate' => %(Basic realm="localhost")
81
- halt 401, 'Authorization Required'
82
- end
83
-
84
- "ok"
85
- end
86
-
87
- get '/encodable_<stuff>' do
88
- 'page with characters in URI that need encoding'
89
- end
90
-
91
- end
@@ -1,62 +0,0 @@
1
- # encoding: utf-8
2
- $LOAD_PATH.unshift File.dirname(__FILE__)
3
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
- require 'rspec'
5
-
6
- require 'guards'
7
- require 'server'
8
-
9
- require 'operawatir/helper'
10
-
11
- OperaWatir.api = 2
12
-
13
- RSpec.configure do |config|
14
- config.mock_with :rr
15
- end
16
-
17
- module WatirSpec
18
- extend self
19
-
20
- attr_accessor :args, :guarded
21
-
22
- def host
23
- "http://#{Server.bind}:#{Server.port}"
24
- end
25
- alias_method :files, :host
26
-
27
- def guards
28
- @guards ||= []
29
- end
30
-
31
- def guarded?
32
- !!@guarded
33
- end
34
-
35
- module Helpers
36
- def browser
37
- OperaWatir::Helper.browser
38
- end
39
-
40
- def window
41
- browser.active_window
42
- end
43
-
44
- def fixture(*paths)
45
- [WatirSpec.host, *paths].join('/')
46
- end
47
- end
48
-
49
- end
50
-
51
- include OperaWatir::Exceptions
52
-
53
- include WatirSpec::Guard::Helpers
54
-
55
- RSpec.configure do |config|
56
- config.include WatirSpec::Helpers
57
-
58
- config.before(:suite) do
59
- Thread.new { WatirSpec::Server.run! }
60
- end
61
- end
62
-
@@ -1,295 +0,0 @@
1
- # encoding: utf-8
2
- require File.expand_path('../watirspec_helper', __FILE__)
3
-
4
- describe 'Window' do
5
-
6
- before :each do
7
- browser.url = fixture('non_control_elements.html')
8
- end
9
-
10
- # element access
11
- # --------------
12
-
13
- describe '#find_by_id' do
14
- it 'returns an element with the given ID' do
15
- elements = window.find_by_id('header')
16
-
17
- elements.should_not be_empty
18
- elements.length.should == 1
19
- elements.first.attr(:id).should == 'header'
20
- end
21
-
22
- it 'finds multiple elements with the same id' do
23
- elements = window.find_by_id('lead')
24
- elements.length.should == 4
25
- end
26
- end
27
-
28
- describe '#find_by_tag' do
29
- it 'is not empty if the tag exists' do
30
- window.find_by_tag(:div).should_not be_empty
31
- end
32
-
33
- it 'returns a collection of elements of the given tag' do
34
- uls = window.find_by_tag(:ul)
35
- uls.length.should == 2
36
- uls.find_by_tag(:li).all? do |element|
37
- element.parent.tag_name.match(/ul/i)
38
- end
39
- end
40
-
41
- # TODO I'm not convinced that we should be able to filter in finders
42
- it 'contains only elements restricted by the selector' do
43
- window.find_by_tag(:div, :title => 'Lorem ipsum').all? do |element|
44
- element.attr(:title) == 'Lorem ipsum' && element.tag_name.match(/div/i)
45
- end.should be_true
46
- end
47
-
48
- it 'empty if the elements do not exist' do
49
- window.find_by_tag(:hoobaflooba).should be_empty
50
- end
51
-
52
- end
53
-
54
- # css
55
- # we don't want a complete CSS selector test suite here, so just some common
56
- # selectors
57
- describe '#find_by_css' do
58
- it 'is not empty if an element matches the css selector' do
59
- window.find_by_css('#outer_container > div').should_not be_empty
60
- end
61
-
62
- it 'contains all elements selected by the selector' do
63
- window.find_by_css('#outer_container > div').all? do |element|
64
- element.parent.attr(:id).should == 'outer_container'
65
- end.should be_true
66
- end
67
-
68
- it 'is empty if the selector does not match' do
69
- window.find_by_css('#hoobaflooba').should be_empty
70
- end
71
- end
72
-
73
- # class
74
- describe '#find_by_class' do
75
- it 'is not empty if an element matches the class' do
76
- window.find_by_class('lead').should_not be_empty
77
- end
78
-
79
- it 'returns a collection of elements with the given class' do
80
- window.find_by_class('lead').attrs(:class).should == ['lead','lead','lead','lead']
81
- end
82
-
83
- it 'finds elements with multiple classes' do
84
- window.find_by_class('one').all? do |element|
85
- element.attr(:class).should match /one/
86
- end.should be_true
87
- end
88
-
89
- it 'is empty if the class does not match' do
90
- window.find_by_class('hoobaflooba').should be_empty
91
- end
92
- end
93
-
94
- # xpath
95
- describe '#find_by_xpath' do
96
- before :all do
97
- @headers = window.find_by_xpath('//h1')
98
- end
99
-
100
- it 'is not empty if elements matches the class' do
101
- @headers.should_not be_empty
102
- end
103
-
104
- it 'contains all elements with the given query' do
105
- @headers.all? do |element|
106
- element.tag_name.should match /h1/i
107
- end
108
- end
109
-
110
- it 'is empty if the query does not match' do
111
- window.find_by_xpath('//hoobaflooba').should be_empty
112
- end
113
- end
114
-
115
- # properties
116
- # ----------
117
-
118
- describe '#title' do
119
- it 'is the title of the window' do
120
- window.title.should == 'Non-control elements'
121
- end
122
-
123
- it 'changes when the title tag changes' do
124
- window.execute_script('document.title = "changed"')
125
- window.title.should == 'changed'
126
- end
127
- end
128
-
129
- describe '#html' do
130
- it 'is the source of the page' do
131
- window.html.should match /<title>Non-control elements<\/title>/i
132
- end
133
-
134
- # TODO I'm not sure Watir allows DOM manipulation
135
- it 'is the original source' do
136
- # window.find_by_tag(:title).first.text = 'changed'
137
- window.html.should match /<title>Non-control elements<\/title>/i
138
- end
139
- end
140
-
141
- # page management
142
- # ---------------
143
-
144
- describe '#url' do
145
- it 'is the url of this window' do
146
- window.url.should == fixture('non_control_elements.html')
147
- end
148
- end
149
-
150
- describe '#url=' do
151
- it 'navigates to the given url' do
152
- window.url = fixture('forms_with_input_elements.html')
153
- window.find_by_tag(:title).first.text.should == 'Forms with input elements'
154
- end
155
- end
156
-
157
- describe '#back' do
158
- # should it raise an exception if it fails instead?
159
- it 'is possible to go back' do
160
- window.url = fixture('forms_with_input_elements.html')
161
- window.back.should be_true
162
- end
163
-
164
- it 'is false if there is no page to go back to' do
165
- # FIXME: We need to open a new window first
166
- window.back.should be_false
167
- end
168
-
169
- it 'goes back one page in history' do
170
- window.url = fixture('forms_with_input_elements.html')
171
- window.back
172
- window.url.should == fixture('non_control_elements.html')
173
- end
174
- end
175
-
176
- describe '#forward' do
177
- it 'is possible to go forward' do
178
- window.url = fixture('forms_with_input_elements.html')
179
- window.back
180
- window.forward.should be_true
181
- end
182
-
183
- it 'there is no page to go forward to' do
184
- window.forward.should be_false
185
- end
186
-
187
- it 'goes forward one page in history' do
188
- window.url = fixture('forms_with_input_elements.html')
189
- window.back
190
- window.forward
191
- window.url.should == fixture('forms_with_input_elements.html')
192
- end
193
- end
194
-
195
- describe '#refresh' do
196
- it 'refreshes the current page' do
197
- window.url = fixture('forms_with_input_elements.html')
198
- field = window.find_by_id('new_user_first_name').first
199
- field.value = 'foobar'
200
- field.value.should == 'foobar'
201
-
202
- window.refresh
203
- field.value.should be_empty
204
- end
205
- end
206
-
207
- # actions
208
- # -------
209
-
210
- # click(x,y)
211
-
212
- describe '#execute_script' do
213
- it 'executes Javascript in the page' do
214
- window.execute_script('document.title = "test"')
215
- window.title.should == 'test'
216
- end
217
-
218
- it 'returns an element when the Javascript does' do
219
- window.execute_script('document.createElement("div")').tag_name.should match /div/i
220
- end
221
-
222
- it 'returns a number when the Javascript does' do
223
- window.execute_script('Math.abs(-5)').should == 5
224
- end
225
-
226
- it 'returns a boolean when the Javascript does' do
227
- window.execute_script('(function(){return true;})()').should be_true
228
- end
229
-
230
- it 'returns an array when the Javascript does' do
231
- result = window.execute_script('["this", "is", "a", "test"]') # WTR-227
232
- result.length.should == 4
233
- result[3].should == 'test'
234
- end
235
-
236
- it 'returns a string when the result is not one of these types' do
237
- window.execute_script('({one:"two"}).toString()').should == '[object Object]'
238
- end
239
- end
240
-
241
- # window management
242
- # -----------------
243
-
244
- describe '#maximize' do
245
- before :each do
246
- # Make sure we aren't already maximized
247
- window.restore
248
- end
249
-
250
- it 'maximizes the window' do
251
- body = window.find_by_tag(:body).first
252
- width = body.width
253
- window.maximize
254
- body.width.should be > width
255
- end
256
- end
257
-
258
- describe '#restore' do
259
- it 'restores (unmaximizes) the window' do
260
- body = window.find_by_tag(:body).first
261
- # Make sure we aren't already restored
262
- window.maximize
263
- width = body.width
264
- window.restore
265
- body.width.should be < width
266
- end
267
- end
268
-
269
- describe '#exists?' do
270
- it 'is true if the window exists' do
271
- window.exists?.should be_true
272
- end
273
-
274
- it 'is false if the window does not exist' do
275
- window.close
276
- window.exists?.should be_false
277
- end
278
- end
279
-
280
- describe '#close' do
281
- it 'destroys the window' do
282
- window.close
283
- window.exists?.should be_false
284
- window.find_by_tag(:title).should raise_error
285
- end
286
- end
287
-
288
- describe '#new' do
289
- it 'creates a new window' do
290
- new_window = browser.url(fixture('non_control_elements.html'))
291
- new_window.exists?.should be_true
292
- new_window.url.should == fixture('non_control_elements.html')
293
- end
294
- end
295
- end