page-object 2.2.6 → 2.3.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.
- checksums.yaml +4 -4
- 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 +923 -916
- 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 -209
- 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 -85
- 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 -105
- 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 +32 -32
- metadata +8 -7
@@ -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.0"
|
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,32 @@
|
|
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 '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'
|
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 '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'
|
31
|
+
|
32
|
+
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.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Morgan
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-03-03 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
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 6.10.3
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 6.10.3
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: selenium-webdriver
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -182,6 +182,7 @@ files:
|
|
182
182
|
- lib/page-object/elements/button.rb
|
183
183
|
- lib/page-object/elements/canvas.rb
|
184
184
|
- lib/page-object/elements/check_box.rb
|
185
|
+
- lib/page-object/elements/date_field.rb
|
185
186
|
- lib/page-object/elements/div.rb
|
186
187
|
- lib/page-object/elements/element.rb
|
187
188
|
- lib/page-object/elements/file_field.rb
|
@@ -243,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
244
|
- !ruby/object:Gem::Version
|
244
245
|
version: '0'
|
245
246
|
requirements: []
|
246
|
-
rubygems_version: 3.
|
247
|
+
rubygems_version: 3.1.2
|
247
248
|
signing_key:
|
248
249
|
specification_version: 4
|
249
250
|
summary: Page Object DSL for browser testing
|