page-object 2.2.3 → 2.3.1

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 (67) hide show
  1. checksums.yaml +5 -5
  2. data/.coveralls.yml +1 -1
  3. data/.gitignore +8 -8
  4. data/.rspec +2 -2
  5. data/.ruby-gemset +1 -1
  6. data/.ruby-version +1 -1
  7. data/.travis.yml +17 -17
  8. data/ChangeLog +928 -899
  9. data/Gemfile +13 -13
  10. data/Guardfile +20 -20
  11. data/LICENSE +20 -20
  12. data/README.md +114 -114
  13. data/Rakefile +29 -29
  14. data/cucumber.yml +8 -8
  15. data/lib/page-object.rb +431 -420
  16. data/lib/page-object/accessors.rb +1201 -1175
  17. data/lib/page-object/element_locators.rb +21 -21
  18. data/lib/page-object/elements.rb +62 -61
  19. data/lib/page-object/elements/area.rb +9 -9
  20. data/lib/page-object/elements/audio.rb +9 -9
  21. data/lib/page-object/elements/bold.rb +9 -9
  22. data/lib/page-object/elements/button.rb +12 -12
  23. data/lib/page-object/elements/canvas.rb +10 -10
  24. data/lib/page-object/elements/check_box.rb +9 -9
  25. data/lib/page-object/elements/date_field.rb +10 -0
  26. data/lib/page-object/elements/div.rb +9 -9
  27. data/lib/page-object/elements/element.rb +212 -216
  28. data/lib/page-object/elements/file_field.rb +9 -9
  29. data/lib/page-object/elements/form.rb +9 -9
  30. data/lib/page-object/elements/heading.rb +14 -14
  31. data/lib/page-object/elements/hidden_field.rb +9 -9
  32. data/lib/page-object/elements/image.rb +10 -10
  33. data/lib/page-object/elements/italic.rb +9 -9
  34. data/lib/page-object/elements/label.rb +9 -9
  35. data/lib/page-object/elements/link.rb +9 -9
  36. data/lib/page-object/elements/list_item.rb +9 -9
  37. data/lib/page-object/elements/media.rb +11 -11
  38. data/lib/page-object/elements/option.rb +9 -9
  39. data/lib/page-object/elements/ordered_list.rb +43 -43
  40. data/lib/page-object/elements/paragraph.rb +9 -9
  41. data/lib/page-object/elements/radio_button.rb +9 -9
  42. data/lib/page-object/elements/select_list.rb +42 -42
  43. data/lib/page-object/elements/span.rb +9 -9
  44. data/lib/page-object/elements/table.rb +85 -68
  45. data/lib/page-object/elements/table_cell.rb +10 -10
  46. data/lib/page-object/elements/table_row.rb +52 -52
  47. data/lib/page-object/elements/text_area.rb +9 -9
  48. data/lib/page-object/elements/text_field.rb +10 -10
  49. data/lib/page-object/elements/unordered_list.rb +42 -42
  50. data/lib/page-object/elements/video.rb +9 -9
  51. data/lib/page-object/indexed_properties.rb +41 -41
  52. data/lib/page-object/javascript/angularjs.rb +14 -14
  53. data/lib/page-object/javascript/jquery.rb +14 -14
  54. data/lib/page-object/javascript/prototype.rb +14 -14
  55. data/lib/page-object/javascript/yui.rb +18 -18
  56. data/lib/page-object/javascript_framework_facade.rb +80 -80
  57. data/lib/page-object/locator_generator.rb +183 -182
  58. data/lib/page-object/nested_elements.rb +17 -17
  59. data/lib/page-object/page_factory.rb +108 -108
  60. data/lib/page-object/page_populator.rb +105 -93
  61. data/lib/page-object/platforms/watir.rb +50 -50
  62. data/lib/page-object/platforms/watir/page_object.rb +1155 -1124
  63. data/lib/page-object/section_collection.rb +16 -16
  64. data/lib/page-object/version.rb +4 -4
  65. data/lib/page-object/widgets.rb +98 -98
  66. data/page-object.gemspec +31 -32
  67. metadata +12 -26
