druid-ts 1.1.8 → 1.2.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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +27 -0
  3. data/features/bold.feature +21 -0
  4. data/features/element.feature +7 -0
  5. data/features/frames.feature +15 -0
  6. data/features/html/frames.html +3 -3
  7. data/features/html/iframes.html +2 -2
  8. data/features/html/multi_elements.html +1 -0
  9. data/features/html/static_elements.html +25 -8
  10. data/features/javascript.feature +10 -1
  11. data/features/link.feature +4 -0
  12. data/features/multi_elements.feature +6 -0
  13. data/features/radio_button_group.feature +28 -0
  14. data/features/section.feature +128 -0
  15. data/features/select_list.feature +4 -0
  16. data/features/step_definations/bold_steps.rb +11 -0
  17. data/features/step_definations/element_steps.rb +8 -0
  18. data/features/step_definations/frame_steps.rb +53 -11
  19. data/features/step_definations/javasript_steps.rb +9 -0
  20. data/features/step_definations/link_steps.rb +8 -0
  21. data/features/step_definations/multi_elements_steps.rb +13 -0
  22. data/features/step_definations/radio_button_group_steps.rb +32 -0
  23. data/features/step_definations/section_steps.rb +262 -0
  24. data/features/step_definations/table_steps.rb +9 -0
  25. data/features/support/env.rb +1 -0
  26. data/features/support/page.rb +16 -5
  27. data/features/table.feature +18 -14
  28. data/lib/druid.rb +42 -30
  29. data/lib/druid/accessors.rb +188 -55
  30. data/lib/druid/assist.rb +46 -4
  31. data/lib/druid/elements.rb +1 -0
  32. data/lib/druid/elements/bold.rb +8 -0
  33. data/lib/druid/elements/element.rb +16 -3
  34. data/lib/druid/elements/link.rb +7 -0
  35. data/lib/druid/elements/radio_button.rb +0 -7
  36. data/lib/druid/elements/select_list.rb +2 -2
  37. data/lib/druid/elements/table.rb +7 -0
  38. data/lib/druid/javascript/angularjs.rb +12 -0
  39. data/lib/druid/javascript_framework_facade.rb +5 -3
  40. data/lib/druid/locator_generator.rb +1 -0
  41. data/lib/druid/page_factory.rb +1 -0
  42. data/lib/druid/page_populator.rb +10 -1
  43. data/lib/druid/sections.rb +29 -0
  44. data/lib/druid/version.rb +1 -1
  45. data/spec/druid/accessors_spec.rb +79 -13
  46. data/spec/druid/druid_spec.rb +2 -1
  47. data/spec/druid/element_locators_spec.rb +26 -4
  48. data/spec/druid/elements/bold_spec.rb +21 -0
  49. data/spec/druid/elements/link_spec.rb +1 -1
  50. data/spec/druid/elements/page_factory_spec.rb +2 -2
  51. data/spec/druid/elements/radio_button_spec.rb +0 -5
  52. data/spec/druid/elements/select_list_spec.rb +3 -3
  53. data/spec/druid/page_factory_spec.rb +15 -15
  54. data/spec/druid/page_populator_spec.rb +4 -4
  55. data/spec/druid/page_section_spec.rb +61 -0
  56. data/spec/spec_helper.rb +1 -0
  57. metadata +20 -1
@@ -80,7 +80,7 @@ describe Druid do
80
80
  it "should throw an error" do
81
81
  expect {
82
82
  TestDruid.new("blah")
83
- }.to raise_error 'expect Watir::Browser'
83
+ }.to raise_error 'expect Watir::Browser or Watir::HTMLElement'
84
84
  end
85
85
  end
86
86
 
@@ -88,6 +88,7 @@ describe Druid do
88
88
  context "when using PageObject" do
89
89
 
90
90
  it "should display the page text" do
91
+ # expect(driver).to receive(:element).and_return(driver)
91
92
  expect(driver).to receive(:text).and_return("driver text")
92
93
  expect(druid.text).to eql "driver text"
93
94
  end
@@ -10,8 +10,8 @@ describe Druid::ElementLocators do
10
10
 
11
11
  it "should find a button element" do
12
12
  expect(driver).to receive(:button).with(:id => 'blah').and_return(driver)
13
- button = page.button_element(:id => 'blah')
14
- expect(button).to be_instance_of Druid::Elements::Button
13
+ element = page.button_element(:id => 'blah')
14
+ expect(element).to be_instance_of Druid::Elements::Button
15
15
  end
