druid-ts 1.2.4 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +21 -2
  3. data/Gemfile +1 -1
  4. data/druid.gemspec +3 -3
  5. data/features/element.feature +0 -5
  6. data/features/frames.feature +4 -0
  7. data/features/html/static_elements.html +11 -0
  8. data/features/populate_page_with.feature +25 -0
  9. data/features/select_list.feature +1 -0
  10. data/features/step_definations/audio_steps.rb +1 -1
  11. data/features/step_definations/element_steps.rb +0 -4
  12. data/features/step_definations/frame_steps.rb +35 -0
  13. data/features/step_definations/populate_page_with_steps.rb +3 -0
  14. data/features/step_definations/select_list_steps.rb +4 -0
  15. data/features/step_definations/table_steps.rb +19 -0
  16. data/features/support/page.rb +2 -0
  17. data/features/table.feature +21 -0
  18. data/lib/druid.rb +0 -1
  19. data/lib/druid/assist.rb +8 -5
  20. data/lib/druid/elements/area.rb +0 -20
  21. data/lib/druid/elements/check_box.rb +0 -20
  22. data/lib/druid/elements/element.rb +73 -64
  23. data/lib/druid/elements/file_field.rb +0 -6
  24. data/lib/druid/elements/hidden_field.rb +0 -4
  25. data/lib/druid/elements/image.rb +0 -7
  26. data/lib/druid/elements/media.rb +0 -34
  27. data/lib/druid/elements/ordered_list.rb +8 -21
  28. data/lib/druid/elements/radio_button.rb +0 -13
  29. data/lib/druid/elements/select_list.rb +2 -11
  30. data/lib/druid/elements/table.rb +41 -16
  31. data/lib/druid/elements/table_row.rb +21 -17
  32. data/lib/druid/elements/text_area.rb +0 -7
  33. data/lib/druid/elements/text_field.rb +0 -7
  34. data/lib/druid/elements/unordered_list.rb +9 -22
  35. data/lib/druid/javascript_framework_facade.rb +1 -1
  36. data/lib/druid/locator_generator.rb +153 -147
  37. data/lib/druid/page_populator.rb +44 -37
  38. data/lib/druid/version.rb +1 -1
  39. data/spec/druid/accessors_spec.rb +3 -3
  40. data/spec/druid/elements/check_box_spec.rb +0 -15
  41. data/spec/druid/elements/element_spec.rb +77 -78
  42. data/spec/druid/elements/file_field_spec.rb +0 -5
  43. data/spec/druid/elements/media_spec.rb +0 -49
  44. data/spec/druid/elements/ordered_list_spec.rb +24 -20
  45. data/spec/druid/elements/radio_button_spec.rb +0 -10
  46. data/spec/druid/elements/table_row_spec.rb +12 -12
  47. data/spec/druid/elements/table_spec.rb +29 -25
  48. data/spec/druid/elements/text_area_spec.rb +0 -4
  49. data/spec/druid/elements/text_field_spec.rb +0 -5
  50. data/spec/druid/elements/unordered_list_spec.rb +25 -20
  51. data/spec/druid/javascript_framework_facade_spec.rb +1 -1
  52. data/spec/druid/page_populator_spec.rb +34 -4
  53. metadata +15 -18
  54. data/lib/druid/core_ext/string.rb +0 -5
  55. data/spec/druid/elements/area_spec.rb +0 -25
  56. data/spec/druid/elements/canvas_spec.rb +0 -19
  57. data/spec/druid/elements/video_spec.rb +0 -25
@@ -23,74 +23,81 @@ module Druid
23
23
  # example_page = ExamplePage.new(@browser)
24
24
  # example_page.populate_page_with :username => 'a name', :active => true
25
25
  #
26
- # @param [Hash] the data to use to populate this page. The key
26
+ # @param data [Hash] the data to use to populate this page. The key
27
27
  # can be either a string or a symbol. The value must be a string
