watir-webdriver 0.6.4 → 0.6.5

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +78 -126
  3. data/LICENSE +3 -1
  4. data/README.md +1 -1
  5. data/Rakefile +1 -1
  6. data/lib/watir-webdriver.rb +15 -1
  7. data/lib/watir-webdriver/browser.rb +2 -1
  8. data/lib/watir-webdriver/cookies.rb +35 -7
  9. data/lib/watir-webdriver/elements/area.rb +13 -0
  10. data/lib/watir-webdriver/elements/element.rb +3 -3
  11. data/lib/watir-webdriver/elements/generated.rb +94 -55
  12. data/lib/watir-webdriver/elements/{frame.rb → iframe.rb} +41 -28
  13. data/lib/watir-webdriver/elements/input.rb +0 -16
  14. data/lib/watir-webdriver/elements/link.rb +13 -1
  15. data/lib/watir-webdriver/elements/text_area.rb +17 -0
  16. data/lib/watir-webdriver/html/generator.rb +2 -2
  17. data/lib/watir-webdriver/html/spec_extractor.rb +31 -4
  18. data/lib/watir-webdriver/html/visitor.rb +12 -4
  19. data/lib/watir-webdriver/locators/button_locator.rb +7 -13
  20. data/lib/watir-webdriver/locators/element_locator.rb +9 -5
  21. data/lib/watir-webdriver/locators/text_area_locator.rb +20 -0
  22. data/lib/watir-webdriver/locators/text_field_locator.rb +8 -0
  23. data/lib/watir-webdriver/version.rb +1 -1
  24. data/lib/watir-webdriver/wait.rb +23 -11
  25. data/spec/browser_spec.rb +18 -18
  26. data/spec/click_spec.rb +5 -5
  27. data/spec/container_spec.rb +5 -11
  28. data/spec/element_locator_spec.rb +32 -26
  29. data/spec/element_spec.rb +9 -9
  30. data/spec/implementation.rb +6 -2
  31. data/spec/input_spec.rb +11 -5
  32. data/spec/locator_spec_helper.rb +3 -3
  33. data/spec/special_chars_spec.rb +1 -1
  34. data/support/travis.sh +19 -5
  35. data/watir-webdriver.gemspec +1 -0
  36. metadata +37 -38
  37. data/spec/html/wait.html +0 -28
  38. data/spec/wait_spec.rb +0 -118
@@ -9,14 +9,13 @@ describe Watir::Browser do
9
9
  end
10
10
 
11
11
  it "takes a Driver instance as argument" do
12
- mock_driver = mock(Selenium::WebDriver::Driver)
12
+ mock_driver = double(Selenium::WebDriver::Driver)
13
13
  Selenium::WebDriver::Driver.should_receive(:===).with(mock_driver).and_return(true)
14
-
15
- lambda { Watir::Browser.new(mock_driver) }.should_not raise_error
14
+ expect { Watir::Browser.new(mock_driver) }.to_not raise_error
16
15
  end
17
16
 
18
17
  it "raises ArgumentError for invalid args" do
19
- lambda { Watir::Browser.new(Object.new) }.should raise_error(ArgumentError)
18
+ expect { Watir::Browser.new(Object.new) }.to raise_error(ArgumentError)
20
19
  end
21
20
  end
22
21
 
@@ -25,25 +24,25 @@ describe Watir::Browser do
25
24
 
26
25
  it "wraps elements as Watir objects" do
27
26
  returned = browser.execute_script("return document.body")
28
- returned.should be_kind_of(Watir::Body)
27
+ expect(returned).to be_kind_of(Watir::Body)
29
28
  end
30
29
 
31
30
  it "wraps elements in an array" do
32
31
  list = browser.execute_script("return [document.body];")
33
32
  list.size.should == 1
34
- list.first.should be_kind_of(Watir::Body)
33
+ expect(list.first).to be_kind_of(Watir::Body)
35
34
  end
36
35
 
37
36
  it "wraps elements in a Hash" do
38
37
  hash = browser.execute_script("return {element: document.body};")
39
- hash['element'].should be_kind_of(Watir::Body)
38
+ expect(hash['element']).to be_kind_of(Watir::Body)
40
39
  end
41
40
 
42
41
  it "wraps elements in a deep object" do
43
42
  hash = browser.execute_script("return {elements: [document.body], body: {element: document.body }}")
44
43
 
45
44
  hash['elements'].first.should be_kind_of(Watir::Body)
46
- hash['body']['element'].should be_kind_of(Watir::Body)
45
+ expect(hash['body']['element']).to be_kind_of(Watir::Body)
47
46
  end