16
16
 
17
17
  it "should find a button element using a default identifier" do
@@ -32,8 +32,8 @@ describe Druid::ElementLocators do
32
32
 
33
33
  it "should find a text field element" do
34
34
  expect(driver).to receive(:text_field).with(:id => 'blah').and_return(driver)
35
- text_field = page.text_field_element(:id => 'blah')
36
- expect(text_field).to be_instance_of Druid::Elements::TextField
35
+ element = page.text_field_element(:id => 'blah')
36
+ expect(element).to be_instance_of Druid::Elements::TextField
37
37
  end
38
38
 
39
39
  it "should find a text field element using a default identifier" do
@@ -681,4 +681,26 @@ describe Druid::ElementLocators do
681
681
  page.video_elements
682
682
  end
683
683
 
684
+ it "should find a b element" do
685
+ expect(driver).to receive(:b).with(:id => 'blah').and_return(driver)
686
+ element = page.b_element(:id => 'blah')
687
+ expect(element).to be_instance_of Druid::Elements::Bold
688
+ end
689
+
690
+ it "should find a b element using a default identifier" do
691
+ expect(driver).to receive(:b).with(:index => 0).and_return(driver)
692
+ page.b_element
693
+ end
694
+
695
+ it "should find all b elements" do
696
+ expect(driver).to receive(:bs).with(:id => 'blah').and_return([driver])
697
+ elements = page.b_elements(:id => 'blah')
698
+ expect(elements[0]).to be_instance_of Druid::Elements::Bold
699
+ end
700
+
701
+ it "should find all b elements using no parameters" do
702
+ expect(driver).to receive(:bs).with({}).and_return([driver])
703
+ page.b_elements
704
+ end
705
+
684
706
  end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'druid/elements'
3
+
4
+ describe Druid::Elements::Bold do
5
+ let(:bold) { Druid::Elements::Bold}
6
+
7
+ describe "when mapping how to find an element" do
8
+ it "should map watir types to same" do
9
+ [:class, :id, :idenx, :name, :xpath, :css].each do |t|
10
+ identifier = bold.identifier_for t => 'value'
11
+ expect(identifier.keys.first).to eql t
12
+ end
13
+ end
14
+ end
15
+
16
+ describe "interface" do
17
+ it "should register with tag :b" do
18
+ expect(Druid::Elements.element_class_for(:b)).to eql Druid::Elements::Bold
19
+ end
20
+ end
21
+ end
@@ -4,7 +4,7 @@ require 'druid/elements'
4
4
  describe Druid::Elements::Link do
5
5
  describe "when mapping how to find an element" do
6
6
  it "should map watir types to same" do
7
- [:class, :href, :id, :name, :text, :xpath, :css, :title].each do |t|
7
+ [:class, :href, :id, :index, :name, :text, :xpath, :css, :title].each do |t|
8
8
  identifier = Druid::Elements::Link.identifier_for t => 'value'
9
9
  expect(identifier.keys.first).to eql t
10
10
  end
@@ -6,7 +6,7 @@ class FactoryTestDruid
6
6
  page_url "http://www.baidu.com"
7
7
  end
8
8
 
9
- class TestWorld
9
+ class TestWorldOne
10
10
  include Druid::PageFactory
11
11
 
12
12
  attr_accessor :driver
@@ -14,7 +14,7 @@ end
14
14
 
15
15
  describe Druid::PageFactory do
16
16
  before(:each) do
17
- @world = TestWorld.new
17
+ @world = TestWorldOne.new
18
18
  @world.driver = mock_driver
19
19
  end
20
20
 
@@ -21,11 +21,6 @@ describe Druid::Elements::RadioButton do
21
21
  radio.select
22
22
  end
23
23
 
24
- it "should clear" do
25
- expect(element).to receive(:clear)
26
- radio.clear
27
- end
28
-
29
24
  it "should know if it is selected" do
30
25
  expect(element).to receive(:set?)
31
26
  radio.selected?
@@ -17,13 +17,13 @@ describe Druid::Elements::SelectList do
17
17
  let(:select_list) { Druid::Elements::SelectList.new(element) }
18
18
 
19
19
  it "should return an option when indexed" do
20
- expect(element).to receive_message_chain(:options, :[]).with(1)
20
+ expect(element).to receive(:options).with(no_args).and_return(opts)
21
21
  expect(select_list[1]).to be_instance_of Druid::Elements::Option