@@ -1,16 +1,16 @@
1
- module PageObject
2
- class SectionCollection < Array
3
- def find_by(values_hash)
4
- find do |section|
5
- values_hash.all? { |key, value| value === section.public_send(key) }
6
- end
7
- end
8
-
9
- def select_by(values_hash)
10
- matches = select do |section|
11
- values_hash.all? { |key, value| value === section.public_send(key) }
12
- end
13
- self.class[*matches]
14
- end
15
- end
16
- end
1
+ module PageObject
2
+ class SectionCollection < Array
3
+ def find_by(values_hash)
4
+ find do |section|
5
+ values_hash.all? { |key, value| value === section.public_send(key) }
6
+ end
7
+ end
8
+
9
+ def select_by(values_hash)
10
+ matches = select do |section|
11
+ values_hash.all? { |key, value| value === section.public_send(key) }
12
+ end
13
+ self.class[*matches]
14
+ end
15
+ end
16
+ end
@@ -1,4 +1,4 @@
1
- module PageObject
2
- # @private
3
- VERSION = "2.2.3"
4
- end
1
+ module PageObject
2
+ # @private
3
+ VERSION = "2.3.1"
4
+ end
@@ -1,98 +1,98 @@
1
- require 'page-object/elements'
2
- require 'page-object/platforms/watir/page_object'
3
-
4
- module PageObject
5
- module Widgets
6
-
7
- #
8
- # Module that allows for the registration of widget classes which extend the functionality of PageObject
9
- # Allows any classes which extend PageObject::Element to be used as PageObject elements.
10
- # This allows such widgets to be created using the defined tags.
11
- #
12
- # @param [Symbol] defines the symbol which will be used as an accessor name.
13
- # @param [Class] the widget class extending PageObject::Elements::Element
14
- # @param [Symbol] the symbol of the html element used when searching for this widget.
15
- #
16
- #
17
- def self.register_widget(widget_tag, widget_class, base_element_tag)
18
- if widget_class.ancestors.include? Elements::Element
19
- define_accessors(Accessors, widget_tag, widget_class)
20
- define_nested_elements(Elements::Element, widget_tag)
21
- define_locators(PageObject, widget_tag)
22
-
23
- PageObject::Platforms::Watir::PageObject.define_widget_accessors(widget_tag, widget_class, base_element_tag)
24
- end
25
- end
26
-
27
- private
28
-
29
- def self.define_accessors(base, widget_tag, widget_class)
30
- accessors_module = Module.new do
31
- define_method widget_tag do |name, *identifier_args, &block|
32
-
33
- identifier = identifier_args.first
34
- identifier = {:index => 0} if identifier.nil?
35
-
36
- define_method("#{name}_element") do
37
- return call_block(&block) if block
38
- platform.send("#{widget_tag}_for", identifier.clone)
39
- end
40
- define_method("#{name}?") do
41
- return call_block(&block).exists? if block
42
- platform.send("#{widget_tag}_for", identifier.clone).exists?
43
- end
44
- if widget_class.respond_to? :accessor_methods
45
- widget_class.accessor_methods(self, name)
46
- end
47
- end
48
- define_method widget_class.plural_form do |name, *identifier_args, &block|
49
- define_method("#{name}_elements") do
50
- return call_block(&block) unless block.nil?
51
- platform_method = "#{widget_tag.to_s}s_for"
52
- platform.send platform_method, (identifier_args.first ? identifier_args.first.clone : {})
53
- end
54
- end
55
- end
56
-
57
- base.send(:include, accessors_module)
58
- end
59
-
60
- def self.define_nested_elements(base, widget_tag)
61
- define_singular_nested_accessor(base, widget_tag)
62
- define_multiple_nested_accessor(base, widget_tag)
63
- end
64
-
65
- def self.define_multiple_nested_accessor(base, widget_tag)
66
- base.send(:define_method, "#{widget_tag}_elements") do |*args|
67
- identifier = args[0] ? args[0] : {}
68
- @platform.send("#{widget_tag}s_for", identifier.clone)
69
- end
70
- end
71
-
72
- def self.define_singular_nested_accessor(base, widget_tag)
73
- base.send(:define_method, "#{widget_tag}_element") do |*args|
74
- identifier = args[0] ? args[0] : {:index => 0}
75
- @platform.send("#{widget_tag}_for", identifier.clone)
76
- end
77
- end
78
-
79
- def self.define_locators(base, widget_tag)
80
- define_singular_locator(base, widget_tag)
81
- define_multiple_locator(base, widget_tag)
82
- end
83
-
84
- def self.define_multiple_locator(base, widget_tag)
85
- base.send(:define_method, "#{widget_tag}_elements") do |*args|
86
- identifier = args[0] ? args[0] : {}
87
- platform.send("#{widget_tag}s_for", identifier.clone)
88
- end
89
- end
90
-
91
- def self.define_singular_locator(base, widget_tag)
92
- base.send(:define_method, "#{widget_tag}_element") do |*args|
93
- identifier = args[0] ? args[0] : {:index => 0}
94
- platform.send("#{widget_tag}_for", identifier.clone)
95
- end
96
- end
97
- end
98
- end
1
+ require 'page-object/elements'
2
+ require 'page-object/platforms/watir/page_object'
3
+
4
+ module PageObject
5
+ module Widgets
6
+
7
+ #
8
+ # Module that allows for the registration of widget classes which extend the functionality of PageObject
9
+ # Allows any classes which extend PageObject::Element to be used as PageObject elements.
10
+ # This allows such widgets to be created using the defined tags.
11
+ #
12
+ # @param [Symbol] defines the symbol which will be used as an accessor name.
13
+ # @param [Class] the widget class extending PageObject::Elements::Element
14
+ # @param [Symbol] the symbol of the html element used when searching for this widget.
15
+ #
16
+ #
17
+ def self.register_widget(widget_tag, widget_class, base_element_tag)
18
+ if widget_class.ancestors.include? Elements::Element
19
+ define_accessors(Accessors, widget_tag, widget_class)
20
+ define_nested_elements(Elements::Element, widget_tag)
21
+ define_locators(PageObject, widget_tag)
22
+
23
+ PageObject::Platforms::Watir::PageObject.define_widget_accessors(widget_tag, widget_class, base_element_tag)
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def self.define_accessors(base, widget_tag, widget_class)
30
+ accessors_module = Module.new do
31
+ define_method widget_tag do |name, *identifier_args, &block|
32
+
33
+ identifier = identifier_args.first
34
+ identifier = {:index => 0} if identifier.nil?
35
+
36
+ define_method("#{name}_element") do
37
+ return call_block(&block) if block
38
+ platform.send("#{widget_tag}_for", identifier.clone)
39
+ end
40
+ define_method("#{name}?") do
41
+ return call_block(&block).exists? if block
42
+ platform.send("#{widget_tag}_for", identifier.clone).exists?
43
+ end
44
+ if widget_class.respond_to? :accessor_methods
45
+ widget_class.accessor_methods(self, name)
46
+ end
47
+ end
48
+ define_method widget_class.plural_form do |name, *identifier_args, &block|
49
+ define_method("#{name}_elements") do
50
+ return call_block(&block) unless block.nil?
51
+ platform_method = "#{widget_tag.to_s}s_for"
52
+ platform.send platform_method, (identifier_args.first ? identifier_args.first.clone : {})
53
+ end
54
+ end
55
+ end
56
+
57
+ base.send(:include, accessors_module)
58
+ end
59
+
60
+ def self.define_nested_elements(base, widget_tag)
61
+ define_singular_nested_accessor(base, widget_tag)
62
+ define_multiple_nested_accessor(base, widget_tag)
63
+ end
64
+
65
+ def self.define_multiple_nested_accessor(base, widget_tag)
66
+ base.send(:define_method, "#{widget_tag}_elements") do |*args|
67
+ identifier = args[0] ? args[0] : {}
68
+ @platform.send("#{widget_tag}s_for", identifier.clone)
69
+ end
70
+ end
71
+
72
+ def self.define_singular_nested_accessor(base, widget_tag)
73
+ base.send(:define_method, "#{widget_tag}_element") do |*args|
74
+ identifier = args[0] ? args[0] : {:index => 0}
75
+ @platform.send("#{widget_tag}_for", identifier.clone)
76
+ end
77
+ end
78
+
79
+ def self.define_locators(base, widget_tag)
80
+ define_singular_locator(base, widget_tag)
81
+ define_multiple_locator(base, widget_tag)
82
+ end
83
+
84
+ def self.define_multiple_locator(base, widget_tag)
85
+ base.send(:define_method, "#{widget_tag}_elements") do |*args|
86
+ identifier = args[0] ? args[0] : {}
87
+ platform.send("#{widget_tag}s_for", identifier.clone)
88
+ end
89
+ end
90
+
91
+ def self.define_singular_locator(base, widget_tag)
92
+ base.send(:define_method, "#{widget_tag}_element") do |*args|
93
+ identifier = args[0] ? args[0] : {:index => 0}
94
+ platform.send("#{widget_tag}_for", identifier.clone)
95
+ end
96
+ end
97
+ end
98
+ end
data/page-object.gemspec CHANGED
@@ -1,32 +1,31 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "page-object/version"
4
-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "page-object"
8
- s.version = PageObject::VERSION
9
- s.platform = Gem::Platform::RUBY
10
- s.authors = ["Jeff Morgan", 'Alexis Andersen']
11
- s.email = ["jeff.morgan@leandog.com", 'alexis.t.andersen@gmail.com']
12
- s.license = 'MIT'
13
- s.homepage = "http://github.com/cheezy/page-object"
14
- s.summary = %q{Page Object DSL for browser testing}
15
- s.description = %q{Page Object DSL that works with both Watir and Selenium}
16
-
17
- s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(pkg|spec|features|coverage)/}) }
18
- s.require_paths = ["lib"]
19
-
20
- s.add_dependency 'watir', '~> 6.8'
21
- s.add_dependency 'selenium-webdriver', '~> 3.0'
22
- s.add_dependency 'page_navigation', '>= 0.10'
23
-
24
- s.add_development_dependency 'rspec', '~> 3.0'
25
- s.add_development_dependency 'cucumber', '~> 2.0'
26
- s.add_development_dependency 'yard', '>= 0.7.2'
27
- s.add_development_dependency 'rack', '~> 1.0'
28
- s.add_development_dependency 'coveralls', '~> 0.8.1'
29
- s.add_development_dependency 'net-http-persistent'
30
- s.add_development_dependency 'webdrivers', '~> 3.1'
31
-
32
- end
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "page-object/version"
4
+
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "page-object"
8
+ s.version = PageObject::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Jeff Morgan", 'Alexis Andersen']
11
+ s.email = ["jeff.morgan@leandog.com", 'alexis.t.andersen@gmail.com']
12
+ s.license = 'MIT'
13
+ s.homepage = "http://github.com/cheezy/page-object"
14
+ s.summary = %q{Page Object DSL for browser testing}
15
+ s.description = %q{Page Object DSL that works with both Watir and Selenium}
16
+
17
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(pkg|spec|features|coverage)/}) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency 'watir', '>= 6.10.3'
21
+ s.add_dependency 'page_navigation', '>= 0.10'
22
+
23
+ s.add_development_dependency 'rspec', '~> 3.0'
24
+ s.add_development_dependency 'cucumber', '~> 2.0'
25
+ s.add_development_dependency 'yard', '>= 0.7.2'
26
+ s.add_development_dependency 'rack', '~> 1.0'
27
+ s.add_development_dependency 'coveralls', '~> 0.8.1'
28
+ s.add_development_dependency 'net-http-persistent'
29
+ s.add_development_dependency 'webdrivers'
30
+
31
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: page-object
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Morgan
@@ -9,36 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-08-30 00:00:00.000000000 Z
12
+ date: 2021-03-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: watir
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '6.8'
21
- type: :runtime
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
27
- version: '6.8'
28
- - !ruby/object:Gem::Dependency
29
- name: selenium-webdriver
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
18
+ - - ">="
33
19
  - !ruby/object:Gem::Version
