druid-ts 1.1.5 → 1.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 27a03ffe5425a835025a1c02f08ef841cbd92c8e
4
- data.tar.gz: 170750f300df8637c4f852a5cca633c807cda376
3
+ metadata.gz: 69f2f0968bdcb0f4b0bf3bc82c40747118a2b2c8
4
+ data.tar.gz: d7e98d748da74a8936534b3a4b3a3b628130ff80
5
5
  SHA512:
6
- metadata.gz: 275f0bb2a55c1c8be2cc5b65caf00f2e979b9ce35fd32037ab843e6466226c08112faaed5c46028994d1021846ca842d5510ece3a30734977fdaf4ef419e1c65
7
- data.tar.gz: 32f20dcb1f4c488119a9b7ea3fc0f4714c58b91064d967a748c05adcb3134266595d0a0a8104f7f97f320e9a2f9139ea463358655411fef03b8acc6215c2685a
6
+ metadata.gz: a2b3000474fb1dc3ec20bc53e8bf452e49f90ef3d7cece31bd309136bb6e6dff6c7319bdecdbfb98598b7baa5a0fd83f56b4d46882ec8200bdf90a925fd8a17b
7
+ data.tar.gz: 84203743b392fd02051531e63209dc6581d83e6830995d091b9f8ef7a35cdcfe6bd8e25aec3c95b4a8cf5f7c65d994aff373d622f7d0631a4573e2a9d1e4fc2a
data/ChangeLog CHANGED
@@ -1,6 +1,20 @@
1
+ === 2017-01-13
2
+ * Enhancement
3
+ * Added callback to initialize_accessors method during initialization
4
+ * Added html method to Element
5
+ * Added generated method to return text for a table
6
+ * Added generated method to return text for an unordered list
7
+ * Added generated method to return text for an ordered list
8
+ === 2017-01-09
9
+ * Enhancement
10
+ * Added params class instance variable to hold hash values that can be used in the page
11
+ * Added ability to insert ERB into page_url string and have it access params
12
+ * Fixes
13
+ * Fixed issue when passing symbol to page_url and calling multiple times
1
14
  === 2017-01-03
2
15
  * Enhancement
3
16
  * Added selected_values method to SelectList to get values of all selected elements
17
+ * Added ability to pass classname as string to visit_page, on_page, and if_page methods
4
18
  === Version v1.1.5/ 2016-12-31
5
19
  * Enhancement
6
20
  * Added method to get the id of an Element
@@ -20,6 +20,7 @@ Feature: Elements
20
20
  Then I should know it exists
21
21
  And I should know it is visible
22
22
  And I should know its' text is "Google Search"
23
+ And I should know the html is "<a href="success.html" id="link_id" name="link_name" class="link_class" title="link_title">Google Search</a>"
23
24
  And I should know it is equal to itself
24
25
  And I should know its' tag name is "a"
25
26
  And I should know the attribute "readonly" is false
@@ -92,6 +92,9 @@
92
92
  <td>Data3</td>
93
93
  <td>Data4</td>
94
94
  </tr>
95
+ <tr>
96
+ <td>Data5</td>
97
+ </tr>
95
98
  </tbody>
96
99
  </table>
97
100
 
@@ -40,3 +40,8 @@ Feature: Ordered list
40
40
  Then I should see that the ordered list exists
41
41
  When I get the first item from the list
42
42
  Then the list items text should be "Number One"
43
+
44
+ Scenario: Getting the text for an ordered list
45
+ Then the text for the ordered list should contain "Number One"
46
+ And the text for the ordered list should contain "Number Two"
47
+ And the text for the ordered list should contain "Number Three"
@@ -130,3 +130,7 @@ end
130
130
  Then(/^I should know its id is "([^"]*)"$/) do |id|
131
131
  expect(@element.id).to eql id
132
132
  end
133
+
134
+ Then(/^I should know the html is "(.*)"$/) do |html|
135
+ expect(@element.html).to eql html
136
+ end
@@ -43,3 +43,7 @@ end
43
43
  Then(/^I should see that the ordered list exists$/) do