48
47
  end
49
48
 
@@ -52,7 +51,7 @@ describe Watir::Browser do
52
51
  browser.goto WatirSpec.url_for "forms_with_input_elements.html"
53
52
 
54
53
  browser.send_keys "hello"
55
- browser.text_field(:id => "new_user_first_name").value.should == "hello"
54
+ expect(browser.text_field(:id => "new_user_first_name").value).to eq "hello"
56
55
  end
57
56
 
58
57
  it "sends keys to a frame" do
@@ -62,7 +61,7 @@ describe Watir::Browser do
62
61
 
63
62
  browser.frame.send_keys "hello"
64
63
 
65
- tf.value.should == "hello"
64
+ expect(tf.value).to eq "hello"
66
65
  end
67
66
  end
68
67
 
@@ -71,7 +70,7 @@ describe Watir::Browser do
71
70
  b.goto WatirSpec.url_for "definition_lists.html"
72
71
  b.close
73
72
 
74
- lambda { b.dl(:id => "experience-list").id }.should raise_error(Error, "browser was closed")
73
+ expect { b.dl(:id => "experience-list").id }.to raise_error(Error, "browser was closed")
75
74
  end
76
75
 
77
76
  describe "#wait_while" do
@@ -81,7 +80,7 @@ describe Watir::Browser do
81
80
  called = false
82
81
  browser.wait_while(3, "foo") { called = true }
83
82
 
84
- called.should be_true
83
+ expect(called).to be_true
85
84
  end
86
85
  end
87
86
 
@@ -92,14 +91,14 @@ describe Watir::Browser do
92
91
  called = false
93
92
  browser.wait_until(3, "foo") { called = true }
94
93
 
95
- called.should be_true
94
+ expect(called).to be_true
96
95
  end
97
96
  end
98
97
 
99
98
  describe "#wait" do
100
99
  it "waits until document.readyState == 'complete'" do
101
- browser.should_receive(:ready_state).and_return('incomplete')
102
- browser.should_receive(:ready_state).and_return('complete')
100
+ expect(browser).to receive(:ready_state).and_return('incomplete')
101
+ expect(browser).to receive(:ready_state).and_return('complete')
103
102
 
104
103
  browser.wait
105
104
  end
@@ -107,7 +106,8 @@ describe Watir::Browser do
107
106
 
108
107
  describe "#ready_state" do
109
108
  it "gets the document's readyState property" do
110
- browser.should_receive(:execute_script).with('return document.readyState')
109
+ #browser.should_receive(:execute_script).with('return document.readyState')
110
+ expect(browser).to receive(:execute_script).with('return document.readyState')
111
111
  browser.ready_state
112
112
  end
113
113
  end
@@ -115,13 +115,13 @@ describe Watir::Browser do
115
115
  describe "#inspect" do
116
116
  it "works even if browser is closed" do
117
117
  browser.should_receive(:url).and_raise(Errno::ECONNREFUSED)
118
- lambda { browser.inspect }.should_not raise_error
118
+ expect(browser.inspect).to_not raise_error
119
119
  end
120
120
  end
121
121
 
122
122
  describe '#screenshot' do
123
123
  it 'returns an instance of of Watir::Screenshot' do
124
- browser.screenshot.should be_kind_of(Watir::Screenshot)
124
+ expect(browser.screenshot).to be_kind_of(Watir::Screenshot)
125
125
  end
126
126
  end
127
127
  end
@@ -10,25 +10,25 @@ describe Watir::Element do
10
10
  let(:log) { browser.element(:id => "log").ps.map { |e| e.text } }
11
11
 
12
12
  # TODO: make guards more flexible, in reality this currently only works on linux with native events
13
- compliant_on [:webdriver, :firefox, :native_events] do
13
+ compliant_on [:webdriver, :firefox, :native_events] do
14
14
  it "should perform a click with no modifier keys" do
15
15
  clicker.click
16
- log.should == ["shift=false alt=false"]
16
+ expect(log).to eq ["shift=false alt=false"]
17
17
  end
18
18
 
19
19
  it "should perform a click with the shift key pressed" do
20
20
  clicker.click(:shift)
21
- log.should == ["shift=true alt=false"]
21
+ expect(log).to eq ["shift=true alt=false"]
22
22
  end
23
23
 
24
24
  it "should perform a click with the alt key pressed" do
25
25
  clicker.click(:alt)
26
- log.should == ["shift=false alt=true"]
26
+ expect(log).to eq ["shift=false alt=true"]
27
27
  end
28
28
 
29
29
  it "should perform a click with the shift and alt keys pressed" do
