druid-ts 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -160,6 +160,13 @@ module Druid
160
160
  attribute(:id)
161
161
  end
162
162
 
163
+ #
164
+ # Scroll until the element is viewable
165
+ #
166
+ def scroll_into_view
167
+ element.wd.location_once_scrolled_into_view
168
+ end
169
+
163
170
  #
164
171
  # Flash the element by temporarily changing the background color
165
172
  #
@@ -0,0 +1,73 @@
1
+ module Druid
2
+ module LocatorGenerator
3
+
4
+ def self.generate_locators(target)
5
+ [:text_field,
6
+ :hidden_field,
7
+ :text_area,
8
+ :select_list,
9
+ :link,
10
+ :checkbox,
11
+ :radio_button,
12
+ :button,
13
+ :div,
14
+ :span,
15
+ :table,
16
+ :cell,
17
+ :image,
18
+ :form,
19
+ :list_item,
20
+ :unordered_list,
21
+ :ordered_list,
22
+ :h1,
23
+ :h2,
24
+ :h3,
25
+ :h4,
26
+ :h5,
27
+ :h6,
28
+ :paragraph,
29
+ :label,
30
+ :file_field,
31
+ :area,
32
+ :canvas,
33
+ :audio,
34
+ :video,
35
+ :abbr,
36
+ :address,
37
+ :article,
38
+ :aside,
39
+ :bdi,
40
+ :cite,
41
+ :code,
42
+ :dd,
43
+ :em,
44
+ :figcaption,
45
+ :figure,
46
+ :footer,
47
+ :header,
48
+ :hgroup,
49
+ :kbd,
50
+ :mark,
51
+ :nav,
52
+ :noscript,
53
+ :rp,
54
+ :rt,
55
+ :ruby,
56
+ :samp,
57
+ :section,
58
+ :sub,
59
+ :summary,
60
+ :sup,
61
+ :var,
62
+ :wbr].each do |tag|
63
+ target.send(:define_method, "#{tag.to_s}_element") do |*identifier|
64
+ self.send "#{tag.to_s}_for", locator(identifier).clone
65
+ end
66
+
67
+ target.send(:define_method, "#{tag.to_s}_elements") do |*identifier|
68
+ self.send "#{tag.to_s}s_for", identifier[0] ? identifier[0].clone : {}
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,239 +1,56 @@
1
+ require 'druid/locator_generator'
2
+
1
3
  module Druid
2
4
  module NestedElements
3
- def link_element(identifier={:index => 0})
4
- link_for(identifier)
5
- end
6
-
7
- def link_elements(identifier={:index => 0})
8
- links_for(identifier)
9
- end
10
-
11
- def button_element(identifier={:index => 0})
12
- button_for(identifier)
13
- end
14
-
15
- def button_elements(identifier={:index => 0})
16
- buttons_for(identifier)
17
- end
18
-
19
- def text_field_element(identifier={:index => 0})
20
- text_field_for(identifier)
21
- end
22
-
23
- def text_field_elements(identifier={:index => 0})
24
- text_fields_for(identifier)
25
- end
26
-
27
- def hidden_field_element(identifier={:index => 0})
28
- hidden_field_for(identifier)
29
- end
30
-
31
- def hidden_field_elements(identifier={:index => 0})
32
- hidden_fields_for(identifier)
33
- end
34
-
35
- def text_area_element(identifier={:index => 0})
36
- text_area_for(identifier)
37
- end
38
-
39
- def text_area_elements(identifier={:index => 0})
40
- text_areas_for(identifier)
41
- end
42
-
43
- def select_list_element(identifier={:index => 0})
44
- select_list_for(identifier)
45
- end
46
-
47
- def select_list_elements(identifier={:index => 0})
48
- select_lists_for(identifier)
49
- end
50
-
51
- def checkbox_element(identifier={:index => 0})
52
- checkbox_for(identifier)
53
- end
54
-
55
- def checkbox_elements(identifier={:index => 0})
56
- checkboxes_for(identifier)
57
- end
58
-
59
- def radio_button_element(identifier={:index => 0})
60
- radio_button_for(identifier)
61
- end
62
-
63
- def radio_button_elements(identifier={:index => 0})
64
- radio_buttons_for(identifier)
65
- end
66
-
67
- def div_element(identifier={:index => 0})
68
- div_for(identifier)
69
- end
70
-
71
- def div_elements(identifier={:index => 0})
72
- divs_for(identifier)
73
- end
74
-
75
- def span_element(identifier={:index => 0})
76
- span_for(identifier)
77
- end
78
-
79
- def span_elements(identifier={:index => 0})
80
- spans_for(identifier)
81
- end
82
-
83
- def table_element(identifier={:index => 0})
84
- table_for(identifier)
85
- end
86
-
87
- def table_elements(identifier={:index => 0})
88
- tables_for(identifier)
89
- end
90
-
91
- def cell_element(identifier={:index => 0})
92
- cell_for(identifier)
93
- end
94
-
95
- def cell_elements(identifier={:index => 0})
96
- cells_for(identifier)
97
- end
98
-
99
- def image_element(identifier={:index => 0})
100
- image_for(identifier)
101
- end
102
-
103
- def image_elements(identifier={:index => 0})
104
- images_for(identifier)
105
- end
106
-
107
- def form_element(identifier={:index => 0})
108
- form_for(identifier)
109
- end
110
-
111
- def form_elements(identifier={:index => 0})
112
- forms_for(identifier)
113
- end
114
-
115
- def ordered_list_element(identifier={:index => 0})
116
- ordered_list_for(identifier)
117
- end
118
5
 