28
28
  # for TextField, TextArea, SelectList and FileField must be true or
29
29
  # false for a Checkbox or RadioButton.
30
30
  #
31
31
  def populate_page_with(data)
32
32
  data.each do |key, value|
33
- populate_checkbox(key, value) if is_checkbox?(key) and is_enabled?(key)
34
- populate_radiobuttongroup(key, value) if is_radiobuttongroup?(key)
35
- populate_radiobutton(key, value) if is_radiobutton?(key) and is_enabled?(key)
36
- populate_select_list(key, value) if is_select_list?(key)
37
- populate_text(key, value) if is_text?(key) and is_enabled?(key)
33
+ populate_section(key, value) if value.is_a?(Hash)
34
+ populate_value(self, key, value)
38
35
  end
39
36
  end
40
37
 
41
38
  private
42
39
 
43
- def populate_text(key, value)
44
- self.send "#{key}=", value
40
+ def populate_section(section, data)
41
+ return unless self.respond_to? section
42
+ data.each do |key, value|
43
+ populate_value(self.send(section), key, value)
44
+ end
45
45
  end
46
46
 
47
- def populate_checkbox(key, value)
48
- return self.send "check_#{key}" if value
49
- return self.send "uncheck_#{key}"
47
+ def populate_value(receiver, key, value)
48
+ populate_checkbox(receiver, key, value) if is_checkbox?(receiver, key) and is_enabled?(receiver, key)
49
+ populate_radiobuttongroup(receiver, key, value) if is_radiobuttongroup?(receiver, key)
50
+ populate_radiobutton(receiver, key, value) if is_radiobutton?(receiver, key) and is_enabled?(receiver, key)
51
+ populate_select_list(receiver, key, value) if is_select_list?(receiver, key)
52
+ populate_text(receiver, key, value) if is_text?(receiver, key) and is_enabled?(receiver, key)
50
53
  end
51
54
 
52
- def populate_radiobutton(key, value)
53
- return self.send "select_#{key}" if value
55
+ def populate_text(receiver, key, value)
56
+ receiver.send "#{key}=", value
54
57
  end
55
58
 
56
- def populate_radiobuttongroup(key, value)
57
- return self.send "select_#{key}", value
59
+ def populate_checkbox(receiver, key, value)
60
+ return receiver.send "check_#{key}" if value
61
+ return receiver.send "uncheck_#{key}"
58
62
  end
59
63
 
60
- def populate_select_list(key, value)
61
- select_element = self.send("#{key}_element")
62
- if select_element.options.include?(value)
63
- select_element.select(value)
64
- else
65
- select_element.select_value(value)
66
- end
64
+ def populate_radiobutton(receiver, key, value)
65
+ return receiver.send "select_#{key}" if value
66
+ end
67
+
68
+ def populate_radiobuttongroup(receiver, key, value)
69
+ return receiver.send "select_#{key}", value
70
+ end
71
+
72
+ def populate_select_list(receiver, key, value)
73
+ receiver.send "#{key}=", value
67
74
  end
68
75
 
69
- def is_text?(key)
70
- return false if is_select_list?(key)
71
- respond_to?("#{key}=".to_sym)
76
+ def is_text?(receiver, key)
77
+ return false if is_select_list?(receiver, key)
78
+ receiver.respond_to?("#{key}=".to_sym)
72
79
  end
73
80
 
74
- def is_checkbox?(key)
75
- respond_to?("check_#{key}".to_sym)
81
+ def is_checkbox?(receiver, key)
82
+ receiver.respond_to?("check_#{key}".to_sym)
76
83
  end
77
84
 
78
- def is_radiobutton?(key)
79
- respond_to?("select_#{key}".to_sym)
85
+ def is_radiobutton?(receiver, key)
86
+ receiver.respond_to?("select_#{key}".to_sym)
80
87
  end
81
88
 
82
- def is_radiobuttongroup?(key)
83
- respond_to?("select_#{key}".to_sym) and respond_to?("#{key}_values")
89
+ def is_radiobuttongroup?(receiver, key)
90
+ receiver.respond_to?("select_#{key}".to_sym) and receiver.respond_to?("#{key}_values")
84
91
  end
85
92
 
86
- def is_select_list?(key)
87
- respond_to?("#{key}_options".to_sym)
93
+ def is_select_list?(receiver, key)
94
+ receiver.respond_to?("#{key}_options".to_sym)
88
95
  end
89
96
 
90
- def is_enabled?(key)
91
- return false if is_radiobuttongroup?(key)
92
- return true if (self.send "#{key}_element").tag_name == "textarea"
93
- element = self.send("#{key}_element")
97
+ def is_enabled?(receiver, key)
98
+ return false if is_radiobuttongroup?(receiver, key)
99
+ return true if (receiver.send "#{key}_element").tag_name == "textarea"
100
+ element = receiver.send("#{key}_element")
94
101
  element.enabled? and element.visible?
95
102
  end
96
103
  end
@@ -1,3 +1,3 @@
1
1
  module Druid
2
- VERSION = "1.2.4"
2
+ VERSION = "1.2.5"
3
3
  end
@@ -509,9 +509,9 @@ describe Druid::Accessors do
509
509
 
510
510
  context "implementation" do
511
511
  it "should get the current item from a select list" do
512
- allow(driver).to receive(:selected?).and_return(driver)
513
- allow(driver).to receive(:text).and_return('OH')
514
- expect(driver).to receive_message_chain(:select_list, :options).and_return([driver])
512
+ expect(driver).to receive(:select_list).and_return(driver)
513
+ expect(driver).to receive(:selected_options).and_return [driver]
514
+ expect(driver).to receive(:text).and_return('OH')
515
515
  expect(druid.state).to eql 'OH'
516
516
  end
517
517
 
@@ -6,21 +6,6 @@ describe Druid::Elements::CheckBox do
6
6
  let(:element) { double 'element' }
7
7
  let(:checkbox) { Druid::Elements::CheckBox.new(element) }
8
8
 
9
- it "should check" do
10
- expect(element).to receive(:set)
11
- checkbox.check
12
- end
13
-
14
- it "should uncheck" do
15
- expect(element).to receive(:clear)
16
- checkbox.uncheck
17
- end
18
-
19
- it "should know if it is checked" do
20
- expect(element).to receive(:set?)
21
- checkbox.checked?
22
- end
23
-
24
9
  it "should register with type :checkbox" do
25
10
  expect(Druid::Elements.element_class_for(:input, :checkbox)).to be Druid::Elements::CheckBox
26
11
  end
@@ -56,52 +56,57 @@ describe Druid::Elements::Element do
56
56
  expect(element.value).to eql 'value'
57
57
  end
58
58
 
59
- it "should know how to retrieve the value of an attribute" do
60
- expect(we).to receive(:attribute_value).with('class').and_return('tim')
61
- expect(element.attribute('class')).to eql 'tim'
62
- end
63
-
64
59
  it "should be clickable" do
65
60
  expect(we).to receive(:click)
66
61
  element.click
67
62
  end
68
63
 
64
+ it "should check if the element is visible" do
65
+ expect(we).to receive(:visible?).and_return(false)
66
+ expect(we).to receive(:visible?).and_return(true)
67
+ expect(element.check_visible).to be true
68
+ end
69
+
70
+ it "should check if the element exists" do
71
+ expect(we).to receive(:exists?).and_return(false)
72
+ expect(we).to receive(:exists?).and_return(true)
73
+ expect(element.check_exist).to be true
74
+ end
75
+
69
76
  it "should be able to block until it is present" do
70
- expect(we).to receive(:wait_until).with(timeout: 10, message: "Element not present in 10 seconds")
77
+ allow(we).to receive(:wait_until).with(timeout: 10, message: "Element not present in 10 seconds")
71
78
  element.when_present(10)
72
79
  end