30
30
  clicker.click(:shift, :alt)
31
- log.should == ["shift=true alt=true"]
31
+ expect(log).to eq ["shift=true alt=true"]
32
32
  end
33
33
  end
34
34
 
@@ -11,29 +11,23 @@ describe Watir::Container do
11
11
  end
12
12
 
13
13
  it "converts 2-arg selector into a hash" do
14
- @container.public_extract_selector([:how, 'what']).
15
- should == { :how => 'what' }
14
+ expect(@container.public_extract_selector([:how, 'what'])).to eq Hash[:how => 'what']
16
15
  end
17
16
 
18
17
  it "returns the hash given" do
19
- @container.public_extract_selector([:how => "what"]).
20
- should == { :how => "what" }
18
+ expect(@container.public_extract_selector([:how => "what"])).to eq Hash[:how => "what"]
21
19
  end
22
20
 
23
21
  it "returns an empty hash if given no args" do
24
- @container.public_extract_selector([]).should == {}
22
+ expect(@container.public_extract_selector([])).to eq Hash[]
25
23
  end
26
24
 
27
25
  it "raises ArgumentError if given 1 arg which is not a Hash" do
28
- lambda {
29
- @container.public_extract_selector([:how])
30
- }.should raise_error(ArgumentError)
26
+ expect {@container.public_extract_selector([:how])}.to raise_error(ArgumentError)
31
27
  end
32
28
 
33
29
  it "raises ArgumentError if given > 2 args" do
34
- lambda {
35
- @container.public_extract_selector([:how, 'what', 'value'])
36
- }.should raise_error(ArgumentError)
30
+ expect {@container.public_extract_selector([:how, 'what', 'value'])}.to raise_error(ArgumentError)
37
31
  end
38
32
 
39
33
  end
@@ -106,6 +106,17 @@ describe Watir::ElementLocator do
106
106
  :data_name => "foo"
107
107
  end
108
108
 
109
+ it "handles aria-* attributes" do
110
+ if Watir.prefer_css?
111
+ expect_one :css, 'div[aria-label="foo"]'
112
+ else
113
+ expect_one :xpath, ".//div[@aria-label='foo']"
114
+ end
115
+
116
+ locate_one :tag_name => "div",
117
+ :aria_label => "foo"
118
+ end
119
+
109
120
  it "normalizes space for the :href attribute" do
110
121
  if Watir.prefer_css?
111
122
  expect_one :css, 'a[href~="foo"]'
@@ -146,11 +157,11 @@ describe Watir::ElementLocator do
146
157
  locate_one selector, Watir::Input.attributes
147
158
  end
148
159
 
149
- it "does not use the label element for <option> elements" do
160
+ it "uses label attribute if it is valid for element" do
150
161
  expect_one :xpath, ".//option[@label='foo']"
151
162
 
152
- locate_one :tag_name => "option",
153
- :label => "foo"
163
+ selector = { :tag_name => "option", :label => "foo" }
164
+ locate_one selector, Watir::Option.attributes
154
165
  end
155
166
 
156
167
  it "translates ruby attribute names to content attribute names" do
@@ -184,7 +195,7 @@ describe Watir::ElementLocator do
184
195
  expect_all(:xpath, ".//div").and_return(elements)
185
196
  end
186
197
 
187
- locate_one(:tag_name => "div", :class => /oob/).should == elements[1]
198
+ expect(locate_one(:tag_name => "div", :class => /oob/)).to eq elements[1]
188
199
  end
189
200
 
190
201
  it "handles :tag_name, :index and a single regexp attribute" do
@@ -205,7 +216,7 @@ describe Watir::ElementLocator do
205
216
  :index => 1
206
217
  }
207
218
 
208
- locate_one(selector).should == elements[1]
219
+ expect(locate_one(selector)).to eq elements[1]
209
220
  end
210
221
 
211
222
  it "handles mix of string and regexp attributes" do
@@ -227,7 +238,7 @@ describe Watir::ElementLocator do
227
238
  :title => /baz/
228
239
  }
229
240
 
230
- locate_one(selector).should == elements[1]
241
+ expect(locate_one(selector)).to eq elements[1]
231
242
  end
232
243
 
233
244
  it "handles data-* attributes with regexp" do
@@ -248,7 +259,7 @@ describe Watir::ElementLocator do
248
259
  :data_automation_id => /bar/
249
260
  }
250
261
 
251
- locate_one(selector).should == elements[1]
262
+ expect(locate_one(selector)).to eq elements[1]
252
263
  end
253
264
 
254
265
  it "handles :label => /regexp/ selector" do
