druid-ts 1.1.2 → 1.1.3
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 +4 -4
- data/ChangeLog +21 -0
- data/README.md +42 -32
- data/features/button.feature +1 -0
- data/features/element.feature +4 -0
- data/features/generic_elements.feature +24 -0
- data/features/html/multi_elements.html +4 -0
- data/features/html/nested_elements.html +3 -0
- data/features/html/static_elements.html +14 -1
- data/features/javascript.feature +6 -0
- data/features/label.feature +44 -0
- data/features/link.feature +1 -0
- data/features/multi_elements.feature +7 -0
- data/features/nested_elements.feature +4 -0
- data/features/page_level_actions.feature +12 -0
- data/features/select_list.feature +5 -3
- data/features/step_definations/element_steps.rb +14 -0
- data/features/step_definations/generic_element_steps.rb +19 -0
- data/features/step_definations/javasript_steps.rb +8 -0
- data/features/step_definations/label_steps.rb +19 -0
- data/features/step_definations/multi_elements_steps.rb +12 -0
- data/features/step_definations/nested_elements_steps.rb +9 -1
- data/features/step_definations/page_level_actions_steps.rb +17 -0
- data/features/step_definations/select_list_steps.rb +5 -0
- data/features/support/page.rb +21 -0
- data/lib/druid.rb +17 -0
- data/lib/druid/accessors.rb +110 -2
- data/lib/druid/assist.rb +26 -1
- data/lib/druid/element_locators.rb +42 -6
- data/lib/druid/elements.rb +2 -1
- data/lib/druid/elements/button.rb +1 -1
- data/lib/druid/elements/element.rb +1 -1
- data/lib/druid/elements/label.rb +11 -0
- data/lib/druid/elements/link.rb +1 -1
- data/lib/druid/nested_elements.rb +9 -1
- data/lib/druid/page_factory.rb +6 -0
- data/lib/druid/version.rb +1 -1
- data/spec/druid/accessors_spec.rb +48 -4
- data/spec/druid/druid_spec.rb +11 -0
- data/spec/druid/element_locators_spec.rb +12 -0
- data/spec/druid/elements/button_spec.rb +1 -1
- data/spec/druid/elements/label_spec.rb +19 -0
- data/spec/druid/elements/link_spec.rb +1 -1
- data/spec/druid/page_factory_spec.rb +26 -0
- metadata +12 -1
data/lib/druid/elements.rb
CHANGED
@@ -15,7 +15,7 @@ module Druid
|
|
15
15
|
# method to return the element for a tag_name
|
16
16
|
#
|
17
17
|
def element_class_for(tag_name, type=nil)
|
18
|
-
return type_to_class[type] if type
|
18
|
+
return type_to_class[type.to_sym] if type
|
19
19
|
tag_to_class[tag_name.to_sym] || Druid::Elements::Element
|
20
20
|
end
|
21
21
|
end
|
@@ -45,3 +45,4 @@ require 'druid/elements/option.rb'
|
|
45
45
|
require 'druid/elements/heading.rb'
|
46
46
|
require 'druid/elements/paragraph.rb'
|
47
47
|
require 'druid/elements/file_field.rb'
|
48
|
+
require 'druid/elements/label.rb'
|
@@ -35,7 +35,7 @@ module Druid
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.have_to_build_xpath(identifier)
|
38
|
-
['table', 'span', 'div', 'td', 'li', 'ol', 'ul', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p'].include? identifier[:tag_name] and identifier[:name]
|
38
|
+
['table', 'span', 'div', 'td', 'li', 'ol', 'ul', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'label'].include? identifier[:tag_name] and identifier[:name]
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.build_xpath_for identifier
|
data/lib/druid/elements/link.rb
CHANGED
@@ -192,8 +192,16 @@ module Druid
|
|
192
192
|
paragraphs_for(identifier)
|
193
193
|
end
|
194
194
|
|
195
|
-
def file_field_element(identifier={:index =>0})
|
195
|
+
def file_field_element(identifier={:index => 0})
|
196
196
|
file_field_for(identifier)
|
197
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
|
198
206
|
end
|
199
207
|
end
|
data/lib/druid/page_factory.rb
CHANGED
@@ -41,6 +41,9 @@ module Druid
|
|
41
41
|
def visit_page(page_class, &block)
|
42
42
|
on_page page_class, true, &block
|
43
43
|
end
|
44
|
+
|
45
|
+
# Support 'visit' for readability of usage
|
46
|
+
alias_method :visit, :visit_page
|
44
47
|
#
|
45
48
|
# Create a page object.
|
46
49
|
#
|
@@ -55,6 +58,9 @@ module Druid
|
|
55
58
|
@current_page
|
56
59
|
end
|
57
60
|
|
61
|
+
# Support 'on' for readability of usage
|
62
|
+
alias_method :on, :on_page
|
63
|
+
|
58
64
|
#
|
59
65
|
# Navigate to a specific page following a predefined path.
|
60
66
|
#
|
data/lib/druid/version.rb
CHANGED
@@ -4,6 +4,8 @@ class AccessorsTestDruid
|
|
4
4
|
include Druid
|
5
5
|
|
6
6
|
page_url "http://apple.com"
|
7
|
+
expected_title "Expected Title"
|
8
|
+
expected_element :google_search
|
7
9
|
link(:google_search, :link => 'Google Search')
|
8
10
|
text_field(:first_name, :id => 'first_name')
|
9
11
|
select_list(:state, :id => 'state')
|
@@ -124,17 +126,57 @@ describe Druid::Accessors do
|
|
124
126
|
describe "goto a page" do
|
125
127
|
it "should navigate to a page when requested" do
|
126
128
|
expect(driver).to receive(:goto)
|
127
|
-
|
129
|
+
AccessorsTestDruid.new(driver, true)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should call a method when page_url called with a symbol" do
|
133
|
+
class SymbolPageUrl
|
134
|
+
include Druid
|
135
|
+
page_url :custom_url
|
136
|
+
def custom_url
|
137
|
+
'custom'
|
138
|
+
end
|
139
|
+
end
|
140
|
+
expect(driver).to receive(:goto).with("custom")
|
141
|
+
SymbolPageUrl.new(driver, true)
|
128
142
|
end
|
129
143
|
|
130
144
|
it "should not navigate to a page when not requested" do
|
131
145
|
expect(driver).not_to receive(:goto)
|
132
|
-
|
146
|
+
AccessorsTestDruid.new(driver)
|
133
147
|
end
|
134
148
|
|
135
149
|
it "should not navigate to a page when 'page_url' not specified" do
|
136
150
|
expect(driver).not_to receive(:goto)
|
137
|
-
|
151
|
+
TestDruidBackUp.new(driver,true)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "validating the page title" do
|
156
|
+
it "should validate the title" do
|
157
|
+
expect(driver).to receive(:title).and_return("Expected Title")
|
158
|
+
expect(druid).to have_expected_title
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should raise error when it does not have expected title" do
|
162
|
+
expect(driver).to receive(:title).twice.and_return("Not Expected")
|
163
|
+
expect {druid.has_expected_title? }.to raise_error
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe "validating the existence of an element" do
|
168
|
+
it "should validate an element exists" do
|
169
|
+
allow(druid).to receive(:google_search_element).and_return(driver)
|
170
|
+
allow(driver).to receive(:when_present).and_return(true)
|
171
|
+
druid.has_expected_element?
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should handle non-existent elements gracefully" do
|
175
|
+
class FakePage
|
176
|
+
include Druid
|
177
|
+
expected_element :foo
|
178
|
+
end
|
179
|
+
expect(FakePage.new(driver)).not_to have_expected_element
|
138
180
|
end
|
139
181
|
end
|
140
182
|
|
@@ -217,7 +259,9 @@ describe Druid::Accessors do
|
|
217
259
|
|
218
260
|
context "implementation" do
|
219
261
|
it "should get the current item from a select list" do
|
220
|
-
|
262
|
+
allow(driver).to receive(:selected?).and_return(driver)
|
263
|
+
allow(driver).to receive(:text).and_return('OH')
|
264
|
+
expect(driver).to receive_message_chain(:select_list, :options).and_return([driver])
|
221
265
|
expect(druid.state).to eql 'OH'
|
222
266
|
end
|
223
267
|
|
data/spec/druid/druid_spec.rb
CHANGED
@@ -170,6 +170,17 @@ describe Druid do
|
|
170
170
|
Druid.add_framework(:foo, :bar)
|
171
171
|
end
|
172
172
|
|
173
|
+
it "should execute javascript on the browser" do
|
174
|
+
expect(driver).to receive(:execute_script).and_return("abc")
|
175
|
+
expect(druid.execute_script("333")).to eql "abc"
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should know which element has focus" do
|
179
|
+
expect(driver).to receive(:execute_script).and_return(driver)
|
180
|
+
expect(driver).to receive(:tag_name).twice.and_return(:input)
|
181
|
+
expect(driver).to receive(:type).and_return(:submit)
|
182
|
+
expect(druid.element_with_focus.class).to eql Druid::Elements::Button
|
183
|
+
end
|
173
184
|
end
|
174
185
|
end
|
175
186
|
|
@@ -304,4 +304,16 @@ describe Druid::ElementLocators do
|
|
304
304
|
element = page.file_field_element(:id => 'blah')
|
305
305
|
expect(element).to be_instance_of Druid::Elements::FileField
|
306
306
|
end
|
307
|
+
|
308
|
+
it "should find a label" do
|
309
|
+
expect(driver).to receive(:label).with(:id => 'blah').and_return(driver)
|
310
|
+
element = page.label_element(:id => 'blah')
|
311
|
+
expect(element).to be_instance_of Druid::Elements::Label
|
312
|
+
end
|
313
|
+
|
314
|
+
it "should find all label elements" do
|
315
|
+
expect(driver).to receive(:labels).with(:id => 'blah').and_return([driver])
|
316
|
+
elements = page.label_elements(:id => 'blah')
|
317
|
+
expect(elements[0]).to be_instance_of Druid::Elements::Label
|
318
|
+
end
|
307
319
|
end
|
@@ -4,7 +4,7 @@ require 'druid/elements'
|
|
4
4
|
describe Druid::Elements::Button do
|
5
5
|
describe "when mapping how to find an element" do
|
6
6
|
it "should map watir types to same" do
|
7
|
-
[:class, :id, :index, :name, :value, :xpath, :src, :alt].each do |t|
|
7
|
+
[:class, :id, :index, :name, :value, :xpath, :src, :alt, :css].each do |t|
|
8
8
|
identifier = Druid::Elements::Button.identifier_for t => 'value'
|
9
9
|
expect(identifier.keys.first).to eql t
|
10
10
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'druid/elements'
|
3
|
+
|
4
|
+
describe Druid::Elements::Label do
|
5
|
+
describe "when mapping how to find an element" do
|
6
|
+
it "should map watir types to same" do
|
7
|
+
[:class, :id, :text, :index, :xpath].each do |t|
|
8
|
+
identifier = Druid::Elements::Label.identifier_for t => 'value'
|
9
|
+
expect(identifier.keys.first).to eql t
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "interface" do
|
15
|
+
it "should register with tag :label" do
|
16
|
+
expect(Druid::Elements.element_class_for(:label)).to be Druid::Elements::Label
|
17
|
+
end
|
18
|
+
end
|
19
|
+
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].each do |t|
|
7
|
+
[:class, :href, :id, :name, :text, :xpath, :css].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,6 +6,11 @@ class FactoryTestDruid
|
|
6
6
|
page_url "http://google.com"
|
7
7
|
end
|
8
8
|
|
9
|
+
class TestPageWithDirectUrl
|
10
|
+
include Druid
|
11
|
+
direct_url "http://google.com"
|
12
|
+
end
|
13
|
+
|
9
14
|
class AnotherPage
|
10
15
|
include Druid
|
11
16
|
end
|
@@ -37,6 +42,13 @@ describe Druid::PageFactory do
|
|
37
42
|
end
|
38
43
|
end
|
39
44
|
|
45
|
+
it "should create a new page object and execute a block using 'on'" do
|
46
|
+
expect(driver).not_to receive(:goto)
|
47
|
+
world.on FactoryTestDruid do |page|
|
48
|
+
expect(page).to be_instance_of FactoryTestDruid
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
40
52
|
it "should create and visit a new page" do
|
41
53
|
expect(driver).to receive(:goto)
|
42
54
|
world.visit_page FactoryTestDruid do |page|
|
@@ -44,6 +56,20 @@ describe Druid::PageFactory do
|
|
44
56
|
end
|
45
57
|
end
|
46
58
|
|
59
|
+
it "should create and visit a new page using 'visit'" do
|
60
|
+
expect(driver).to receive(:goto)
|
61
|
+
world.visit FactoryTestDruid do |page|
|
62
|
+
expect(page).to be_instance_of FactoryTestDruid
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should create and visit a new page when url is defined as 'direct_url'" do
|
67
|
+
expect(driver).to receive(:goto)
|
68
|
+
world.visit TestPageWithDirectUrl do |page|
|
69
|
+
expect(page).to be_instance_of TestPageWithDirectUrl
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
47
73
|
it "should set an instance variable that can be used outside of the block" do
|
48
74
|
expect(driver).not_to receive(:goto)
|
49
75
|
page = world.on_page FactoryTestDruid
|
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.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Sheng
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- features/file_field.feature
|
92
92
|
- features/form.feature
|
93
93
|
- features/frames.feature
|
94
|
+
- features/generic_elements.feature
|
94
95
|
- features/heading.feature
|
95
96
|
- features/hidden_field.feature
|
96
97
|
- features/html/async.html
|
@@ -113,6 +114,7 @@ files:
|
|
113
114
|
- features/html/success.html
|
114
115
|
- features/image.feature
|
115
116
|
- features/javascript.feature
|
117
|
+
- features/label.feature
|
116
118
|
- features/link.feature
|
117
119
|
- features/list_item.feature
|
118
120
|
- features/modal_dialog.feature
|
@@ -137,10 +139,12 @@ files:
|
|
137
139
|
- features/step_definations/file_field_steps.rb
|
138
140
|
- features/step_definations/form_steps.rb
|
139
141
|
- features/step_definations/frame_steps.rb
|
142
|
+
- features/step_definations/generic_element_steps.rb
|
140
143
|
- features/step_definations/heading_steps.rb
|
141
144
|
- features/step_definations/hidden_field_steps.rb
|
142
145
|
- features/step_definations/image_steps.rb
|
143
146
|
- features/step_definations/javasript_steps.rb
|
147
|
+
- features/step_definations/label_steps.rb
|
144
148
|
- features/step_definations/link_steps.rb
|
145
149
|
- features/step_definations/list_item_steps.rb
|
146
150
|
- features/step_definations/modal_dialog_steps.rb
|
@@ -184,6 +188,7 @@ files:
|
|
184
188
|
- lib/druid/elements/heading.rb
|
185
189
|
- lib/druid/elements/hidden_field.rb
|
186
190
|
- lib/druid/elements/image.rb
|
191
|
+
- lib/druid/elements/label.rb
|
187
192
|
- lib/druid/elements/link.rb
|
188
193
|
- lib/druid/elements/list_item.rb
|
189
194
|
- lib/druid/elements/option.rb
|
@@ -217,6 +222,7 @@ files:
|
|
217
222
|
- spec/druid/elements/heading_spec.rb
|
218
223
|
- spec/druid/elements/hidden_field_spec.rb
|
219
224
|
- spec/druid/elements/image_spec.rb
|
225
|
+
- spec/druid/elements/label_spec.rb
|
220
226
|
- spec/druid/elements/link_spec.rb
|
221
227
|
- spec/druid/elements/list_item_spec.rb
|
222
228
|
- spec/druid/elements/option_spec.rb
|
@@ -270,6 +276,7 @@ test_files:
|
|
270
276
|
- features/file_field.feature
|
271
277
|
- features/form.feature
|
272
278
|
- features/frames.feature
|
279
|
+
- features/generic_elements.feature
|
273
280
|
- features/heading.feature
|
274
281
|
- features/hidden_field.feature
|
275
282
|
- features/html/async.html
|
@@ -292,6 +299,7 @@ test_files:
|
|
292
299
|
- features/html/success.html
|
293
300
|
- features/image.feature
|
294
301
|
- features/javascript.feature
|
302
|
+
- features/label.feature
|
295
303
|
- features/link.feature
|
296
304
|
- features/list_item.feature
|
297
305
|
- features/modal_dialog.feature
|
@@ -316,10 +324,12 @@ test_files:
|
|
316
324
|
- features/step_definations/file_field_steps.rb
|
317
325
|
- features/step_definations/form_steps.rb
|
318
326
|
- features/step_definations/frame_steps.rb
|
327
|
+
- features/step_definations/generic_element_steps.rb
|
319
328
|
- features/step_definations/heading_steps.rb
|
320
329
|
- features/step_definations/hidden_field_steps.rb
|
321
330
|
- features/step_definations/image_steps.rb
|
322
331
|
- features/step_definations/javasript_steps.rb
|
332
|
+
- features/step_definations/label_steps.rb
|
323
333
|
- features/step_definations/link_steps.rb
|
324
334
|
- features/step_definations/list_item_steps.rb
|
325
335
|
- features/step_definations/modal_dialog_steps.rb
|
@@ -360,6 +370,7 @@ test_files:
|
|
360
370
|
- spec/druid/elements/heading_spec.rb
|
361
371
|
- spec/druid/elements/hidden_field_spec.rb
|
362
372
|
- spec/druid/elements/image_spec.rb
|
373
|
+
- spec/druid/elements/label_spec.rb
|
363
374
|
- spec/druid/elements/link_spec.rb
|
364
375
|
- spec/druid/elements/list_item_spec.rb
|
365
376
|
- spec/druid/elements/option_spec.rb
|