73
80
 
74
81
  it "should return the element when it is present" do
75
- expect(we).to receive(:wait_until).with(timeout: 10, message: "Element not present in 10 seconds")
76
- expect(element.when_present(10)).to eq element
82
+ allow(we).to receive(:wait_until).with(timeout: 10, message: "Element not present in 10 seconds")
83
+ new_element = element.when_present(10)
84
+ expect(new_element).to eql element
77
85
  end
78
86
 
79
87
  it "should use the overriden wait when set" do
80
88
  Druid.default_element_wait = 20
81
- expect(we).to receive(:wait_until).with(timeout: 20, message: "Element not present in 20 seconds")
89
+ allow(we).to receive(:wait_until).with(timeout: 20, message: "Element not present in 20 seconds")
82
90
  element.when_present
83
91
  end
84
92
 
85
93
  it "should be able to block until it is visible" do
86
94
  allow(we).to receive(:wait_until).with(timeout: 10, message: "Element not present in 10 seconds")
87
- expect(we).to receive(:wait_until).with(timeout: 10, message: "Element not visible in 10 seconds")
88
- element.when_visible(10)
89
- end
90
-
91
- it "should return the element when it is visible" do
92
- allow(we).to receive(:wait_until).with(timeout: 10, message: "Element not present in 10 seconds")
93
- expect(we).to receive(:wait_until).with(timeout: 10, message: "Element not visible in 10 seconds")
94
- expect(element.when_visible(10)).to eq element
95
+ allow(we).to receive(:wait_until).with(timeout: 10, message: "Element not visible in 10 seconds")
96
+ allow(we).to receive(:displayed?).and_return(true)
97
+ new_element = element.when_visible(10)
98
+ expect(new_element).to eql element
95
99
  end
96
100
 
97
101
  it "should be able to block until it is not visible" do
98
102
  allow(we).to receive(:wait_until).with(timeout: 10, message: "Element not present in 10 seconds")
99
- expect(we).to receive(:wait_while).with(timeout: 10, message: "Element still visible after 10 seconds")
103
+ allow(we).to receive(:wait_while).with(timeout: 10, message: "Element still visible after 10 seconds")
104
+ allow(we).to receive(:displayed?).and_return(false)
100
105
  element.when_not_visible(10)
101
106
  end
102
107
 
103
108
  it "should be able to block until a user define event fires true" do
104
- expect(we).to receive(:wait_until).with(timeout: 10, message: "Element blah")
109
+ allow(we).to receive(:wait_until).with(timeout: 10, message: "Element blah")
105
110
  element.wait_until(10, "Element blah") {true}
106
111
  end
107
112
 
@@ -150,18 +155,6 @@ describe Druid::Elements::Element do
150
155
  element.focus
151
156
  end
152
157
 
153
- it "should check if the element is visible" do
154
- expect(we).to receive(:visible?).and_return(false)
155
- expect(we).to receive(:visible?).and_return(true)
156
- expect(element.check_visible).to be true
157
- end
158
-
159
- it "should check if the element exists" do
160
- expect(we).to receive(:exist?).and_return(false)
161
- expect(we).to receive(:exist?).and_return(true)
162
- expect(element.check_exist).to be true
163
- end
164
-
165
158
  it "should know if the element is disabled" do
166
159
  expect(we).to receive(:enabled?).and_return(false)
167
160
  expect(element).to be_disabled
@@ -172,74 +165,80 @@ describe Druid::Elements::Element do
172
165
  element.flash
173
166
  end
174
167
 
175
- it "should scroll into view" do
176
- expect(we).to receive(:wd).and_return(we)
177
- expect(we).to receive(:location_once_scrolled_into_view)
178
- element.scroll_into_view
168
+ it "should return the outer html" do
169
+ expect(we).to receive(:outer_html).and_return("<div>blah</div>")
170
+ element.outer_html
179
171
  end
180
172
 
