watir-webdriver 0.6.11 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +14 -12
  3. data/CHANGES.md +17 -0
  4. data/LICENSE +1 -1
  5. data/README.md +8 -1
  6. data/Rakefile +7 -2
  7. data/lib/watir-webdriver/alert.rb +5 -1
  8. data/lib/watir-webdriver/attribute_helper.rb +4 -8
  9. data/lib/watir-webdriver/browser.rb +41 -21
  10. data/lib/watir-webdriver/element_collection.rb +1 -2
  11. data/lib/watir-webdriver/elements/button.rb +3 -5
  12. data/lib/watir-webdriver/elements/checkbox.rb +2 -11
  13. data/lib/watir-webdriver/elements/element.rb +93 -86
  14. data/lib/watir-webdriver/elements/file_field.rb +1 -2
  15. data/lib/watir-webdriver/elements/form.rb +2 -1
  16. data/lib/watir-webdriver/elements/generated.rb +24 -11
  17. data/lib/watir-webdriver/elements/iframe.rb +25 -17
  18. data/lib/watir-webdriver/elements/option.rb +6 -14
  19. data/lib/watir-webdriver/elements/radio.rb +2 -5
  20. data/lib/watir-webdriver/elements/select.rb +15 -7
  21. data/lib/watir-webdriver/exception.rb +0 -2
  22. data/lib/watir-webdriver/extensions/alerts.rb +0 -14
  23. data/lib/watir-webdriver/has_window.rb +2 -4
  24. data/lib/watir-webdriver/html/spec_extractor.rb +3 -2
  25. data/lib/watir-webdriver/html/visitor.rb +2 -2
  26. data/lib/watir-webdriver/locators/element_locator.rb +22 -21
  27. data/lib/watir-webdriver/locators/text_field_locator.rb +11 -3
  28. data/lib/watir-webdriver/user_editable.rb +5 -10
  29. data/lib/watir-webdriver/version.rb +1 -1
  30. data/lib/watir-webdriver/wait.rb +26 -26
  31. data/lib/watir-webdriver/window.rb +30 -25
  32. data/spec/always_locate_spec.rb +42 -0
  33. data/spec/browser_spec.rb +1 -1
  34. data/spec/element_locator_spec.rb +13 -1
  35. data/spec/element_spec.rb +43 -8
  36. data/spec/input_spec.rb +0 -31
  37. data/spec/spec_helper.rb +0 -1
  38. data/support/doctest_helper.rb +72 -0
  39. data/support/travis.sh +4 -0
  40. data/watir-webdriver.gemspec +2 -1
  41. metadata +50 -35
  42. data/spec/html/inner_outer.html +0 -5
@@ -18,13 +18,26 @@ describe Watir::Element do
18
18
  it 'returns false if the element does not exist' do
19
19
  expect(browser.div(:id, 'should-not-exist')).to_not be_present
20
20
  end
21
+
22
+ it "returns false if the element is stale" do
23
+ wd_element = browser.div(:id => "foo").wd
24
+
25
+ # simulate element going stale during lookup
26
+ allow(browser.driver).to receive(:find_element).with(:id, 'foo') { wd_element }
27
+ browser.refresh
28
+
29
+ expect(browser.div(:id, 'foo')).to_not be_present
30
+ end
31
+
21
32
  end
22
33
 
23
34
  describe "#reset!" do
24
35
  it "successfully relocates collection elements after a reset!" do
25
- element = browser.divs(:id, 'foo').to_a.first
26
- expect(element).to_not be_nil
27
-
36
+ browser.goto(WatirSpec.url_for("wait.html", :needs_server => true))
37
+ element = browser.div(:id, 'foo')
38
+ expect(element).to exist
39
+ browser.refresh
40
+ expect(element.exist?).to be false unless Watir.always_locate?
28
41
  element.send :reset!
29
42
  expect(element).to exist
30
43
  end
@@ -35,8 +48,8 @@ describe Watir::Element do
35
48
  browser.goto WatirSpec.url_for('removed_element.html', :needs_server => true)
