watir-webdriver 0.6.11 → 0.7.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.
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