22
22
  end
23
23
 
24
24
  it "should retrieve all values of select_list" do
25
- expect(element).to receive(:options).and_return(['val1','val2'])
26
- expect(select_list.options).to eql ['val1','val2']
25
+ expect(element).to receive(:options).with(no_args).and_return(opts)
26
+ expect(select_list.options.size).to eql 2
27
27
  end
28
28
 
29
29
  it "should select an element" do
@@ -26,9 +26,15 @@ module ContainingModule
26
26
  end
27
27
  end
28
28
 
29
- class TestWorld
30
- include Druid::PageFactory
29
+ class WorldSuper
30
+ attr_reader :super_called
31
+ def on_page(cls, params={}, visit=false, &block)
32
+ @super_called = true
33
+ end
34
+ end
31
35
 
36
+ class TestWorld < WorldSuper
37
+ include Druid::PageFactory
32
38
  attr_accessor :driver
33
39
  attr_accessor :current_page
34
40
  end
@@ -41,6 +47,13 @@ describe Druid::PageFactory do
41
47
  driver = world.driver
42
48
  end
43
49
 
50
+ it "should call super when non druid class passed" do
51
+ class NoDruid
52
+ end
53
+ world.on(NoDruid)
54
+ expect(world.super_called).to be true
55
+ end
56
+
44
57
  it "should create a new page object and execute a block" do
45
58
  expect(driver).not_to receive(:goto)
46
59
  world.on_page FactoryTestDruid do |page|
@@ -219,17 +232,4 @@ describe Druid::PageFactory do
219
232
  expect{world.navigate_to(AnotherPage)}.to raise_error
220
233
  end
221
234
 
222
- it "should know how to continue routing from a location" do
223
- Druid::PageFactory.routes = {:default => [[FactoryTestDruid, :a_method], [AnotherPage, :b_method], [YetAnotherPage, :c_method]]}
224
- world.current_page = FactoryTestDruid.new(driver)
225
- f_page = FactoryTestDruid.new(driver)
226
- allow(FactoryTestDruid).to receive(:new).with(driver,false).and_return(f_page)
227
- allow(f_page).to receive(:respond_to?).with(:a_method).and_return(true)
228
- allow(f_page).to receive(:a_method)
229
- a_page = AnotherPage.new(driver)
230
- allow(AnotherPage).to receive(:new).with(driver,false).and_return(a_page)
231
- allow(a_page).to receive(:respond_to?).with(:b_method).and_return(true)
232
- allow(a_page).to receive(:b_method)
233
- expect(world.continue_navigation_to(YetAnotherPage).class).to eql YetAnotherPage
234
- end
235
235
  end
@@ -9,6 +9,7 @@ class DruidPagePopulator
9
9
  checkbox(:cb, :id => 'id')
10
10
  radio_button(:rb, :id => 'id')
11
11
  file_field(:ff, :id => 'id')
12
+ radio_button_group(:rbg, :id => 'id')
12
13
  end
13
14
 
14
15
  describe Druid::PagePopulator do
@@ -72,10 +73,9 @@ describe Druid::PagePopulator do
72
73
  druid.populate_page_with('rb' => true)
73
74
  end
74
75
 
75
- it "should clear a radio button when false is specified" do
76
- expect(druid).to receive(:clear_rb)
77
- expect(druid).to receive(:is_enabled?).and_return(true)
78
- druid.populate_page_with('rb' => false)
76
+ it "should select the correct element from a radio button group" do
77
+ expect(druid).to receive(:select_rbg).with('blah')
78
+ druid.populate_page_with('rbg' => 'blah')
79
79
  end
80
80
 
