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.
@@ -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
@@ -0,0 +1,3 @@
1
+ .idea/
2
+ .DS*
3
+ *.lock
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,6 @@
1
+ require 'appium_thor'
2
+
3
+ Appium::Thor::Config.set do
4
+ gem_name 'unified_page_object'
5
+ github_owner 'bootstraponline'
6
+ end
@@ -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
@@ -0,0 +1,4 @@
1
+ module UnifiedPageObject
2
+ VERSION = '0.0.1' unless defined? ::UnifiedPageObject::VERSION
3
+ DATE = '2014-08-04' unless defined? ::UnifiedPageObject::DATE
4
+ end
@@ -0,0 +1,9 @@
1
+ rspec + page object for web/ios/android
2
+
3
+ --
4
+
5
+ API based on
6
+
7
+ - [page-object](https://github.com/cheezy/page-object)
8
+ - [gametel](https://github.com/leandog/gametel)
9
+ - [furter](https://github.com/leviwilson/furter)
@@ -0,0 +1,7 @@
1
+ module Pages
2
+ class ExamplePage
3
+ include PageObject
4
+
5
+ page_url 'http://www.google.com/'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe 'example spec' do
4
+ it 'runs without crashing' do
5
+ example_page.goto
6
+ end
7
+ end
@@ -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: