page-object 2.2.3 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|