81
81
  it "should not populate a checkbox if it is disabled" do
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ class Container
4
+ include Druid
5
+ end
6
+
7
+ class SectionsPage
8
+ include Druid
9
+
10
+ page_section(:container, Container, :id => 'blah')
11
+ page_sections(:containers, Container, :class => 'foo')
12
+ end
13
+
14
+ describe Druid::Accessors do
15
+ context "when using watir" do
16
+ let(:driver) { mock_driver }
17
+ let(:druid) { SectionsPage.new(driver) }
18
+
19
+ it "it should find a page section" do
20
+ expect(driver).to receive(:element).with(:id => 'blah').and_return(driver)
21
+ section = druid.container
22
+ expect(section).to be_instance_of Container
23
+ end
24
+
25
+ it "it should find page sections" do
26
+ expect(driver).to receive(:elements).with(:class => 'foo').and_return([driver, driver])
27
+ sections = druid.containers
28
+ expect(sections).to be_instance_of Druid::SectionCollection
29
+ sections.each do |section|
30
+ expect(section).to be_instance_of Container
31
+ end
32
+ end
33
+ end
34
+
35
+ describe Druid::SectionCollection do
36
+ ContainedItem = Struct.new(:type, :name)
37
+ let(:section_collection) do
38
+ contained_items = [ContainedItem.new(:sandwich, :reuben), ContainedItem.new(:soup, :lobstar_bisque), ContainedItem.new(:sandwich, :dagwood)]
39
+ Druid::SectionCollection.new(contained_items)
40
+ end
41
+
42
+ it "should be indexed to the sections" do
43
+ expect(section_collection[0]).to be_an_instance_of ContainedItem
44
+ expect(section_collection[-1]).to be_an_instance_of ContainedItem
45
+ end
46
+
47
+ it "should be able to iterate over the sections" do
48
+ section_collection.each do |section|
49
+ expect(section).to be_an_instance_of ContainedItem
50
+ end
51
+ end
52
+
53
+ it "should find a section by one of its values" do
54
+ expect(section_collection.find_by(name: :dagwood).name).to eq :dagwood
55
+ end
56
+
57
+ it "should find all sections matching a value" do
58
+ expect(section_collection.select_by(type: :sandwich).map(&:type)).to eq [:sandwich, :sandwich]
59
+ end
60
+ end
61
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,7 @@ require "watir-webdriver"
3
3
 
4
4
  def mock_driver
5
5
  driver = double('watir')
6
+ allow(driver).to receive(:is_a?).with(anything()).and_return(false)
6
7
  allow(driver).to receive(:is_a?).with(Watir::Browser).and_return(true)
7
8
  driver
8
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: druid-ts
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.8
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Sheng
@@ -100,6 +100,7 @@ files:
100
100
  - features/area.feature
101
101
  - features/async.feature
102
102
  - features/audio.feature
103
+ - features/bold.feature
103
104
  - features/button.feature
104
105
  - features/canvas.feature
105
106
  - features/checkbox.feature
@@ -148,6 +149,7 @@ files:
148
149
  - features/page_level_actions.feature
149
150
  - features/paragraph.feature
150
151
  - features/radio_button.feature
152
+ - features/radio_button_group.feature
151
153
  - features/sample-app/public/jquery-1.3.2.js
152
154
  - features/sample-app/public/jquery.html
153
155
  - features/sample-app/public/movie.mp4
@@ -155,11 +157,13 @@ files:
155
157
  - features/sample-app/public/prototype-1.6.0.3.js
156
158
  - features/sample-app/public/prototype.html
157
159
  - features/sample-app/sample_app.rb
160
+ - features/section.feature
158
161
  - features/select_list.feature
159
162
  - features/span.feature
160
163
  - features/step_definations/area_steps.rb
161
164
  - features/step_definations/async_steps.rb
162
165
  - features/step_definations/audio_steps.rb
166
+ - features/step_definations/bold_steps.rb
163
167
  - features/step_definations/button_steps.rb
164
168
  - features/step_definations/canvas_steps.rb
165
169
  - features/step_definations/checkbox_steps.rb
@@ -183,7 +187,9 @@ files:
183
187
  - features/step_definations/page_level_actions_steps.rb
184
188
  - features/step_definations/page_traversal_steps.rb
185
189
  - features/step_definations/paragraph_steps.rb
190
+ - features/step_definations/radio_button_group_steps.rb
186
191
  - features/step_definations/radio_button_steps.rb
192
+ - features/step_definations/section_steps.rb
187
193
  - features/step_definations/select_list_steps.rb
188
194
  - features/step_definations/span_steps.rb
189
195
  - features/step_definations/table_cell_steps.rb
@@ -214,6 +220,7 @@ files:
214
220
  - lib/druid/elements.rb
215
221
  - lib/druid/elements/area.rb
216
222
  - lib/druid/elements/audio.rb
223
+ - lib/druid/elements/bold.rb
217
224
  - lib/druid/elements/button.rb
218
225
  - lib/druid/elements/canvas.rb
219
226
  - lib/druid/elements/check_box.rb