44
44
  expect(@page.ol_id?).to be true
45
45
  end
46
+
47
+ Then(/^the text for the ordered list should contain "([^"]*)"$/) do |text|
48
+ expect(@page.send("ol_id")).to include text
49
+ end
@@ -75,3 +75,7 @@ end
75
75
  When(/^I retrieve a table with thead element$/) do
76
76
  @element = @page.table_with_thead_id_element
77
77
  end
78
+
79
+ Then(/^I should see the text includes "([^"]*)" when I retrieve it by "([^"]*)"$/) do |text, how|
80
+ expect(@page.send("table_#{how}")).to include text
81
+ end
@@ -21,3 +21,7 @@ end
21
21
  Then(/^I should see that the unordered list exists$/) do
22
22
  expect(@page.ul_id?).to be true
23
23
  end
24
+
25
+ Then(/^the text for the unordered list should contain "([^"]*)"$/) do |text|
26
+ expect(@page.send("ul_id")).to include text
27
+ end
@@ -45,6 +45,11 @@ Feature: Table
45
45
  Scenario: Retrieve data from a table with an incorrect column header
46
46
  When I retrieve a table element
47
47
  Then the data for row "Data3" and column "Data20" should be nil
48
+
49
+ Scenario: Retrieve data from a table that does not have a cell which corresponds to a column header
50
+ When I retrieve a table with thead element
51
+ Then the data for row "Data5" and column "Col2" should be nil
52
+
48
53
  @name
49
54
  Scenario Outline: Locating table cells on the Page
50
55
  When I retrieve a table element by "<locate_by>"
@@ -92,3 +97,7 @@ Feature: Table
92
97
  Scenario: Retrieve data from the first row of a table with a thead using a column header
93
98
  When I retrieve a table with thead element
94
99
  Then the data for column "Col1" and row "1" should be "Col1"
100
+
101
+ Scenario: Getting the text from a table
102
+ Then I should see the text includes "Data1" when I retrieve it by "id"
103
+ And I should see the text includes "Data2" when I retrieve it by "id"
@@ -41,3 +41,8 @@ Feature: Unordered list
41
41
  Then I should see that the unordered list exists
42
42
  When I get the first item from the list
43
43
  Then the list items text should be "Item One"
44
+
45
+ Scenario: Getting the text from an unordered list
46
+ Then the text for the unordered list should contain "Item One"
47
+ And the text for the unordered list should contain "Item Two"
48
+ And the text for the unordered list should contain "Item Three"
data/lib/druid.rb CHANGED
@@ -43,13 +43,15 @@ module Druid
43
43
  # @return [Watir::Browser] the drvier passed to the constructor
44
44
  attr_reader :driver
45
45
  #
46
- # Construct a new druid. Upon initialization of the page it will call a method named
47
- # initialize_page if it exists
46
+ # Construct a new druid. Prior to browser initialization it will call
47
+ # a method named initialize_accessors if it exists. Upon initialization of
48
+ # the page it will call a method named initialize_page if it exists
48
49
  #
49
50
  # @param [Watir::Browser] the driver to use
50
51
  # @param [bool] open the page if page_url is set
51
52
  #
52
53
  def initialize(driver, visit=false)
54
+ initialize_accessors if respond_to?(:initialize_accessors)
53
55
  if driver.is_a? Watir::Browser
54
56
  @driver ||= driver
55
57
  goto if visit && respond_to?(:goto)
@@ -1,4 +1,5 @@
1
1
  require 'druid/elements'
2
+ require 'erb'
2
3
 
3
4
  module Druid
4
5
  #
@@ -7,6 +8,25 @@ module Druid
7
8
  # set of methods that provide access to the elements on the web pages.
8
9
  #
9
10
  module Accessors