36
49
  end
37
50
 
38
- it "should not propagate ObsoleteElementErrors" do
39
- button = browser.button(:id => "remove-button")
51
+ it "does not propagate StaleElementReferenceErrors" do
52
+ button = browser.button(:id => "remove-button")
40
53
  element = browser.div(:id => "text")
41
54
 
42
55
  expect(element).to exist
@@ -44,16 +57,16 @@ describe Watir::Element do
44
57
  expect(element).to_not exist
45
58
  end
46
59
 
47
- it "should determine if element constructed with WebDriver element is stale" do
60
+ it "returns false when an element from a collection becomes stale" do
48
61
  button = browser.button(:id => "remove-button")
49
- text = browser.element(:element, browser.div(:id => "text").wd)
62
+ text = browser.divs(:id => "text").first
50
63
 
51
64
  expect(text).to exist
52
65
  button.click
53
66
  expect(text).to_not exist
54
67
  end
55
68
 
56
- it "should handle element that becomes stale during lookup" do
69
+ it "returns false when an element becomes stale" do
57
70
  wd_element = browser.div(:id => "text").wd
58
71
 
59
72
  # simulate element going stale during lookup
@@ -62,6 +75,28 @@ describe Watir::Element do
62
75
 
63
76
  expect(browser.div(:id, 'text')).to_not exist
64
77
  end
78
+ end
79
+
80
+ describe "#element_call" do
81
+
82
+ it 'handles exceptions when taking an action on an element that goes stale during execution' do
83
+ browser.goto WatirSpec.url_for('removed_element.html', :needs_server => true)
84
+
85
+ watir_element = browser.div(:id => "text")
86
+
87
+ # simulate element going stale after assert_exists and before action taken
88
+ allow(watir_element).to receive(:text) do
89
+ watir_element.send :assert_exists
90
+ browser.refresh
91
+ watir_element.send(:element_call) { watir_element.instance_variable_get('@element').text }
92
+ end
93
+
94
+ if Watir.always_locate?
95
+ expect { watir_element.text }.to_not raise_error
96
+ else
97
+ expect { watir_element.text }.to raise_error Selenium::WebDriver::Error::StaleElementReferenceError
98
+ end
99
+ end
65
100
 
66
101
  end
67
102
 
@@ -6,37 +6,6 @@ describe Watir::Input do
6
6
  browser.goto WatirSpec.url_for("forms_with_input_elements.html")
7
7
  end
8
8
 
9
- describe "#to_subtype" do
10
- it "returns a CheckBox instance" do
11
- e = browser.input(:xpath => "//input[@type='checkbox']").to_subtype
12
- expect(e).to be_kind_of(Watir::CheckBox)
13
- end
14
-
15
- it "returns a Radio instance" do
16
- e = browser.input(:xpath => "//input[@type='radio']").to_subtype
17
- expect(e).to be_kind_of(Watir::Radio)
18
- end
19
-
20
- it "returns a Button instance" do
21
- es = [
22
- browser.input(:xpath => "//input[@type='button']").to_subtype,
23
- browser.input(:xpath => "//input[@type='submit']").to_subtype
24
- ]
25
-
26
- es.all? { |e| expect(e).to be_kind_of(Watir::Button) }
27
- end
28
-
29
- it "returns a TextField instance" do
30
- e = browser.input(:xpath => "//input[@type='text']").to_subtype
31
- expect(e).to be_kind_of(Watir::TextField)
32
- end
33
-
34
- it "returns a TextField instance" do
35
- e = browser.input(:xpath => "//input[@type='file']").to_subtype
36
- expect(e).to be_kind_of(Watir::FileField)
37
- end
38
- end
39
-
40
9
  describe "#type" do
41
10
  it "returns an email type" do
42
11
  expect(browser.input(:name => "html5_email").type).to eq 'email'
@@ -11,7 +11,6 @@ require 'rubygems'
11
11
  require 'rspec'
12
12
 
13
13
  include Watir
14
- include Watir::Exception
15
14
 
