unified_page_object 0.0.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 +7 -0
- data/.gitignore +3 -0
- data/Gemfile +2 -0
- data/Thorfile +6 -0
- data/lib/unified_page_object.rb +12 -0
- data/lib/unified_page_object/config.rb +38 -0
- data/lib/unified_page_object/util.rb +39 -0
- data/lib/unified_page_object/version.rb +4 -0
- data/readme.md +9 -0
- data/spec/web/pages/example_page.rb +7 -0
- data/spec/web/spec/pages_spec.rb +7 -0
- data/spec/web/spec_helper.rb +23 -0
- data/unified_page_object.gemspec +24 -0
- metadata +119 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0f8c7c15f911ffd337e3e15ec2f8c8525196a432
|
4
|
+
data.tar.gz: 544a7cf1d9eb16aef63d957a6ef00a7bf3e8bc08
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a2a39d197c64ae2582134e96312e1fd20b34aef4df25bf03f604714557f47fd1552ccb67e9627df1da744465c5363f384b657dfecaa119a37d8baedd45f63e9f
|
7
|
+
data.tar.gz: 27d46269e077e1fd7920029be54ede24fe5af36a4438ee38982e0a4355296d9affbd04630b9896a8baa9f80c941d5233319b2eb631bde4551f280e514aa70ab6
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Thorfile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# core
|
2
|
+
require 'singleton' # util.rb
|
3
|
+
|
4
|
+
# gems
|
5
|
+
require 'rubygems'
|
6
|
+
require 'rspec'
|
7
|
+
require 'selenium-webdriver'
|
8
|
+
|
9
|
+
# internal
|
10
|
+
require_relative 'unified_page_object/config'
|
11
|
+
require_relative 'unified_page_object/util'
|
12
|
+
require_relative 'unified_page_object/version'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module UnifiedPageObject
|
2
|
+
class << self
|
3
|
+
# Configures UnifiedPageObject to the target platform.
|
4
|
+
#
|
5
|
+
# @param platform [Symbol] the platform to target
|
6
|
+
# @return [void]
|
7
|
+
def configure opts
|
8
|
+
platform = opts[:platform]
|
9
|
+
driver = opts[:driver]
|
10
|
+
valid = [:web]
|
11
|
+
raise "Invalid platform '#{platform}'. Valid values: #{valid}" unless valid.include? platform
|
12
|
+
raise 'Must provide driver' if platform == :web && !driver
|
13
|
+
case platform
|
14
|
+
when :web
|
15
|
+
require 'page-object'
|
16
|
+
set_global_driver driver
|
17
|
+
end
|
18
|
+
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
22
|
+
# sets the global driver. only used for web platform.
|
23
|
+
# mobile will set this automatically via appium_lib
|
24
|
+
#
|
25
|
+
# @param driver [Driver] the driver to use. example: Selenium::WebDriver.for :firefox
|
26
|
+
def set_global_driver driver
|
27
|
+
return if $driver
|
28
|
+
# $driver.driver
|
29
|
+
$driver = Class.new do
|
30
|
+
attr_reader :driver
|
31
|
+
def initialize driver
|
32
|
+
@driver = driver
|
33
|
+
end
|
34
|
+
end.new(driver)
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module UnifiedPageObject
|
2
|
+
class << self
|
3
|
+
# Defines the page module class name in underscore case as a method
|
4
|
+
# on the test_class. The page class is transformed into a singleton.
|
5
|
+
#
|
6
|
+
# @param page_module [Module] the parent module for the pages
|
7
|
+
# @param test_class [Class] the class to define the methods on
|
8
|
+
# @return [void]
|
9
|
+
def define_page_methods opts={}
|
10
|
+
page_module = opts[:page_module]
|
11
|
+
raise 'must pass page_module' unless page_module
|
12
|
+
test_class = opts.fetch :test_class, RSpec::Core::ExampleGroup
|
13
|
+
page_module.constants.each do |page_class|
|
14
|
+
# set page name before the class is fully qualified.
|
15
|
+
# ButtonsPage => buttons_page
|
16
|
+
# https://github.com/rails/rails/blob/daaa21bc7d20f2e4ff451637423a25ff2d5e75c7/activesupport/lib/active_support/inflector/methods.rb#L96
|
17
|
+
page_name = page_class.to_s.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
18
|
+
|
19
|
+
# Pages::ButtonsPage
|
20
|
+
page_class = page_module.const_get page_class # transform symbol into fully qualified reference
|
21
|
+
|
22
|
+
page_class.include Singleton
|
23
|
+
|
24
|
+
# https://github.com/cheezy/page-object/blob/27c601042b3b7c1c1816b207c41cf43d7be95908/lib/page-object.rb#L59
|
25
|
+
# todo: support the rest of the page-object init method
|
26
|
+
page_class.class_eval do
|
27
|
+
def initialize
|
28
|
+
initialize_browser $driver.driver
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
test_class.send(:define_method, page_name) do
|
33
|
+
page_class.instance
|
34
|
+
end
|
35
|
+
end
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/readme.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rspec'
|
5
|
+
|
6
|
+
# load unified_page_object from source
|
7
|
+
require_relative '../../lib/unified_page_object'
|
8
|
+
|
9
|
+
# configure
|
10
|
+
UnifiedPageObject.configure platform: :web, driver: Selenium::WebDriver.for(:firefox)
|
11
|
+
|
12
|
+
# page objects
|
13
|
+
require_relative 'pages/example_page'
|
14
|
+
|
15
|
+
# create methods on RSpec for the page classes
|
16
|
+
UnifiedPageObject.define_page_methods page_module: Pages, test_class: RSpec::Core::ExampleGroup
|
17
|
+
|
18
|
+
# close browser after tests complete
|
19
|
+
RSpec.configure do |config|
|
20
|
+
config.after :all do
|
21
|
+
$driver.driver.quit if $driver.driver
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative 'lib/unified_page_object/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
# 1.8.x is not supported
|
5
|
+
s.required_ruby_version = '>= 1.9.3'
|
6
|
+
|
7
|
+
s.name = 'unified_page_object'
|
8
|
+
s.version = UnifiedPageObject::VERSION
|
9
|
+
s.date = UnifiedPageObject::DATE
|
10
|
+
s.license = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
|
11
|
+
s.description = s.summary = 'Unified page object'
|
12
|
+
s.description += '.' # avoid identical warning
|
13
|
+
s.authors = s.email = ['code@bootstraponline.com']
|
14
|
+
s.homepage = 'https://github.com/bootstraponline/unified_page_object'
|
15
|
+
s.require_paths = ['lib']
|
16
|
+
|
17
|
+
s.add_runtime_dependency 'page-object', '~> 1.0.2'
|
18
|
+
s.add_runtime_dependency 'rspec', '~> 3.0.0'
|
19
|
+
s.add_runtime_dependency 'selenium-webdriver', '~> 2.42.0'
|
20
|
+
|
21
|
+
s.add_development_dependency 'appium_thor', '~> 0.0', '>= 0.0.7'
|
22
|
+
|
23
|
+
s.files = `git ls-files`.split "\n"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: unified_page_object
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- code@bootstraponline.com
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: page-object
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: selenium-webdriver
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.42.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.42.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: appium_thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.0'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 0.0.7
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0.0'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.0.7
|
75
|
+
description: Unified page object.
|
76
|
+
email:
|
77
|
+
- code@bootstraponline.com
|
78
|
+
executables: []
|
79
|
+
extensions: []
|
80
|
+
extra_rdoc_files: []
|
81
|
+
files:
|
82
|
+
- ".gitignore"
|
83
|
+
- Gemfile
|
84
|
+
- Thorfile
|
85
|
+
- lib/unified_page_object.rb
|
86
|
+
- lib/unified_page_object/config.rb
|
87
|
+
- lib/unified_page_object/util.rb
|
88
|
+
- lib/unified_page_object/version.rb
|
89
|
+
- readme.md
|
90
|
+
- spec/web/pages/example_page.rb
|
91
|
+
- spec/web/spec/pages_spec.rb
|
92
|
+
- spec/web/spec_helper.rb
|
93
|
+
- unified_page_object.gemspec
|
94
|
+
homepage: https://github.com/bootstraponline/unified_page_object
|
95
|
+
licenses:
|
96
|
+
- http://www.apache.org/licenses/LICENSE-2.0.txt
|
97
|
+
metadata: {}
|
98
|
+
post_install_message:
|
99
|
+
rdoc_options: []
|
100
|
+
require_paths:
|
101
|
+
- lib
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 1.9.3
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
requirements: []
|
113
|
+
rubyforge_project:
|
114
|
+
rubygems_version: 2.2.2
|
115
|
+
signing_key:
|
116
|
+
specification_version: 4
|
117
|
+
summary: Unified page object
|
118
|
+
test_files: []
|
119
|
+
has_rdoc:
|