119
- def ordered_list_elements(identifier={:index => 0})
120
- ordered_lists_for(identifier)
121
- end
122
-
123
- def unordered_list_element(identifier={:index => 0})
124
- unordered_list_for(identifier)
125
- end
126
-
127
- def unordered_list_elements(identifier={:index => 0})
128
- unordered_lists_for(identifier)
129
- end
130
-
131
- def list_item_element(identifier={:index => 0})
132
- list_item_for(identifier)
133
- end
134
-
135
- def list_item_elements(identifier={:index => 0})
136
- list_items_for(identifier)
137
- end
138
-
139
- def h1_element(identifier={:index => 0})
140
- h1_for(identifier)
141
- end
142
-
143
- def h1_elements(identifier={:index => 0})
144
- h1s_for(identifier)
145
- end
146
-
147
- def h2_element(identifier={:index => 0})
148
- h2_for(identifier)
149
- end
150
-
151
- def h2_elements(identifier={:index => 0})
152
- h2s_for(identifier)
153
- end
154
-
155
- def h3_element(identifier={:index => 0})
156
- h3_for(identifier)
157
- end
158
-
159
- def h3_elements(identifier={:index => 0})
160
- h3s_for(identifier)
161
- end
162
-
163
- def h4_element(identifier={:index => 0})
164
- h4_for(identifier)
165
- end
166
-
167
- def h4_elements(identifier={:index => 0})
168
- h4s_for(identifier)
169
- end
170
-
171
- def h5_element(identifier={:index => 0})
172
- h5_for(identifier)
173
- end
174
-
175
- def h5_elements(identifier={:index => 0})
176
- h5s_for(identifier)
177
- end
6
+ def self.included(cls)
7
+ Druid::LocatorGenerator.generate_locators(cls)
8
+ end
9
+
10
+ private
11
+
12
+ def locator(identifier)
13
+ identifier[0] ? identifier[0] : {:index => 0}
14
+ end
15
+
16
+ # [:text_field,
17
+ # :hidden_field,
18
+ # :text_area,
19
+ # :select_list,
20
+ # :link,
21
+ # :checkbox,
22
+ # :radio_button,
23
+ # :button,
24
+ # :div,
25
+ # :span,
26
+ # :table,
27
+ # :cell,
28
+ # :image,
29
+ # :form,
30
+ # :list_item,
31
+ # :unordered_list,
32
+ # :ordered_list,
33
+ # :h1,
34
+ # :h2,
35
+ # :h3,
36
+ # :h4,
37
+ # :h5,
38
+ # :h6,
39
+ # :paragraph,
40
+ # :label,
41
+ # :file_field,
42
+ # :area,
43
+ # :canvas,
44
+ # :audio,
45
+ # :video].each do |tag|
46
+ # define_method("#{tag.to_s}_element") do |*identifier|
47
+ # self.send "#{tag.to_s}_for", locator(identifier)
48
+ # end
49
+ #
50
+ # define_method("#{tag.to_s}_elements") do |*identifier|
51
+ # self.send "#{tag.to_s}s_for", locator(identifier)
52
+ # end
53
+ # end
178
54
 