34
- version: '3.0'
20
+ version: 6.10.3
35
21
  type: :runtime
36
22
  prerelease: false
37
23
  version_requirements: !ruby/object:Gem::Requirement
38
24
  requirements:
39
- - - "~>"
25
+ - - ">="
40
26
  - !ruby/object:Gem::Version
41
- version: '3.0'
27
+ version: 6.10.3
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: page_navigation
44
30
  requirement: !ruby/object:Gem::Requirement
@@ -141,16 +127,16 @@ dependencies:
141
127
  name: webdrivers
142
128
  requirement: !ruby/object:Gem::Requirement
143
129
  requirements:
144
- - - "~>"
130
+ - - ">="
145
131
  - !ruby/object:Gem::Version
146
- version: '3.1'
132
+ version: '0'
147
133
  type: :development
148
134
  prerelease: false
149
135
  version_requirements: !ruby/object:Gem::Requirement
150
136
  requirements:
151
- - - "~>"
137
+ - - ">="
152
138
  - !ruby/object:Gem::Version
153
- version: '3.1'
139
+ version: '0'
154
140
  description: Page Object DSL that works with both Watir and Selenium
155
141
  email:
156
142
  - jeff.morgan@leandog.com
@@ -182,6 +168,7 @@ files:
182
168
  - lib/page-object/elements/button.rb
183
169
  - lib/page-object/elements/canvas.rb
184
170
  - lib/page-object/elements/check_box.rb
171
+ - lib/page-object/elements/date_field.rb
185
172
  - lib/page-object/elements/div.rb
186
173
  - lib/page-object/elements/element.rb
187
174
  - lib/page-object/elements/file_field.rb
@@ -243,8 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
230
  - !ruby/object:Gem::Version
244
231
  version: '0'
245
232
  requirements: []
246
- rubyforge_project:
247
- rubygems_version: 2.6.11
233
+ rubygems_version: 3.2.12
248
234
  signing_key:
249
235
  specification_version: 4
250
236
  summary: Page Object DSL for browser testing