@@ -241,6 +248,7 @@ files:
241
248
  - lib/druid/elements/text_field.rb
242
249
  - lib/druid/elements/unordered_list.rb
243
250
  - lib/druid/elements/video.rb
251
+ - lib/druid/javascript/angularjs.rb
244
252
  - lib/druid/javascript/jquery.rb
245
253
  - lib/druid/javascript/prototype.rb
246
254
  - lib/druid/javascript/yui.rb
@@ -249,11 +257,13 @@ files:
249
257
  - lib/druid/nested_elements.rb
250
258
  - lib/druid/page_factory.rb
251
259
  - lib/druid/page_populator.rb
260
+ - lib/druid/sections.rb
252
261
  - lib/druid/version.rb
253
262
  - spec/druid/accessors_spec.rb
254
263
  - spec/druid/druid_spec.rb
255
264
  - spec/druid/element_locators_spec.rb
256
265
  - spec/druid/elements/area_spec.rb
266
+ - spec/druid/elements/bold_spec.rb
257
267
  - spec/druid/elements/button_spec.rb
258
268
  - spec/druid/elements/canvas_spec.rb
259
269
  - spec/druid/elements/check_box_spec.rb
@@ -284,6 +294,7 @@ files:
284
294
  - spec/druid/nested_element_spec.rb
285
295
  - spec/druid/page_factory_spec.rb
286
296
  - spec/druid/page_populator_spec.rb
297
+ - spec/druid/page_section_spec.rb
287
298
  - spec/spec_helper.rb
288
299
  homepage: http://github.com/timsheng/druid
289
300
  licenses:
@@ -313,6 +324,7 @@ test_files:
313
324
  - features/area.feature
314
325
  - features/async.feature
315
326
  - features/audio.feature
327
+ - features/bold.feature
316
328
  - features/button.feature
317
329
  - features/canvas.feature
318
330
  - features/checkbox.feature
@@ -361,6 +373,7 @@ test_files:
361
373
  - features/page_level_actions.feature
362
374
  - features/paragraph.feature
363
375
  - features/radio_button.feature
376
+ - features/radio_button_group.feature
364
377
  - features/sample-app/public/jquery-1.3.2.js
365
378
  - features/sample-app/public/jquery.html
366
379
  - features/sample-app/public/movie.mp4
@@ -368,11 +381,13 @@ test_files:
368
381
  - features/sample-app/public/prototype-1.6.0.3.js
369
382
  - features/sample-app/public/prototype.html
370
383
  - features/sample-app/sample_app.rb
384
+ - features/section.feature
371
385
  - features/select_list.feature
372
386
  - features/span.feature
373
387
  - features/step_definations/area_steps.rb
374
388
  - features/step_definations/async_steps.rb
375
389
  - features/step_definations/audio_steps.rb
390
+ - features/step_definations/bold_steps.rb
376
391
  - features/step_definations/button_steps.rb
377
392
  - features/step_definations/canvas_steps.rb
378
393
  - features/step_definations/checkbox_steps.rb
@@ -396,7 +411,9 @@ test_files:
396
411
  - features/step_definations/page_level_actions_steps.rb
397
412
  - features/step_definations/page_traversal_steps.rb
398
413
  - features/step_definations/paragraph_steps.rb
414
+ - features/step_definations/radio_button_group_steps.rb
399
415
  - features/step_definations/radio_button_steps.rb
416
+ - features/step_definations/section_steps.rb
400
417
  - features/step_definations/select_list_steps.rb
401
418
  - features/step_definations/span_steps.rb
402
419
  - features/step_definations/table_cell_steps.rb
@@ -423,6 +440,7 @@ test_files:
423
440
  - spec/druid/druid_spec.rb
424
441
  - spec/druid/element_locators_spec.rb
425
442
  - spec/druid/elements/area_spec.rb
443
+ - spec/druid/elements/bold_spec.rb
426
444
  - spec/druid/elements/button_spec.rb
427
445
  - spec/druid/elements/canvas_spec.rb
428
446
  - spec/druid/elements/check_box_spec.rb
@@ -453,4 +471,5 @@ test_files:
453
471
  - spec/druid/nested_element_spec.rb
454
472
  - spec/druid/page_factory_spec.rb
455
473
  - spec/druid/page_populator_spec.rb
474
+ - spec/druid/page_section_spec.rb
456
475
  - spec/spec_helper.rb