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.
- checksums.yaml +5 -5
- data/.coveralls.yml +1 -1
- data/.gitignore +8 -8
- data/.rspec +2 -2
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/.travis.yml +17 -17
- data/ChangeLog +928 -899
- data/Gemfile +13 -13
- data/Guardfile +20 -20
- data/LICENSE +20 -20
- data/README.md +114 -114
- data/Rakefile +29 -29
- data/cucumber.yml +8 -8
- data/lib/page-object.rb +431 -420
- data/lib/page-object/accessors.rb +1201 -1175
- data/lib/page-object/element_locators.rb +21 -21
- data/lib/page-object/elements.rb +62 -61
- data/lib/page-object/elements/area.rb +9 -9
- data/lib/page-object/elements/audio.rb +9 -9
- data/lib/page-object/elements/bold.rb +9 -9
- data/lib/page-object/elements/button.rb +12 -12
- data/lib/page-object/elements/canvas.rb +10 -10
- data/lib/page-object/elements/check_box.rb +9 -9
- data/lib/page-object/elements/date_field.rb +10 -0
- data/lib/page-object/elements/div.rb +9 -9
- data/lib/page-object/elements/element.rb +212 -216
- data/lib/page-object/elements/file_field.rb +9 -9
- data/lib/page-object/elements/form.rb +9 -9
- data/lib/page-object/elements/heading.rb +14 -14
- data/lib/page-object/elements/hidden_field.rb +9 -9
- data/lib/page-object/elements/image.rb +10 -10
- data/lib/page-object/elements/italic.rb +9 -9
- data/lib/page-object/elements/label.rb +9 -9
- data/lib/page-object/elements/link.rb +9 -9
- data/lib/page-object/elements/list_item.rb +9 -9
- data/lib/page-object/elements/media.rb +11 -11
- data/lib/page-object/elements/option.rb +9 -9
- data/lib/page-object/elements/ordered_list.rb +43 -43
- data/lib/page-object/elements/paragraph.rb +9 -9
- data/lib/page-object/elements/radio_button.rb +9 -9
- data/lib/page-object/elements/select_list.rb +42 -42
- data/lib/page-object/elements/span.rb +9 -9
- data/lib/page-object/elements/table.rb +85 -68
- data/lib/page-object/elements/table_cell.rb +10 -10
- data/lib/page-object/elements/table_row.rb +52 -52
- data/lib/page-object/elements/text_area.rb +9 -9
- data/lib/page-object/elements/text_field.rb +10 -10
- data/lib/page-object/elements/unordered_list.rb +42 -42
- data/lib/page-object/elements/video.rb +9 -9
- data/lib/page-object/indexed_properties.rb +41 -41
- data/lib/page-object/javascript/angularjs.rb +14 -14
- data/lib/page-object/javascript/jquery.rb +14 -14
- data/lib/page-object/javascript/prototype.rb +14 -14
- data/lib/page-object/javascript/yui.rb +18 -18
- data/lib/page-object/javascript_framework_facade.rb +80 -80
- data/lib/page-object/locator_generator.rb +183 -182
- data/lib/page-object/nested_elements.rb +17 -17
- data/lib/page-object/page_factory.rb +108 -108
- data/lib/page-object/page_populator.rb +105 -93
- data/lib/page-object/platforms/watir.rb +50 -50
- data/lib/page-object/platforms/watir/page_object.rb +1155 -1124
- data/lib/page-object/section_collection.rb +16 -16
- data/lib/page-object/version.rb +4 -4
- data/lib/page-object/widgets.rb +98 -98
- data/page-object.gemspec +31 -32
- 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
|
data/lib/page-object/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module PageObject
|
2
|
-
# @private
|
3
|
-
VERSION = "2.
|
4
|
-
end
|
1
|
+
module PageObject
|
2
|
+
# @private
|
3
|
+
VERSION = "2.3.1"
|
4
|
+
end
|
data/lib/page-object/widgets.rb
CHANGED
@@ -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', '
|
21
|
-
s.add_dependency '
|
22
|
-
|
23
|
-
|
24
|
-
s.add_development_dependency '
|
25
|
-
s.add_development_dependency '
|
26
|
-
s.add_development_dependency '
|
27
|
-
s.add_development_dependency '
|
28
|
-
s.add_development_dependency '
|
29
|
-
s.add_development_dependency '
|
30
|
-
|
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.
|
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:
|
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:
|
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:
|
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: '
|
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: '
|
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
|
-
|
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
|