@@ -266,12 +277,12 @@ describe Watir::ElementLocator do
266
277
  expect_all(:xpath, ".//div[@id='baz']").ordered.and_return(div_elements)
267
278
  end
268
279
 
269
- locate_one(:tag_name => "div", :label => /oob/).should == div_elements.first
280
+ expect(locate_one(:tag_name => "div", :label => /oob/)).to eq div_elements.first
270
281
  end
271
282
 
272
283
  it "returns nil when no label matching the regexp is found" do
273
284
  expect_all(:tag_name, "label").and_return([])
274
- locate_one(:tag_name => "div", :label => /foo/).should be_nil
285
+ expect(locate_one(:tag_name => "div", :label => /foo/)).to be_nil
275
286
  end
276
287
 
277
288
  end
@@ -295,7 +306,7 @@ describe Watir::ElementLocator do
295
306
  :index => 1
296
307
  }
297
308
 
298
- locate_one(selector).should == elements[1]
309
+ expect(locate_one(selector)).to eq elements[1]
299
310
  end
300
311
 
301
312
  it "returns nil if found element didn't match the selector tag_name" do
@@ -306,29 +317,26 @@ describe Watir::ElementLocator do
306
317
  :xpath => "//div"
307
318
  }
308
319
 
309
- locate_one(selector, Watir::Input.attributes).should be_nil
320
+ expect(locate_one(selector, Watir::Input.attributes)).to be_nil
310
321
  end
311
322
 
312
323
  describe "errors" do
313
324
  it "raises a TypeError if :index is not a Fixnum" do
314
- lambda {
315
- locate_one(:tag_name => "div", :index => "bar")
316
- }.should raise_error(TypeError, %[expected Fixnum, got "bar":String])
325
+ expect { locate_one(:tag_name => "div", :index => "bar") }.to \
326
+ raise_error(TypeError, %[expected Fixnum, got "bar":String])
317
327
  end
318
328
 
319
329
  it "raises a TypeError if selector value is not a String or Regexp" do
320
- lambda {
321
- locate_one(:tag_name => 123)
322
- }.should raise_error(TypeError, %[expected one of [String, Regexp], got 123:Fixnum])
330
+ expect { locate_one(:tag_name => 123) }.to \
331
+ raise_error(TypeError, %[expected one of [String, Regexp], got 123:Fixnum])
323
332
  end
324
333
 
325
334
  it "raises a MissingWayOfFindingObjectException if the attribute is not valid" do
326
335
  bad_selector = {:tag_name => "input", :href => "foo"}
327
336
  valid_attributes = Watir::Input.attributes
328
337
 
329
- lambda {
330
- locate_one(bad_selector, valid_attributes)
331
- }.should raise_error(MissingWayOfFindingObjectException, "invalid attribute: :href")
338
+ expect { locate_one(bad_selector, valid_attributes) }.to \
339
+ raise_error(MissingWayOfFindingObjectException, "invalid attribute: :href")
332
340
  end
333
341
  end
334
342
  end
@@ -383,8 +391,7 @@ describe Watir::ElementLocator do
383
391
  expect_all(:xpath, ".//div").and_return(elements)
384
392
  end
385
393
 
386
-
387
- locate_all(:tag_name => "div", :class => /oob/).should == elements.last(3)
394
+ expect(locate_all(:tag_name => "div", :class => /oob/)).to eq elements.last(3)
388
395
  end
389
396
 
390
397
  it "handles mix of string and regexp attributes" do
@@ -406,15 +413,14 @@ describe Watir::ElementLocator do
406
413
  :title => /baz/
407
414
  }
408
415
 
409
- locate_all(selector).should == elements.last(2)
416
+ expect(locate_all(selector)).to eq elements.last(2)
410
417
  end
411
418
  end
412
419
 
413
420
  describe "errors" do
414
421
  it "raises ArgumentError if :index is given" do
415
- lambda {
416
- locate_all(:tag_name => "div", :index => 1)
417
- }.should raise_error(ArgumentError, "can't locate all elements by :index")
422
+ expect { locate_all(:tag_name => "div", :index => 1) }.to \
423
+ raise_error(ArgumentError, "can't locate all elements by :index")
418
424
  end
419
425
  end
420
426
  end
@@ -8,25 +8,25 @@ describe Watir::Element do
8
8
  end
9
9
 
10
10
  it 'returns true if the element exists and is visible' do
11
- browser.div(:id, 'foo').should be_present
11
+ expect(browser.div(:id, 'foo')).to be_present
12
12
  end
13
13
 
14
14
  it 'returns false if the element exists but is not visible' do