181
- it "should know its location" do
182
- expect(we).to receive(:wd).and_return(we)
183
- expect(we).to receive(:location)
184
- element.location
173
+ it "should return the inner html" do
174
+ expect(we).to receive(:inner_html).and_return("blah")
175
+ element.inner_html
185
176
  end
186
177
 
187
- it "should know its size" do
188
- expect(we).to receive(:wd).and_return(we)
189
- expect(we).to receive(:size)
190
- element.size
178
+ it "should know if it is stale" do
179
+ expect(we).to receive(:stale?).and_return(false)
180
+ expect(element.stale?).to be false
191
181
  end
182
+ end
192
183
 
184
+ context 'walking the dom' do
185
+ let(:found) { double('found').as_null_object }
193
186
 
194
- it "should have a height" do
195
- expect(we).to receive(:wd).and_return(we)
196
- expect(we).to receive(:size).and_return({'width' => 30, 'height' => 20})
197
- expect(element.height).to eql 20
187
+ before do
188
+ allow(found).to receive(:tag_name).and_return(:span)
198
189
  end
199
190
 
200
- it "should have a width" do
201
- expect(we).to receive(:wd).and_return(we)
202
- expect(we).to receive(:size).and_return({'width' => 30, 'height' => 20})
203
- expect(element.width).to eql 30
191
+ it 'should find the parent object' do
192
+ expect(we).to receive(:parent).and_return(found)
193
+ object = element.parent
194
+ expect(object).to be_a(Druid::Elements::Span)
195
+ expect(object.tag_name).to eql :span
204
196
  end
205
197
 
206
- it "should have a centre" do
207
- allow(we).to receive(:wd).and_return(we)
208
- allow(we).to receive(:location).and_return({'y' => 80, 'x' => 40})
209
- allow(we).to receive(:size).and_return({'width' => 30, 'height' => 20})
210
- expect(element.centre).to include(
211
- 'y' => 90,
212
- 'x' => 55
213
- )
198
+ it 'should find the proceeding sibling' do
199
+ expect(we).to receive(:preceding_sibling).and_return(found)
200
+ object = element.preceding_sibling
201
+ expect(object).to be_a(Druid::Elements::Span)
202
+ expect(object.tag_name).to eql :span
214
203
  end
215
204
 
216
- it "should have a centre greater than y position" do
217
- allow(we).to receive(:wd).and_return(we)
218
- allow(we).to receive(:location).and_return({'y' => 80, 'x' => 40})
219
- allow(we).to receive(:size).and_return({'width' => 30, 'height' => 20})
220
- expect(element.centre['y']).to be > element.location['y']
205
+ it 'should find the following sibling' do
206
+ expect(we).to receive(:following_sibling).and_return(found)
207
+ object = element.following_sibling
208
+ expect(object).to be_a(Druid::Elements::Span)
209
+ expect(object.tag_name).to eql :span
221
210
  end
222
211
 
223
- it "should have a centre greater than x position" do
224
- allow(we).to receive(:wd).and_return(we)
225
- allow(we).to receive(:location).and_return({'y' => 80, 'x' => 40})
226
- allow(we).to receive(:size).and_return({'width' => 30, 'height' => 20})
227
- expect(element.centre['x']).to be > element.location['x']
212
+ it 'should find all of its siblings' do
213
+ expect(we).to receive(:siblings).and_return([found, found])
214
+ results = element.siblings
215
+ expect(results.size).to eql 2
216
+ expect(results[0]).to be_a(Druid::Elements::Span)
217
+ expect(results[1]).to be_a(Druid::Elements::Span)
228
218
  end
229
219
 
230
- it "should return the outer html" do
231
- expect(we).to receive(:outer_html).and_return("<div>blah</div>")
232
- element.outer_html
220
+ it 'should find all of its children' do
221
+ expect(we).to receive(:children).and_return([found, found])
222
+ results = element.children
223
+ expect(results.size).to eql 2
224
+ expect(results[0]).to be_a(Druid::Elements::Span)
225
+ expect(results[1]).to be_a(Druid::Elements::Span)
233
226
  end