11
+
12
+ #
13
+ # Set some values that can be used withing the class. This is
14
+ # typically used to provided values that help build dynamic urls in
15
+ # the page_url method
16
+ #
17
+ # @param [Hash] the value to set the params
18
+ #
19
+ def params=(the_params)
20
+ @params = the_params
21
+ end
22
+
23
+ #
24
+ # Return the params that exist on this page class
25
+ #
26
+ def params
27
+ @params ||= {}
28
+ end
29
+
10
30
  #
11
31
  # Specify the url for the page. A call to this method will generate a
12
32
  # 'goto' method to take you to the page.
@@ -16,8 +36,11 @@ module Druid
16
36
  #
17
37
  def page_url(url)
18
38
  define_method("goto") do
19
- url = url.kind_of?(Symbol) ? self.send(url) : url
20
- driver.goto url
39
+ lookup = url.kind_of?(Symbol) ? self.send(url) : url
40
+ erb = ERB.new(%Q{#{lookup}})
41
+ merged_params = self.class.instance_variable_get("@merged_params")
42
+ params = merged_params ? merged_params : self.class.params
43
+ driver.goto erb.result(binding)
21
44
  end
22
45
  end
23
46
  alias_method :direct_url, :page_url
@@ -408,12 +431,13 @@ module Druid
408
431
  end
409
432
 
410
433
  #
411
- # adds two methods - one to retrieve the table element, and another to
434
+ # adds three methods - one to retrieve the text for the table, one
435
+ # to retrieve the table element, and another to
412
436
  # check the table's existence.
413
437
  #
414
438
  # @example
415
439
  # table(:cart, :id => 'shopping_cart')
416
- # # will generate a 'cart_element' and 'cart?' method
440
+ # # will generate a 'cart', 'cart_element' and 'cart?' method
417
441
  #
418
442
  # @param the name used for the generated methods
419
443
  # @param identifier how we find a table. You can use a multiple parameters
@@ -426,6 +450,10 @@ module Druid
426
450
  # @param optional block to be invoked when element method is called
427
451
  #
428
452
  def table(name, identifier={:index => 0}, &block)
453
+ define_method(name) do
454
+ return table_text_for identifier.clone unless block_given?
455
+ self.send("#{name}_element").text
456
+ end
429
457
  define_method("#{name}_element") do
430
458
  return call_block(&block) if block_given?
431
459
  table_for(identifier.clone)
@@ -657,12 +685,13 @@ module Druid
657
685
  alias_method :li, :list_item
658
686
 
659
687
  #
660
- # adds two methods - one to retrieve the ordered list element, and another to
688
+ # adds three methods - one to return the text within the ordered
689
+ # list, one to retrieve the ordered list element, and another to
661
690
  # test it's existence.
662
691
  #
663
692
  # @example
664
693
  # ordered_list(:top_five, :id => 'top')
665
- # # will generate 'top_five_element' and 'top_five?' methods
694
+ # # will generate 'top_five' 'top_five_element' and 'top_five?' methods
666
695
  #
667
696
  # @param [Symbol] the name used for the generated methods
668
697
  # @param [Hash] identifier how we find an ordered list. You can use a multiple parameters
@@ -675,6 +704,10 @@ module Druid
675
704
  # @param optional block to be invoked when element method is called
676
705
  #
677
706
  def ordered_list(name, identifier={:index => 0}, &block)
707
+ define_method(name) do
708
+ return ordered_list_text_for identifier.clone unless block_given?
709
+ self.send("#{name}_element").text
710
+ end
678
711
  define_method("#{name}_element") do
679
712
  return call_block(&block) if block_given?
680
713
  ordered_list_for(identifier.clone)
@@ -731,12 +764,12 @@ module Druid
731
764
  alias_method :textarea, :text_area
732
765
 
733
766
  #
734
- # adds two methods - one to retrieve the unordered list element, and another to
735
- # check it's existence.
767
+ # adds three methods - one to return the text of unordered list, another one
768
+ # retrieve the unordered list element, and another to check it's existence.
736
769
  #
737
770
  # @example
738
771
  # unordered_list(:menu, :id => 'main_menu')
739
- # # will generate 'menu_element' and 'menu?' methods
772
+ # # will generate 'menu' 'menu_element' and 'menu?' methods
740
773
  #
741
774
  # @param [Symbol] the name used for the generated methods
742
775
  # @param [Hash] identifier how we find an unordered list. You can use a multiple parameters
@@ -748,6 +781,10 @@ module Druid
748
781
  # * :name
749
782
  # @param optional block to be invoked when element method is called
750
783
  def unordered_list(name, identifier={:index => 0}, &block)
784
+ define_method(name) do
785
+ return unordered_list_text_for identifier.clone unless block_given?
786
+ self.send("#{name}_element").text
787
+ end
751
788
  define_method("#{name}_element") do
752
789
  return call_block(&block) if block_given?
753
790
  unordered_list_for(identifier.clone)
data/lib/druid/assist.rb CHANGED
@@ -129,6 +129,13 @@ module Druid
129
129
  find_elements("divs(identifier)", Elements::Div, identifier, 'div')
130
130
  end
131
131
 
132
+ #
133
+ # method to return the text for a table
134
+ #
135
+ def table_text_for(identifier)
136
+ process_call("table(identifier).text", Elements::Table, identifier, nil, 'table')
137
+ end
138
+
132
139
  def table_for identifier
133
140
  find_element("table(identifier)", Elements::Table, identifier, 'table')
134
141
  end
@@ -222,6 +229,13 @@ module Druid
222
229
  find_elements("lis(identifier)", Elements::ListItem, identifier, 'li')
223
230
  end
224
231
 
232
+ #
233
+ # method to retrieve the text from an ordered list
234
+ #
235
+ def ordered_list_text_for(identifier)
236
+ process_call("ol(identifier).text", Elements::OrderedList, identifier, nil, 'ol')
237
+ end
238
+
225
239
  def ordered_list_for identifier
226
240
  find_element("ol(identifier)", Elements::OrderedList, identifier, 'ol')
227
241
  end
@@ -250,6 +264,13 @@ module Druid
250
264
  find_elements("textareas(identifier)", Elements::TextArea, identifier)
251
265
  end
252
266
 
267
+ #
268
+ # method to retrieve the text from an unordered list
269
+ #
270
+ def unordered_list_text_for(identifier)
271
+ process_call("ul(identifier).text", Elements::UnOrderedList, identifier, nil, 'ul')
272
+ end
273
+
253
274
  def unordered_list_for identifier
254
275
  find_element("ul(identifier)", Elements::UnOrderedList, identifier, 'ul')
255
276
  end
@@ -44,6 +44,15 @@ module Druid
44
44
  element.visible?
45
45
  end
46
46
 
47
+ #
48
+ # Get the html for the element
49
+ #
50
+ # @return [String]
51
+ #
52
+ def html
53
+ element.html
54
+ end
55
+
47
56
  #
48
57
  # Get the value of this element
49
58
  #
@@ -9,7 +9,7 @@ module Druid
9
9
  #
10
10
  def [](idx)
11
11
  idx = find_index_by_title(idx) if idx.kind_of?(String)
12
- return nil unless idx
12
+ return nil unless idx && columns >= idx + 1
13
13
  Druid::Elements::TableCell.new(element[idx])
14
14
  end
15
15
  #
@@ -34,11 +34,14 @@ module Druid
34
34
  # Create and navigate to a page object. The navigation will only work if the
35
35
  # 'page_url' method was call on the page object.
36
36
  #
37
- # @param [page_class] a class that has included the Druid module
37
+ # @param [PageObject, String] a class that has included the Druid module or a string containing the name of the class
38
38
  # @param an optional block to be called
39
39
  # @return [PageObject] the newly created page object
40
40
  #
41
- def visit_page(page_class, &block)
41
+ def visit_page(page_class, params={:using_params => {}}, &block)
42
+ page_class = class_from_string(page_class) if page_class.is_a? String
43
+ merged = page_class.params.merge(params[:using_params])
44
+ page_class.instance_variable_set("@merged_params", merged) unless merged.empty?
42
45
  on_page page_class, true, &block
43
46
  end
44
47
 
@@ -47,12 +50,13 @@ module Druid
47
50
  #
48
51
  # Create a page object.
49
52
  #
50
- # @param [page_class] a class that has included the Druid module
53
+ # @param [PageObject, String] a class that has included the Druid module or a string containing the name of the class
51
54
  # @param [Bool] should the page be visited? default is false.
52
55
  # @param an optional block to be called
53
56
  # @return [PageObject] the newly created page object
54
57
  #
55
58
  def on_page(page_class, visit=false, &block)
59
+ page_class = class_from_string(page_class) if page_class.is_a? String
56
60
  @current_page = page_class.new(@driver, visit)
57
61
  block.call @current_page if block
58
62
  @current_page
@@ -73,12 +77,13 @@ module Druid
73
77
  # page.save
74
78
  # end
75
79
  # if_page EditProduct do |page|
76
- # page.update
80
+ # page.update
77
81
  # end
78
- # @param [PageObject] a class that has included the Druid module
82
+ # @param [PageObject, String] a class that has included the Druid module or a string containing the name of the class
79
83
  # @param [block] an optional block to be called
80
84
  # @return [PageObject] the newly created page object
81
85
  def if_page(page_class, &block)
86
+ page_class = class_from_string(page_class) if page_class.is_a? String
82
87
  return @current_page unless @current_page.class == page_class
83
88
  on_page(page_class, false, &block)
84
89
  end
@@ -136,6 +141,12 @@ module Druid
136
141
 
137
142
  private
138
143
 
144
+ def class_from_string(str)
145
+ str.split('::').inject(Object) do |mod, class_name|
146
+ mod.const_get(class_name)
147
+ end
148
+ end
149
+
139
150
  def path_for(how)
140
151
  path = Druid::PageFactory.page_object_routes[how[:using]]
141
152
  fail("PageFactory route :#{how[:using].to_s} not found") unless path
data/lib/druid/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Druid
2
- VERSION = "1.1.5"
2
+ VERSION = "1.1.6"
3
3
  end
@@ -149,12 +149,18 @@ describe Druid::Accessors do
149
149
  class SymbolPageUrl
150
150
  include Druid
151
151
  page_url :custom_url
152
- def custom_url
153
- 'custom'
152
+
153
+ attr_reader :custom_url
154
+
155
+ def initialize(d, v, url)
156
+ @custom_url = url
157
+ super(d, v)
154
158
  end
155
159
  end
156
160
  expect(driver).to receive(:goto).with("custom")
157
- SymbolPageUrl.new(driver, true)
161
+ SymbolPageUrl.new(driver, true, 'custom')
162
+ expect(driver).to receive(:goto).with('different')
163
+ SymbolPageUrl.new(driver, true, 'different')
158
164
  end
159
165
 
160
166
  it "should not navigate to a page when not requested" do
@@ -8,6 +8,68 @@ describe Druid do
8
8
  let(:driver) { mock_driver }
9
9
  let(:druid) { TestDruid.new(driver) }
10
10
 
11
+ context "setting values on the Druid module" do
12
+ it "should set the javascript framework" do
13
+ expect(Druid::JavascriptFrameworkFacade).to receive(:framework=)
14
+ Druid.javascript_framework = :foo
15
+ end
16
+
17
+ it "should add the javascript framework" do
18
+ expect(Druid::JavascriptFrameworkFacade).to receive(:add_framework)
19
+ Druid.add_framework(:foo, :bar)
20
+ end
21
+
22
+ it "should set a default page wait value" do
23
+ Druid.default_page_wait = 20
24
+ wait = Druid.instance_variable_get("@page_wait")
25
+ expect(wait).to eql 20
26
+ end
27
+
28
+ it "should provide the default page wait value" do
29
+ Druid.instance_variable_set("@page_wait", 10)
30
+ expect(Druid.default_page_wait).to eql 10
31
+ end
32
+
33
+ it "should default the page wait value to 30" do
34
+ Druid.instance_variable_set("@page_wait", nil)
35
+ expect(Druid.default_page_wait).to eql 30
36
+ end
37
+
38
+ it "should set the default element wait value" do
39
+ Druid.default_element_wait = 20
40
+ wait = Druid.instance_variable_get("@element_wait")
41
+ expect(wait).to eql 20
42
+ end
43
+
44
+ it "should provide the default element wait value" do
45
+ Druid.instance_variable_set("@element_wait", 10)
46
+ expect(Druid.default_element_wait).to eql 10
47
+ end
48
+
49
+ it "should default the element wait to 5" do
50
+ Druid.instance_variable_set("@element_wait", nil)
51
+ expect(Druid.default_element_wait).to eql 5
52
+ end
53
+ end
54
+
55
+ context "setting values on the Druid class instance" do
56
+ it "should set the params value" do
57
+ TestDruid.params = {:some => :value}
58
+ params = TestDruid.instance_variable_get("@params")
59
+ expect(params[:some]).to eql :value
60
+ end
61
+
62
+ it "should provide the params value" do
63
+ TestDruid.instance_variable_set("@params", {:value => :updated})
64
+ expect(TestDruid.params[:value]).to eql :updated
65
+ end
66
+
67
+ it "should default the params to an empty hash" do
68
+ TestDruid.instance_variable_set("@params", nil)
69
+ expect(TestDruid.params).to eql Hash.new
70
+ end
71
+ end
72
+
11
73
  context "when created with a watir-webdriver browser" do
12
74
  it "should include the Druid module" do
13
75
  expect(druid).to be_kind_of Druid
@@ -127,15 +189,47 @@ describe Druid do
127
189
  it "should call intialize_page if it exists" do
128
190
  class CallbackPage
129
191
  include Druid
130
- attr_reader :initialize_page
192
+ attr_reader :initialize_page_called
131
193
 
132
194
  def initialize_page
133
- @initialize_page = true
195
+ @initialize_page_called = true
134
196
  end
135
197
  end
136
198
 
137
199
  page = CallbackPage.new(driver)
138
- expect(page.initialize_page).to be true
200
+ expect(page.initialize_page_called).to be true
201
+ end
202
+
203
+ it "should call initialize_accessors if it exists" do
204
+ class CallbackPage
205
+ include Druid
206
+ attr_reader :initialize_accessors_called
207
+
208
+ def initialize_accessors
209
+ @initialize_accessors_called = true
210
+ end
211
+ end
212
+
213
+ @page = CallbackPage.new(driver)
214
+ expect(@page.initialize_accessors_called).to be true
215
+ end
216
+
217
+ it "should call initialize_accessors before initialize_page if both exist" do
218
+ class CallbackPage
219
+ include Druid
220
+ attr_reader :initialize_page, :initialize_accessors
221
+
222
+ def initialize_page
223
+ @initialize_page = Time.now
224
+ end
225
+
226
+ def initialize_accessors
227
+ @initialize_accessors = Time.now
228
+ end
229
+ end
230
+
231
+ @page = CallbackPage.new(driver)
232
+ expect(@page.initialize_accessors.usec).to be < @page.initialize_page.usec
139
233
  end
140
234
 
141
235
  it "should convert a modal popup to a window" do
@@ -166,16 +260,6 @@ describe Druid do
166
260
  druid.wait_for_ajax
167
261
  end
168
262
 
169
- it "should set the javascript framework" do
170
- expect(Druid::JavascriptFrameworkFacade).to receive(:framework=)
171
- Druid.javascript_framework = :foo
172
- end
173
-
174
- it "should add the javascript framework" do
175
- expect(Druid::JavascriptFrameworkFacade).to receive(:add_framework)
176
- Druid.add_framework(:foo, :bar)
177
- end
178
-
179
263
  it "should execute javascript on the browser" do
180
264
  expect(driver).to receive(:execute_script).and_return("abc")
181
265
  expect(druid.execute_script("333")).to eql "abc"
@@ -15,6 +15,7 @@ describe Druid::Elements::TableRow do
15
15
  let(:table_row) { Druid::Elements::TableRow.new(element) }
16
16
 
17
17
  it "should return a table cell when indexed" do
18
+ allow(table_row).to receive(:columns).and_return(2)
18
19
  expect(element).to receive(:[]).with(1)
19
20
  expect(table_row[1]).to be_instance_of Druid::Elements::TableCell
20
21
  end
@@ -19,6 +19,13 @@ class YetAnotherPage
19
19
  include Druid
20
20
  end
21
21
 
22
+ module ContainingModule
23
+ class PageInsideModule
24
+ include Druid
25
+ page_url "http://google.co.uk"
26
+ end
27
+ end
28
+
22
29
  class TestWorld
23
30
  include Druid::PageFactory
24
31
 
@@ -26,7 +33,6 @@ class TestWorld
26
33
  attr_accessor :current_page
27
34
  end
28
35
 
29
-
30
36
  describe Druid::PageFactory do
31
37
 
32
38
  let(:world) { TestWorld.new }
@@ -40,6 +46,12 @@ describe Druid::PageFactory do
40
46
  world.on_page FactoryTestDruid do |page|
41
47
  expect(page).to be_instance_of FactoryTestDruid
42
48
  end
49
+ world.on_page "FactoryTestDruid" do |page|
50
+ expect(page).to be_instance_of FactoryTestDruid
51
+ end
52
+ world.on_page "ContainingModule::PageInsideModule" do |page|
53
+ expect(page).to be_instance_of ContainingModule::PageInsideModule
54
+ end
43
55
  end
44
56
 
45
57
  it "should create a new page object and execute a block using 'on'" do
@@ -47,20 +59,65 @@ describe Druid::PageFactory do
47
59
  world.on FactoryTestDruid do |page|
48
60
  expect(page).to be_instance_of FactoryTestDruid
49
61
  end
62
+ world.on "FactoryTestDruid" do |page|
63
+ expect(page).to be_instance_of FactoryTestDruid
64
+ end
65
+ world.on "ContainingModule::PageInsideModule" do |page|
66
+ expect(page).to be_instance_of ContainingModule::PageInsideModule
67
+ end
50
68
  end
51
69
 
52
70
  it "should create and visit a new page" do
53
- expect(driver).to receive(:goto)
71
+ expect(driver).to receive(:goto).exactly(3).times
54
72
  world.visit_page FactoryTestDruid do |page|
55
73
  expect(page).to be_instance_of FactoryTestDruid
56
74
  end
75
+ world.visit_page "FactoryTestDruid" do |page|
76
+ expect(page).to be_instance_of FactoryTestDruid
77
+ end
78
+ world.visit_page "ContainingModule::PageInsideModule" do |page|
79
+ expect(page).to be_instance_of ContainingModule::PageInsideModule
80
+ end
57
81
  end
58
82
 
59
- it "should create and visit a new page using 'visit'" do
83
+ it "should merge params with the class level params if provided when visiting" do
60
84
  expect(driver).to receive(:goto)
85
+ FactoryTestDruid.params = {:initial => :value}
86
+ world.visit_page(FactoryTestDruid, :using_params => {:new_value => :merged})
87
+ merged = FactoryTestDruid.instance_variable_get("@merged_params")
88
+ expect(merged[:initial]).to eql :value
89
+ expect(merged[:new_value]).to eql :merged
90
+ end
91
+
92
+ it "should use the params in the url when they are provided" do
93
+ class PageUsingParams
94
+ include Druid
95
+ page_url "http://google.com/<%=params[:value]%>"
96
+ end
97
+ expect(driver).to receive(:goto).with("http://google.com/Druid")
98
+ world.visit_page(PageUsingParams, :using_params => {:value => 'Druid'})
99
+ end
100
+
101
+ it "should use the params as well as interpolated values" do
102
+ class PageUsingParamsAndInterpolated
103
+ include Druid
104
+ page_url "http://google.com/#{1+2}/<%=params[:value]%>"
105
+ end
106
+ expect(driver).to receive(:goto).with("http://google.com/3/Druid")
107
+ world.visit_page(PageUsingParamsAndInterpolated, :using_params => {:value => 'Druid'})
108
+ end
109
+
110
+ it "should create and visit a new page using 'visit'" do
111
+ expect(driver).to receive(:goto).exactly(3).times
61
112
  world.visit FactoryTestDruid do |page|
62
113
  expect(page).to be_instance_of FactoryTestDruid
63
114
  end
115
+ world.visit "FactoryTestDruid" do |page|
116
+ expect(page).to be_instance_of FactoryTestDruid
117
+ end
118
+ world.visit "ContainingModule::PageInsideModule" do |page|
119
+ expect(page).to be_instance_of ContainingModule::PageInsideModule
120
+ end
64
121
  end
65
122
 
66
123
  it "should create and visit a new page when url is defined as 'direct_url'" do
@@ -82,20 +139,44 @@ describe Druid::PageFactory do
82
139
  world.if_page(FactoryTestDruid) do |page|
83
140
  fail
84
141
  end
142
+ world.if_page("FactoryTestDruid") do |page|
143
+ fail
144
+ end
145
+ world.if_page("ContainingModule::PageInsideModule") do |page|
146
+ fail
147
+ end
85
148
  end
86
149
 
87
150
  it "should return the @current_page if asking for another page" do
88
151
  expected = TestPageWithDirectUrl.new(driver)
89
152
  world.instance_variable_set "@current_page", expected
90
153
  expect(world.if_page(FactoryTestDruid)).to be expected
154
+ expect(world.if_page("FactoryTestDruid")).to be expected
155
+ expect(world.if_page("ContainingModule::PageInsideModule")).to be expected
91
156
  end
92
157
 
93
- # it "should execute the block when we ask if it is the correct page" do
94
- # world.instance_variable_set "@current_page", FactoryTestDruid.new(driver)
95
- # world.if_page(FactoryTestDruid) do |page|
96
- # expect(page).to be_instance_of FactoryTestDruid
97
- # end
98
- # end
158
+ it "should execute the block when we ask if it is the correct page" do
159
+ world.instance_variable_set "@current_page", FactoryTestDruid.new(driver)
160
+ done = false
161
+ world.if_page(FactoryTestDruid) do |page|
162
+ expect(page).to be_instance_of FactoryTestDruid
163
+ done = true
164
+ end
165
+ expect(done).to be true
166
+ done = false
167
+ world.if_page("FactoryTestDruid") do |page|
168
+ expect(page).to be_instance_of FactoryTestDruid
169
+ done = true
170
+ end
171
+ expect(done).to be true
172
+ done = false
173
+ world.instance_variable_set "@current_page", ContainingModule::PageInsideModule.new(driver)
174
+ world.if_page("ContainingModule::PageInsideModule") do |page|
175
+ expect(page).to be_instance_of ContainingModule::PageInsideModule
176
+ done = true
177
+ end
178
+ expect(done).to be true
179
+ end
99
180
 
100
181
  it "should raise an error when you do not provide a default route" do
101
182
  expect { Druid::PageFactory.routes = {:another => []} }.to raise_error 'You must provide a :default route for PageFactory routes'
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,6 @@ require "watir-webdriver"
3
3
 
4
4
  def mock_driver
5
5
  driver = double('watir')
6
- expect(driver).to receive(:is_a?).with(Watir::Browser).and_return(true)
6
+ allow(driver).to receive(:is_a?).with(Watir::Browser).and_return(true)
7
7
  driver
8
8
  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.5
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Sheng