15
- browser.div(:id, 'bar').should_not be_present
15
+ expect(browser.div(:id, 'bar')).to_not be_present
16
16
  end
17
17
 
18
18
  it 'returns false if the element does not exist' do
19
- browser.div(:id, 'should-not-exist').should_not be_present
19
+ expect(browser.div(:id, 'should-not-exist')).to_not be_present
20
20
  end
21
21
  end
22
22
 
23
23
  describe "#reset!" do
24
24
  it "successfully relocates collection elements after a reset!" do
25
25
  element = browser.divs(:id, 'foo').to_a.first
26
- element.should_not be_nil
26
+ expect(element).to_not be_nil
27
27
 
28
28
  element.send :reset!
29
- element.should exist
29
+ expect(element).to exist
30
30
  end
31
31
  end
32
32
 
@@ -37,9 +37,9 @@ describe Watir::Element do
37
37
  button = browser.button(:id => "remove-button")
38
38
  element = browser.div(:id => "text")
39
39
 
40
- element.should exist
40
+ expect(element).to exist
41
41
  button.click
42
- element.should_not exist
42
+ expect(element).to_not exist
43
43
  end
44
44
  end
45
45
 
@@ -52,9 +52,9 @@ describe Watir::Element do
52
52
  browser.goto WatirSpec.url_for('hover.html', :needs_server => true)
53
53
  link = browser.a
54
54
 
55
- link.style("font-size").should == "10px"
55
+ expect(link.style("font-size")).to eq "10px"
56
56
  link.hover
57
- link.style("font-size").should == "20px"
57
+ expect(link.style("font-size")).to eq "20px"
58
58
  end
59
59
  end
60
60
  end
@@ -107,7 +107,7 @@ class ImplementationConfig
107
107
 
108
108
  def chrome_args
109
109
  opts = {
110
- :switches => ["--disable-translate"],
110
+ :args => ["--disable-translate"],
111
111
  :native_events => native_events?
112
112
  }
113
113
 
@@ -123,11 +123,15 @@ class ImplementationConfig
123
123
  Selenium::WebDriver::Chrome.path = path
124
124
  end
125
125
 
126
+ if ENV['TRAVIS']
127
+ opts[:args] << "--no-sandbox" # https://github.com/travis-ci/travis-ci/issues/938
128
+ end
129
+
126
130
  [:chrome, opts]
127
131
  end
128
132
 
129
133
  def remote_args
130
- [:remote, {:url => ENV["WATIR_WEBDRIVER_REMOTE_URL"] || "http://127.0.0.1:8080"}]
134
+ [:remote, {:url => ENV["WATIR_WEBDRIVER_REMOTE_URL"] || "http://127.0.0.1:8080"}]
131
135
  end
132
136
 
133
137
  def add_html_routes
@@ -9,12 +9,12 @@ describe Watir::Input do
9
9
  describe "#to_subtype" do
10
10
  it "returns a CheckBox instance" do
11
11
  e = browser.input(:xpath => "//input[@type='checkbox']").to_subtype
12
- e.should be_kind_of(Watir::CheckBox)
12
+ expect(e).to be_kind_of(Watir::CheckBox)
13
13
  end
14
14
 
15
15
  it "returns a Radio instance" do
16
16
  e = browser.input(:xpath => "//input[@type='radio']").to_subtype
17
- e.should be_kind_of(Watir::Radio)
17
+ expect(e).to be_kind_of(Watir::Radio)
18
18
  end
19
19
 
20
20
  it "returns a Button instance" do
@@ -23,17 +23,23 @@ describe Watir::Input do
23
23
  browser.input(:xpath => "//input[@type='submit']").to_subtype
24
24
  ]
25
25
 
26
- es.all? { |e| e.should be_kind_of(Watir::Button) }
26
+ es.all? { |e| expect(e).to be_kind_of(Watir::Button) }
27
27
  end
28
28
 
29
29
  it "returns a TextField instance" do
30
30
  e = browser.input(:xpath => "//input[@type='text']").to_subtype
31
- e.should be_kind_of(Watir::TextField)
31
+ expect(e).to be_kind_of(Watir::TextField)
32
32
  end
33
33
 
34
34
  it "returns a TextField instance" do
35
35
  e = browser.input(:xpath => "//input[@type='file']").to_subtype
36
- e.should be_kind_of(Watir::FileField)
36
+ expect(e).to be_kind_of(Watir::FileField)
37
+ end
38
+ end
39
+
40
+ describe "#type" do
41
+ it "returns an email type" do
42
+ expect(browser.input(:name => "html5_email").type).to eq 'email'
37
43
  end
38
44
  end
39
45
  end