234
227
 
235
- it "should return the inner html" do
236
- expect(we).to receive(:inner_html).and_return("blah")
237
- element.inner_html
228
+ it 'should find all of the preceding siblings' do
229
+ expect(we).to receive(:preceding_siblings).and_return([found, found])
230
+ results = element.preceding_siblings
231
+ expect(results.size).to eql 2
232
+ expect(results[0]).to be_a(Druid::Elements::Span)
233
+ expect(results[1]).to be_a(Druid::Elements::Span)
238
234
  end
239
235
 
240
- it "should know if it is stale" do
241
- expect(we).to receive(:stale?).and_return(false)
242
- expect(element.stale?).to be false
236
+ it 'should find all of the following siblings' do
237
+ expect(we).to receive(:following_siblings).and_return([found, found])
238
+ results = element.following_siblings
239
+ expect(results.size).to eql 2
240
+ expect(results[0]).to be_a(Druid::Elements::Span)
241
+ expect(results[1]).to be_a(Druid::Elements::Span)
243
242
  end
244
243
  end
245
244
  end
@@ -6,11 +6,6 @@ describe Druid::Elements::FileField do
6
6
  let(:element) { double 'element' }
7
7
  let(:file_field) { Druid::Elements::FileField.new(element) }
8
8
 
9
- it "should set its' value" do
10
- expect(element).to receive(:set).with('a file')
11
- file_field.value = 'a file'
12
- end
13
-
14
9
  it "should register as type :file" do
15
10
  expect(Druid::Elements.element_class_for(:input, :file)).to be Druid::Elements::FileField
16
11
  end
@@ -4,58 +4,9 @@ describe Druid::Elements::Media do
4
4
  let(:element) { double 'element' }
5
5
  let(:media) { Druid::Elements::Media.new(element) }
6
6
 
7
- it "should return autoplay" do
8
- expect(media).to receive(:attribute).with(:autoplay).and_return(true)
9
- expect(media.autoplay?).to eq(true)
10
- end
11
-
12
7
  it "should return controls" do
13
8
  expect(media).to receive(:attribute).with(:controls).and_return(true)
14
9
  expect(media.has_controls?).to eq(true)
15
10
  end
16
11
 
17
- it "should return paused" do
18
- expect(media).to receive(:attribute).with(:paused).and_return(true)
19
- expect(media.paused?).to eq(true)
20
- end
21
-
22
- it "should not return duration when not present" do
23
- expect(media).to receive(:attribute).with(:duration).and_return(nil)
24
- expect(media.duration).to eq(nil)
25
- end
26
-
27
- it "should return duration when present" do
28
- expect(media).to receive(:attribute).with(:duration).and_return('1.405')
29
- expect(media.duration).to eq(1.405)
30
- end
31
-
32
- it "should not return volume when not present" do
33
- expect(media).to receive(:attribute).with(:volume).and_return(nil)
34
- expect(media.volume).to eq(nil)
35
- end
36
-
37
- it "should return volume when present" do
38
- expect(media).to receive(:attribute).with(:volume).and_return('3')
39
- expect(media.volume).to eq(3)
40
- end
41
-
42
- it "should return ended" do
43
- expect(media).to receive(:attribute).with(:ended).and_return(true)
44
- expect(media.ended?).to eq(true)
45
- end
46
-
47
- it "should return seeking" do
48
- expect(media).to receive(:attribute).with(:seeking).and_return(true)
49
- expect(media.seeking?).to eq(true)
50
- end
51
-
52
- it "should return loop" do
53
- expect(media).to receive(:attribute).with(:loop).and_return(true)
54
- expect(media.loop?).to eq(true)
55
- end
56
-
57
- it "should return muted" do
58
- expect(media).to receive(:attribute).with(:muted).and_return(true)
59
- expect(media.muted?).to eq(true)
60
- end
61
12
  end