16
15
  if ENV['ALWAYS_LOCATE'] == "false"
17
16
  Watir.always_locate = false
@@ -0,0 +1,72 @@
1
+ require 'watir-webdriver'
2
+ require 'spec/watirspec/lib/watirspec'
3
+
4
+ #
5
+ # 1. If example does not start browser, start new one, reuse until example
6
+ # finishes and close after
7
+ # 2. If example starts browser and assigns it to local variable `browser`,
8
+ # it will still be closed
9
+ #
10
+
11
+ def browser
12
+ @browser ||= Watir::Browser.start(WatirSpec.url_for('forms_with_input_elements.html'))
13
+ end
14
+
15
+ YARD::Doctest.configure do |doctest|
16
+ doctest.skip 'Watir::Browser.start'
17
+ doctest.skip 'Watir::Cookies'
18
+ doctest.skip 'Watir::Element#to_subtype'
19
+ doctest.skip 'Watir::Option'
20
+ doctest.skip 'Watir::Screenshot'
21
+ doctest.skip 'Watir::Window#size'
22
+ doctest.skip 'Watir::Window#position'
23
+
24
+ %w[text ok close exists?].each do |name|
25
+ doctest.before("Watir::Alert##{name}") do
26
+ browser.goto WatirSpec.url_for('alerts.html')
27
+ browser.button(:id => 'alert').click
28
+ end
29
+ end
30
+
31
+ doctest.before('Watir::Alert#set') do
32
+ browser.goto WatirSpec.url_for('alerts.html')
33
+ browser.button(:id => 'prompt').click
34
+ end
35
+
36
+ doctest.before('Watir::CheckBox#set') do
37
+ browser.goto WatirSpec.url_for('forms_with_input_elements.html')
38
+ checkbox = browser.checkbox(:id => 'new_user_interests_cars')
39
+ end
40
+
41
+ %w[Watir::Browser#execute_script Watir::Element#drag_and_drop].each do |name|
42
+ doctest.before(name) do
43
+ browser.goto WatirSpec.url_for('drag_and_drop.html')
44
+ end
45
+ end
46
+
47
+ doctest.before('Watir::Element#attribute_value') do
48
+ browser.goto WatirSpec.url_for('non_control_elements.html')
49
+ end
50
+
51
+ %w[inner_html outer_html].each do |name|
52
+ doctest.before("Watir::Element##{name}") do
53
+ browser.goto WatirSpec.url_for('inner_outer.html')
54
+ end
55
+ end
56
+
57
+ %w[Watir::HasWindow Watir::Window#== Watir::Window#use].each do |name|
58
+ doctest.before(name) do
59
+ browser.goto WatirSpec.url_for('window_switching.html')
60
+ browser.a(:id => 'open').click
61
+ end
62
+ end
63
+
64
+ doctest.after do
65
+ browser.quit
66
+ @browser = nil
67
+ end
68
+ end
69
+
70
+ if ENV['TRAVIS']
71
+ ENV['DISPLAY'] = ':99.0'
72
+ end
@@ -9,9 +9,13 @@ export CHROMEDRIVER_VERSION=2.9
9
9
  sh -e /etc/init.d/xvfb start
10
10
  git submodule update --init
11
11
 
12
+ mkdir ~/.yard
13
+ bundle exec yard config -a autoload_plugins yard-doctest
14
+
12
15
  if [[ "$WATIR_WEBDRIVER_BROWSER" = "chrome" ]]; then
13
16
  sudo chmod 1777 /dev/shm
14
17
 
18
+ sudo apt-get update
15
19
  sudo apt-get install -y unzip libxss1
16
20
 
17
21
  curl -L -O "http://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/${CHROME_REVISION}/chrome-linux.zip"
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
21
  s.require_paths = ["lib"]
22
22
 
23
- s.add_dependency "selenium-webdriver", '>= 2.18.0'
23
+ s.add_dependency "selenium-webdriver", '>= 2.45'
24
24
 
25
25
  s.add_development_dependency "rspec", "~> 2.6"
26
26
  s.add_development_dependency "yard", "~> 0.8.2.1"
@@ -32,4 +32,5 @@ Gem::Specification.new do |s|
32
32
  s.add_development_dependency "activesupport", "~> 3.0" # for pluralization during code generation
33
33
  s.add_development_dependency "pry"
34
34
  s.add_development_dependency "coveralls"
35
+ s.add_development_dependency "yard-doctest"
35
36
  end
metadata CHANGED
@@ -1,167 +1,181 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watir-webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.11
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jari Bakken
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-23 00:00:00.000000000 Z
11
+ date: 2015-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.18.0
19
+ version: '2.45'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.18.0
26
+ version: '2.45'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.6'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: yard
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.8.2.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.8.2.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: webidl
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.1.5
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.1.5
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sinatra
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 0.9.2
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.9.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: fuubar
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: nokogiri
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: activesupport
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ~>
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: '3.0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: pry
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: coveralls
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '>='
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: yard-doctest
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
167
181
  description: WebDriver-backed Watir
@@ -171,10 +185,10 @@ executables: []
171
185
  extensions: []
172
186
  extra_rdoc_files: []
173
187
  files:
174
- - .document
175
- - .gitignore
176
- - .gitmodules
177
- - .travis.yml
188
+ - ".document"
189
+ - ".gitignore"
190
+ - ".gitmodules"
191
+ - ".travis.yml"
178
192
  - CHANGES.md
179
193
  - Gemfile
180
194
  - LICENSE
@@ -245,6 +259,7 @@ files:
245
259
  - lib/watir-webdriver/wait/timer.rb
246
260
  - lib/watir-webdriver/window.rb
247
261
  - lib/watir-webdriver/xpath_support.rb
262
+ - spec/always_locate_spec.rb
248
263
  - spec/browser_spec.rb
249
264
  - spec/click_spec.rb
250
265
  - spec/container_spec.rb
@@ -252,7 +267,6 @@ files:
252
267
  - spec/element_spec.rb
253
268
  - spec/html/clicks.html
254
269
  - spec/html/hover.html
255
- - spec/html/inner_outer.html
256
270
  - spec/html/removed_element.html
257
271
  - spec/html/special_chars.html
258
272
  - spec/implementation.rb
@@ -260,6 +274,7 @@ files:
260
274
  - spec/locator_spec_helper.rb
261
275
  - spec/spec_helper.rb
262
276
  - spec/special_chars_spec.rb
277
+ - support/doctest_helper.rb
263
278
  - support/travis.sh
264
279
  - support/version_differ.rb
265
280
  - watir-webdriver.gemspec
@@ -273,21 +288,22 @@ require_paths:
273
288
  - lib
274
289
  required_ruby_version: !ruby/object:Gem::Requirement
275
290
  requirements:
276
- - - '>='
291
+ - - ">="
277
292
  - !ruby/object:Gem::Version
278
293
  version: '0'
279
294
  required_rubygems_version: !ruby/object:Gem::Requirement
280
295
  requirements:
281
- - - '>='
296
+ - - ">="
282
297
  - !ruby/object:Gem::Version
283
298
  version: '0'
284
299
  requirements: []
285
300
  rubyforge_project: watir-webdriver
286
- rubygems_version: 2.0.14
301
+ rubygems_version: 2.2.2
287
302
  signing_key:
288
303
  specification_version: 4
289
304
  summary: Watir on WebDriver
290
305
  test_files:
306
+ - spec/always_locate_spec.rb
291
307
  - spec/browser_spec.rb
292
308
  - spec/click_spec.rb
293
309
  - spec/container_spec.rb
@@ -295,7 +311,6 @@ test_files:
295
311
  - spec/element_spec.rb
296
312
  - spec/html/clicks.html
297
313
  - spec/html/hover.html
298
- - spec/html/inner_outer.html
299
314
  - spec/html/removed_element.html
300
315
  - spec/html/special_chars.html
301
316
  - spec/implementation.rb