page-object 0.3.2 → 0.4.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.
- data/ChangeLog +16 -0
- data/features/headings.feature +42 -6
- data/features/html/nested_elements.html +11 -5
- data/features/html/static_elements.html +1 -1
- data/features/nested_elements.feature +19 -3
- data/features/paragraph.feature +33 -0
- data/features/step_definitions/nested_elements_steps.rb +12 -16
- data/features/step_definitions/paragraph_steps.rb +16 -0
- data/features/support/page.rb +32 -0
- data/lib/page-object/accessors.rb +116 -0
- data/lib/page-object/element_locators.rb +60 -0
- data/lib/page-object/elements/button.rb +3 -1
- data/lib/page-object/elements/check_box.rb +4 -2
- data/lib/page-object/elements/element.rb +23 -3
- data/lib/page-object/elements/form.rb +4 -2
- data/lib/page-object/elements/image.rb +4 -2
- data/lib/page-object/elements/link.rb +3 -1
- data/lib/page-object/elements/ordered_list.rb +4 -2
- data/lib/page-object/elements/paragraph.rb +7 -0
- data/lib/page-object/elements/radio_button.rb +4 -2
- data/lib/page-object/elements/select_list.rb +4 -2
- data/lib/page-object/elements/table.rb +4 -2
- data/lib/page-object/elements/table_row.rb +4 -2
- data/lib/page-object/elements/text_area.rb +4 -2
- data/lib/page-object/elements/text_field.rb +4 -2
- data/lib/page-object/elements/unordered_list.rb +4 -2
- data/lib/page-object/elements.rb +1 -0
- data/lib/page-object/nested_elements.rb +16 -0
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +120 -0
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +100 -0
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object.rb +22 -0
- data/page-object.gemspec +3 -2
- data/spec/page-object/accessors_spec.rb +212 -31
- data/spec/page-object/element_locators_spec.rb +24 -0
- data/spec/page-object/elements/element_spec.rb +9 -250
- data/spec/page-object/elements/nested_element_spec.rb +125 -86
- data/spec/page-object/elements/selenium_element_spec.rb +128 -0
- data/spec/page-object/elements/watir_element_spec.rb +116 -0
- data/spec/page-object/page-object_spec.rb +32 -0
- metadata +30 -10
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'mixology'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
module Elements
|
3
5
|
class SelectList < Element
|
@@ -21,10 +23,10 @@ module PageObject
|
|
21
23
|
super
|
22
24
|
if platform[:platform] == :watir_webdriver
|
23
25
|
require 'page-object/platforms/watir_webdriver/select_list'
|
24
|
-
self.
|
26
|
+
self.mixin PageObject::Platforms::WatirWebDriver::SelectList
|
25
27
|
elsif platform[:platform] == :selenium_webdriver
|
26
28
|
require 'page-object/platforms/selenium_webdriver/select_list'
|
27
|
-
self.
|
29
|
+
self.mixin PageObject::Platforms::SeleniumWebDriver::SelectList
|
28
30
|
else
|
29
31
|
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
30
32
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'mixology'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
module Elements
|
3
5
|
class Table < Element
|
@@ -29,10 +31,10 @@ module PageObject
|
|
29
31
|
super
|
30
32
|
if platform[:platform] == :watir_webdriver
|
31
33
|
require 'page-object/platforms/watir_webdriver/table'
|
32
|
-
self.
|
34
|
+
self.mixin PageObject::Platforms::WatirWebDriver::Table
|
33
35
|
elsif platform[:platform] == :selenium_webdriver
|
34
36
|
require 'page-object/platforms/selenium_webdriver/table'
|
35
|
-
self.
|
37
|
+
self.mixin PageObject::Platforms::SeleniumWebDriver::Table
|
36
38
|
else
|
37
39
|
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
38
40
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'mixology'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
module Elements
|
3
5
|
class TableRow < Element
|
@@ -29,10 +31,10 @@ module PageObject
|
|
29
31
|
super
|
30
32
|
if platform[:platform] == :watir_webdriver
|
31
33
|
require 'page-object/platforms/watir_webdriver/table_row'
|
32
|
-
self.
|
34
|
+
self.mixin PageObject::Platforms::WatirWebDriver::TableRow
|
33
35
|
elsif platform[:platform] == :selenium_webdriver
|
34
36
|
require 'page-object/platforms/selenium_webdriver/table_row'
|
35
|
-
self.
|
37
|
+
self.mixin PageObject::Platforms::SeleniumWebDriver::TableRow
|
36
38
|
else
|
37
39
|
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
38
40
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'mixology'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
module Elements
|
3
5
|
class TextArea < Element
|
@@ -29,10 +31,10 @@ module PageObject
|
|
29
31
|
super
|
30
32
|
if platform[:platform] == :watir_webdriver
|
31
33
|
require 'page-object/platforms/watir_webdriver/text_area'
|
32
|
-
self.
|
34
|
+
self.mixin PageObject::Platforms::WatirWebDriver::TextArea
|
33
35
|
elsif platform[:platform] == :selenium_webdriver
|
34
36
|
require 'page-object/platforms/selenium_webdriver/text_area'
|
35
|
-
self.
|
37
|
+
self.mixin PageObject::Platforms::SeleniumWebDriver::TextArea
|
36
38
|
else
|
37
39
|
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
38
40
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'mixology'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
module Elements
|
3
5
|
class TextField < Element
|
@@ -29,10 +31,10 @@ module PageObject
|
|
29
31
|
super
|
30
32
|
if platform[:platform] == :watir_webdriver
|
31
33
|
require 'page-object/platforms/watir_webdriver/text_field'
|
32
|
-
self.
|
34
|
+
self.mixin PageObject::Platforms::WatirWebDriver::TextField
|
33
35
|
elsif platform[:platform] == :selenium_webdriver
|
34
36
|
require 'page-object/platforms/selenium_webdriver/text_field'
|
35
|
-
self.
|
37
|
+
self.mixin PageObject::Platforms::SeleniumWebDriver::TextField
|
36
38
|
else
|
37
39
|
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
38
40
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'mixology'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
module Elements
|
3
5
|
class UnorderedList < Element
|
@@ -34,10 +36,10 @@ module PageObject
|
|
34
36
|
super
|
35
37
|
if platform[:platform] == :watir_webdriver
|
36
38
|
require 'page-object/platforms/watir_webdriver/unordered_list'
|
37
|
-
self.
|
39
|
+
self.mixin PageObject::Platforms::WatirWebDriver::UnorderedList
|
38
40
|
elsif platform[:platform] == :selenium_webdriver
|
39
41
|
require 'page-object/platforms/selenium_webdriver/unordered_list'
|
40
|
-
self.
|
42
|
+
self.mixin PageObject::Platforms::SeleniumWebDriver::UnorderedList
|
41
43
|
else
|
42
44
|
raise ArgumentError, "expect platform to be :watir_webdriver or :selenium_webdriver"
|
43
45
|
end
|
data/lib/page-object/elements.rb
CHANGED
@@ -80,5 +80,21 @@ module PageObject
|
|
80
80
|
def h3_element(identifier={:index => 0})
|
81
81
|
@platform.h3_for(identifier)
|
82
82
|
end
|
83
|
+
|
84
|
+
def h4_element(identifier={:index => 0})
|
85
|
+
@platform.h4_for(identifier)
|
86
|
+
end
|
87
|
+
|
88
|
+
def h5_element(identifier={:index => 0})
|
89
|
+
@platform.h5_for(identifier)
|
90
|
+
end
|
91
|
+
|
92
|
+
def h6_element(identifier={:index => 0})
|
93
|
+
@platform.h6_for(identifier)
|
94
|
+
end
|
95
|
+
|
96
|
+
def paragraph_element(identifier={:index => 0})
|
97
|
+
@platform.paragraph_for(identifier)
|
98
|
+
end
|
83
99
|
end
|
84
100
|
end
|
@@ -23,6 +23,14 @@ module PageObject
|
|
23
23
|
@browser.navigate.to url
|
24
24
|
end
|
25
25
|
|
26
|
+
#
|
27
|
+
# platform method to get the current url
|
28
|
+
# See PageObject#current_url
|
29
|
+
#
|
30
|
+
def current_url
|
31
|
+
@browser.current_url
|
32
|
+
end
|
33
|
+
|
26
34
|
#
|
27
35
|
# platform method to retrieve the text from the current page
|
28
36
|
# See PageObject#text
|
@@ -129,6 +137,22 @@ module PageObject
|
|
129
137
|
def forward
|
130
138
|
@browser.navigate.forward
|
131
139
|
end
|
140
|
+
|
141
|
+
#
|
142
|
+
# platform method to clear the cookies from the browser
|
143
|
+
# See PageObject#clear_cookies
|
144
|
+
#
|
145
|
+
def clear_cookies
|
146
|
+
@browser.manage.delete_all_cookies
|
147
|
+
end
|
148
|
+
|
149
|
+
#
|
150
|
+
# platform method to save the current screenshot to a file
|
151
|
+
# See PageObject#save_screenshot
|
152
|
+
#
|
153
|
+
def save_screenshot(file_name)
|
154
|
+
@browser.save_screenshot(file_name)
|
155
|
+
end
|
132
156
|
|
133
157
|
#
|
134
158
|
# platform method to get the value stored in a text field
|
@@ -626,6 +650,102 @@ module PageObject
|
|
626
650
|
::PageObject::Elements::Heading.new(element, :platform => :selenium_webdriver)
|
627
651
|
end
|
628
652
|
|
653
|
+
#
|
654
|
+
# platform method to retrieve the text from a h4
|
655
|
+
# See PageObject::Accessors#h4
|
656
|
+
#
|
657
|
+
def h4_text_for(identifier)
|
658
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h4')
|
659
|
+
switch_to_frame(frame_identifiers)
|
660
|
+
value = @browser.find_element(how, what).text
|
661
|
+
@browser.switch_to.default_content
|
662
|
+
value
|
663
|
+
end
|
664
|
+
|
665
|
+
#
|
666
|
+
# platform method to retrieve the h4 element
|
667
|
+
# See PageObject::Accessors#h4
|
668
|
+
#
|
669
|
+
def h4_for(identifier)
|
670
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h4')
|
671
|
+
switch_to_frame(frame_identifiers)
|
672
|
+
element = @browser.find_element(how, what)
|
673
|
+
@browser.switch_to.default_content unless frame_identifiers.nil?
|
674
|
+
::PageObject::Elements::Heading.new(element, :platform => :selenium_webdriver)
|
675
|
+
end
|
676
|
+
|
677
|
+
#
|
678
|
+
# platform method to retrieve the text from a h5
|
679
|
+
# See PageObject::Accessors#h5
|
680
|
+
#
|
681
|
+
def h5_text_for(identifier)
|
682
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h5')
|
683
|
+
switch_to_frame(frame_identifiers)
|
684
|
+
value = @browser.find_element(how, what).text
|
685
|
+
@browser.switch_to.default_content
|
686
|
+
value
|
687
|
+
end
|
688
|
+
|
689
|
+
#
|
690
|
+
# platform method to retrieve the h5 element
|
691
|
+
# See PageObject::Accessors#h5
|
692
|
+
#
|
693
|
+
def h5_for(identifier)
|
694
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h5')
|
695
|
+
switch_to_frame(frame_identifiers)
|
696
|
+
element = @browser.find_element(how, what)
|
697
|
+
@browser.switch_to.default_content unless frame_identifiers.nil?
|
698
|
+
::PageObject::Elements::Heading.new(element, :platform => :selenium_webdriver)
|
699
|
+
end
|
700
|
+
|
701
|
+
#
|
702
|
+
# platform method to retrieve the text from a h6
|
703
|
+
# See PageObject::Accessors#h6
|
704
|
+
#
|
705
|
+
def h6_text_for(identifier)
|
706
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h6')
|
707
|
+
switch_to_frame(frame_identifiers)
|
708
|
+
value = @browser.find_element(how, what).text
|
709
|
+
@browser.switch_to.default_content
|
710
|
+
value
|
711
|
+
end
|
712
|
+
|
713
|
+
#
|
714
|
+
# platform method to retrieve the h6 element
|
715
|
+
# See PageObject::Accessors#h6
|
716
|
+
#
|
717
|
+
def h6_for(identifier)
|
718
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h6')
|
719
|
+
switch_to_frame(frame_identifiers)
|
720
|
+
element = @browser.find_element(how, what)
|
721
|
+
@browser.switch_to.default_content unless frame_identifiers.nil?
|
722
|
+
::PageObject::Elements::Heading.new(element, :platform => :selenium_webdriver)
|
723
|
+
end
|
724
|
+
|
725
|
+
#
|
726
|
+
# platform method to retrieve the text for a paragraph
|
727
|
+
# See PageObject::Accessors#paragraph
|
728
|
+
#
|
729
|
+
def paragraph_text_for(identifier)
|
730
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Paragraph, 'p')
|
731
|
+
switch_to_frame(frame_identifiers)
|
732
|
+
value = @browser.find_element(how, what).text
|
733
|
+
@browser.switch_to.default_content
|
734
|
+
value
|
735
|
+
end
|
736
|
+
|
737
|
+
#
|
738
|
+
# platform method to retrieve the paragraph element
|
739
|
+
# See PageObject::Accessors#paragraph
|
740
|
+
#
|
741
|
+
def paragraph_for(identifier)
|
742
|
+
how, what, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'p')
|
743
|
+
switch_to_frame(frame_identifiers)
|
744
|
+
element = @browser.find_element(how, what)
|
745
|
+
@browser.switch_to.default_content unless frame_identifiers.nil?
|
746
|
+
::PageObject::Elements::Paragraph.new(element, :platform => :selenium_webdriver)
|
747
|
+
end
|
748
|
+
|
629
749
|
private
|
630
750
|
|
631
751
|
def parse_identifiers(identifier, element, tag_name=nil, additional=nil)
|
@@ -25,6 +25,14 @@ module PageObject
|
|
25
25
|
def navigate_to(url)
|
26
26
|
@browser.goto url
|
27
27
|
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# platform method to get the current url
|
31
|
+
# See PageObject#current_url
|
32
|
+
#
|
33
|
+
def current_url
|
34
|
+
@browser.url
|
35
|
+
end
|
28
36
|
|
29
37
|
#
|
30
38
|
# platform method to retrieve the text from the current page
|
@@ -113,6 +121,22 @@ module PageObject
|
|
113
121
|
def forward
|
114
122
|
@browser.forward
|
115
123
|
end
|
124
|
+
|
125
|
+
#
|
126
|
+
# platform method to clear the cookies from the browser
|
127
|
+
# See PageObject#clear_cookies
|
128
|
+
#
|
129
|
+
def clear_cookies
|
130
|
+
@browser.clear_cookies
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# platform method to save the current screenshot to a file
|
135
|
+
# See PageObject#save_screenshot
|
136
|
+
#
|
137
|
+
def save_screenshot(file_name)
|
138
|
+
@browser.wd.save_screenshot(file_name)
|
139
|
+
end
|
116
140
|
|
117
141
|
#
|
118
142
|
# platform method to get the value stored in a text field
|
@@ -512,6 +536,82 @@ module PageObject
|
|
512
536
|
Object::PageObject::Elements::Heading.new(element, :platform => :watir_webdriver)
|
513
537
|
end
|
514
538
|
|
539
|
+
#
|
540
|
+
# platform method to retrieve the text for a h4
|
541
|
+
# See PageObject::Accessors#h4
|
542
|
+
#
|
543
|
+
def h4_text_for(identifier)
|
544
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h4')
|
545
|
+
@browser.instance_eval "#{nested_frames(frame_identifiers)}h4(identifier).text"
|
546
|
+
end
|
547
|
+
|
548
|
+
#
|
549
|
+
# platform method to retrieve the h4 element
|
550
|
+
# See PageObject::Accessors#h4
|
551
|
+
#
|
552
|
+
def h4_for(identifier)
|
553
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h4')
|
554
|
+
element = @browser.instance_eval "#{nested_frames(frame_identifiers)}h4(identifier)"
|
555
|
+
Object::PageObject::Elements::Heading.new(element, :platform => :watir_webdriver)
|
556
|
+
end
|
557
|
+
|
558
|
+
#
|
559
|
+
# platform method to retrieve the text for a h5
|
560
|
+
# See PageObject::Accessors#h5
|
561
|
+
#
|
562
|
+
def h5_text_for(identifier)
|
563
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h5')
|
564
|
+
@browser.instance_eval "#{nested_frames(frame_identifiers)}h5(identifier).text"
|
565
|
+
end
|
566
|
+
|
567
|
+
#
|
568
|
+
# platform method to retrieve the h5 element
|
569
|
+
# See PageObject::Accessors#h5
|
570
|
+
#
|
571
|
+
def h5_for(identifier)
|
572
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h5')
|
573
|
+
element = @browser.instance_eval "#{nested_frames(frame_identifiers)}h5(identifier)"
|
574
|
+
Object::PageObject::Elements::Heading.new(element, :platform => :watir_webdriver)
|
575
|
+
end
|
576
|
+
|
577
|
+
#
|
578
|
+
# platform method to retrieve the text for a h6
|
579
|
+
# See PageObject::Accessors#h6
|
580
|
+
#
|
581
|
+
def h6_text_for(identifier)
|
582
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h6')
|
583
|
+
@browser.instance_eval "#{nested_frames(frame_identifiers)}h6(identifier).text"
|
584
|
+
end
|
585
|
+
|
586
|
+
#
|
587
|
+
# platform method to retrieve the h6 element
|
588
|
+
# See PageObject::Accessors#h6
|
589
|
+
#
|
590
|
+
def h6_for(identifier)
|
591
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'h6')
|
592
|
+
element = @browser.instance_eval "#{nested_frames(frame_identifiers)}h6(identifier)"
|
593
|
+
Object::PageObject::Elements::Heading.new(element, :platform => :watir_webdriver)
|
594
|
+
end
|
595
|
+
|
596
|
+
#
|
597
|
+
# platform method to retrieve the text for a paragraph
|
598
|
+
# See PageObject::Accessors#paragraph
|
599
|
+
#
|
600
|
+
def paragraph_text_for(identifier)
|
601
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'p')
|
602
|
+
@browser.instance_eval "#{nested_frames(frame_identifiers)}p(identifier).text"
|
603
|
+
end
|
604
|
+
|
605
|
+
#
|
606
|
+
# platform method to retrieve the paragraph element
|
607
|
+
# See PageObject::Accessors#paragraph
|
608
|
+
#
|
609
|
+
def paragraph_for(identifier)
|
610
|
+
identifier, frame_identifiers = parse_identifiers(identifier, Elements::Heading, 'p')
|
611
|
+
element = @browser.instance_eval "#{nested_frames(frame_identifiers)}p(identifier)"
|
612
|
+
Object::PageObject::Elements::Paragraph.new(element, :platform => :watir_webdriver)
|
613
|
+
end
|
614
|
+
|
515
615
|
private
|
516
616
|
|
517
617
|
def parse_identifiers(identifier, element, tag_name=nil)
|
data/lib/page-object/version.rb
CHANGED
data/lib/page-object.rb
CHANGED
@@ -60,6 +60,13 @@ module PageObject
|
|
60
60
|
cls.extend PageObject::Accessors
|
61
61
|
end
|
62
62
|
|
63
|
+
#
|
64
|
+
# get the current page url
|
65
|
+
#
|
66
|
+
def current_url
|
67
|
+
platform.current_url
|
68
|
+
end
|
69
|
+
|
63
70
|
#
|
64
71
|
# navigate to the provided url
|
65
72
|
#
|
@@ -221,6 +228,21 @@ module PageObject
|
|
221
228
|
def forward
|
222
229
|
platform.forward
|
223
230
|
end
|
231
|
+
|
232
|
+
#
|
233
|
+
# Clear the cookies from the browser
|
234
|
+
#
|
235
|
+
def clear_cookies
|
236
|
+
platform.clear_cookies
|
237
|
+
end
|
238
|
+
|
239
|
+
#
|
240
|
+
# Save the current screenshot to the provided url. File
|
241
|
+
# is saved as a png file.
|
242
|
+
#
|
243
|
+
def save_screenshot(file_name)
|
244
|
+
platform.save_screenshot file_name
|
245
|
+
end
|
224
246
|
|
225
247
|
private
|
226
248
|
|
data/page-object.gemspec
CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency 'watir-webdriver', '>= 0.3.
|
23
|
-
s.add_dependency 'selenium-webdriver', '>= 2.
|
22
|
+
s.add_dependency 'watir-webdriver', '>= 0.3.4'
|
23
|
+
s.add_dependency 'selenium-webdriver', '>= 2.7.0'
|
24
|
+
s.add_dependency 'mixology'
|
24
25
|
|
25
26
|
s.add_development_dependency 'rspec', '>= 2.6.0'
|
26
27
|
s.add_development_dependency 'cucumber', '>= 1.0.0'
|