179
- def h6_element(identifier={:index => 0})
180
- h6_for(identifier)
181
- end
182
-
183
- def h6_elements(identifier={:index => 0})
184
- h6s_for(identifier)
185
- end
186
-
187
- def paragraph_element(identifier={:index => 0})
188
- paragraph_for(identifier)
189
- end
190
-
191
- def paragraph_elements(identifier={:index => 0})
192
- paragraphs_for(identifier)
193
- end
194
-
195
- def file_field_element(identifier={:index => 0})
196
- file_field_for(identifier)
197
- end
198
-
199
- def label_element(identifier={:index => 0})
200
- label_for(identifier)
201
- end
202
-
203
- def label_elements(identifier={:index => 0})
204
- labels_for(identifier)
205
- end
206
-
207
- def area_element(identifier={:index => 0})
208
- area_for(identifier)
209
- end
210
-
211
- def area_elements(identifier={:index => 0})
212
- areas_for(identifier)
213
- end
214
-
215
- def canvas_element(identifier={:index => 0})
216
- canvas_for(identifier)
217
- end
218
-
219
- def canvas_elements(identifier={:index => 0})
220
- canvases_for(identifier)
221
- end
222
-
223
- def audio_element(identifier={:index => 0})
224
- audio_for(identifier)
225
- end
226
-
227
- def audio_elements(identifier={:index => 0})
228
- audios_for(identifier)
229
- end
230
-
231
- def video_element(identifier={:index => 0})
232
- video_for(identifier)
233
- end
234
-
235
- def video_elements(identifier={:index => 0})
236
- videos_for(identifier)
237
- end
238
55
  end
239
56
  end
@@ -25,8 +25,10 @@ module Druid
25
25
  # @example Example routes defined in env.rb
26
26
  # Druid::PageFactory.routes = {
27
27
  # :default => [[PageOne,:method1], [PageTwoA,:method2], [PageThree,:method3],
28
- # :another_route => [[PageOne,:method1], [PageTwoB,:method2b], [PageThree,:method3]]
28
+ # :another_route => [[PageOne,:method1,"arg1"], [PageTwoB,:method2b], [PageThree,:method3]]
29
29
  # }
30
+ # Notice the first entry of :another_route is passing an argument
31
+ # to the method
30
32
  # You must also call the navigation_method on each page.
31
33
  module PageFactory
32
34
  # attr_accessor :page
@@ -154,10 +156,11 @@ module Druid
154
156
  end
155
157
 
156
158
  def navigate_through_pages(pages)
157
- pages.each do |cls, method|
159
+ pages.each do |cls, method, *args|
158
160
  page = on_page(cls)
159
- fail("Navigation method not specified on #{cls}. Please call the ") unless page.respond_to? method
160
- page.send method
161
+ fail("Navigation method not specified on #{cls}.") unless page.respond_to? method
162
+ page.send method unless args
163
+ page.send method, *args if args
161
164
  end
162
165
  end
163
166
 
@@ -1,3 +1,3 @@
1
1
  module Druid
2
- VERSION = "1.1.6"
2
+ VERSION = "1.1.7"
3
3
  end
@@ -190,7 +190,7 @@ describe Druid::Accessors do
190
190
  end
191
191
 
192
192
  it "should raise error when it does not have expected title" do
193
- expect(driver).to receive(:title).twice.and_return("Not Expected")
193
+ expect(driver).to receive(:title).and_return("Not Expected")
194
194
  expect {druid.has_expected_title? }.to raise_error
195
195
  end
196
196
  end
@@ -484,6 +484,17 @@ describe Druid::Accessors do
484
484
  expect(driver).to receive(:select_list)
485
485
  expect(druid.state_element).to be_instance_of Druid::Elements::SelectList
486
486
  end
487
+
488
+ it "should return list of selection options" do
489
+ option1 = double('option')
490
+ option2 = double('option')
491
+ expect(option1).to receive(:text).and_return("CA")
492
+ expect(option2).to receive(:text).and_return('OH')
493
+ select_element = double("select")
494
+ expect(select_element).to receive(:options).twice.and_return([option1,option2])
495
+ expect(druid).to receive(:state_element).and_return(select_element)
496
+ expect(druid.state_options).to eql ["CA","OH"]
497
+ end
487
498
  end
488
499
  end
489
500
 
@@ -634,7 +645,7 @@ describe Druid::Accessors do
634
645
  end
635
646
 
636
647
  it "should call a block on the element method when present" do
637
- expect(block_druid.total_cell).to eql "cell"
648
+ expect(block_druid.total_element).to eql "cell"
638
649
  end
639
650
  end
640
651
 
@@ -582,15 +582,15 @@ describe Druid::ElementLocators do
582
582
  page.label_elements
583
583
  end
584
584
 
585
- it "should find an element" do
585
+ it "should find an audio element" do
586
586
  expect(driver).to receive(:audio).with(:id => 'blah').and_return(driver)
587
- element = page.element(:audio, :id => 'blah')
588
- expect(element).to be_instance_of Druid::Elements::Element
587
+ element = page.audio_element(:id => 'blah')
588
+ expect(element).to be_instance_of Druid::Elements::Audio
589
589
  end
590
590
 
591
- it "should find an element using a default identifier" do
591
+ it "should find an audio element using a default identifier" do
592
592
  expect(driver).to receive(:audio).with(:index => 0).and_return(driver)
593
- page.element(:audio)
593
+ page.audio_element
594
594
  end
595
595
 
596
596
  it "should find an area element" do