unified_page_object 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: