page-objectify 0.0.1 → 0.0.2
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/README.md +15 -12
- data/Rakefile +4 -0
- data/lib/page-objectify/config.rb +5 -4
- data/lib/page-objectify/generator.rb +30 -1
- data/lib/page-objectify/version.rb +1 -1
- data/page-objectify.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e417ae16edad20693749b84059c88413fae8636
|
4
|
+
data.tar.gz: 4db57673c01f2bf12050c57e06f2a9ab6304af44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f6785027783a751977dad1bde51b0028bac70eb94e43a269dcec69e12cf53df3fc7bd9094b6e056441be647589246d882a0a1073e608543fca1ab874ffbc2ea
|
7
|
+
data.tar.gz: d9c093ed86d7f5a1396783e5ffee3df5306b010a34df03d8231270a8b6583c60a8e110831c63cde95162f388f69e72a5b47ac22cfca755b1fde8ce9eafefdc3a
|
data/README.md
CHANGED
@@ -51,16 +51,10 @@ require "page-objectify/generator"
|
|
51
51
|
require "watir-webdriver"
|
52
52
|
|
53
53
|
class GooglePageGenerator < PageObjectify::Generator
|
54
|
-
# Overriding the constructor here is optional
|
55
|
-
def initialize
|
56
|
-
super(file: "path/to/pages-dir/google_page.rb")
|
57
|
-
end
|
58
|
-
|
59
54
|
def visit
|
60
55
|
@browser = Watir::Browser.new :chrome
|
61
56
|
@browser.goto "www.google.com"
|
62
|
-
|
63
|
-
sleep 1
|
57
|
+
sleep 1 # Use `wait_for_ajax` instead of `sleep`, if jQuery is available on the page!
|
64
58
|
end
|
65
59
|
end
|
66
60
|
```
|
@@ -69,15 +63,16 @@ end
|
|
69
63
|
# Rakefile
|
70
64
|
require "generators/google_page_generator"
|
71
65
|
|
72
|
-
namespace :
|
73
|
-
task :
|
74
|
-
|
66
|
+
namespace :generate do
|
67
|
+
task :po do
|
68
|
+
# Specifying file path is optional
|
69
|
+
GooglePageGenerator.new(file: "path/to/pages-dir/google_page.rb").generate!
|
75
70
|
# and any other pages you want to generate programmatically
|
76
71
|
end
|
77
72
|
end
|
78
73
|
```
|
79
74
|
|
80
|
-
Then, upon executing the rake task `$ bundle exec rake po
|
75
|
+
Then, upon executing the rake task `$ bundle exec rake generate:po`, the following file will be generated:
|
81
76
|
|
82
77
|
```ruby
|
83
78
|
class GooglePage < BasePage
|
@@ -104,7 +99,15 @@ PageObjectify::Logging.logger.level = 0
|
|
104
99
|
|
105
100
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
106
101
|
|
107
|
-
To install this gem onto your local machine, run `bundle exec rake install`.
|
102
|
+
To install this gem onto your local machine, run `bundle exec rake install`.
|
103
|
+
|
104
|
+
## Releasing
|
105
|
+
|
106
|
+
To release a new version, I must:
|
107
|
+
|
108
|
+
0. Update the version number in `version.rb`.
|
109
|
+
0. Run `rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
110
|
+
0. Run `rake changelog`, which will auto-generate a changelog of the PRs merged/Issues resolved in the newest release.
|
108
111
|
|
109
112
|
## Contributing
|
110
113
|
|
data/Rakefile
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module PageObjectify
|
2
2
|
class Config
|
3
|
-
attr_reader :page, :base, :file
|
3
|
+
attr_reader :generator_class, :page, :base, :file
|
4
4
|
|
5
5
|
def initialize(**keywords)
|
6
|
-
|
7
|
-
|
6
|
+
@generator_class = keywords[:generator_class] # => "GooglePageGenerator"
|
7
|
+
truncated = @generator_class.chomp("Generator")
|
8
|
+
@page = keywords[:page] || truncated # => "GooglePage"
|
8
9
|
@base = keywords[:base] || "BasePage"
|
9
|
-
@file = keywords[:file] || "#{underscorize(truncated)}.rb"
|
10
|
+
@file = keywords[:file] || "#{underscorize(truncated)}.rb" # => google_page.rb
|
10
11
|
validate_configs
|
11
12
|
end
|
12
13
|
|
@@ -29,7 +29,7 @@ module PageObjectify
|
|
29
29
|
@code.each_line { |line| logger.debug line.chomp }
|
30
30
|
logger.debug "** END GENERATED CODE **"
|
31
31
|
|
32
|
-
|
32
|
+
write_to_disk
|
33
33
|
|
34
34
|
teardown
|
35
35
|
end
|
@@ -38,8 +38,37 @@ module PageObjectify
|
|
38
38
|
@browser.quit
|
39
39
|
end
|
40
40
|
|
41
|
+
# Wait until the number of pending AJAX requests drops to zero. Assumes
|
42
|
+
# jQuery is available on the page; behavior is undefined if it's not.
|
43
|
+
#
|
44
|
+
# Raises Watir::Wait::TimeoutError exception if timeout is exceeded.
|
45
|
+
# Raises Selenium::WebDriver::Error::UnknownError: { "errorMessage":"Can't find variable: jQuery", ... } if jQuery is not loaded on page.
|
46
|
+
def wait_for_ajax(timeout = 3, interval = 0.5)
|
47
|
+
require "watir-webdriver/wait" unless defined?(Watir)
|
48
|
+
(timeout / interval).to_i.times do
|
49
|
+
return true if @browser.execute_script('return jQuery.active').to_i == 0
|
50
|
+
sleep interval
|
51
|
+
end
|
52
|
+
|
53
|
+
raise Watir::Wait::TimeoutError, "Timeout of #{timeout} seconds exceeded on waiting for Ajax."
|
54
|
+
end
|
55
|
+
|
41
56
|
private
|
42
57
|
|
58
|
+
def write_to_disk
|
59
|
+
final = <<-BANNER.gsub(/^\s*\|/, '')
|
60
|
+
|# This configuration was generated by calling:
|
61
|
+
|# #{@config.generator_class}.new.generate!
|
62
|
+
|# on #{Time.now} using PageObjectify version #{PageObjectify::VERSION}.
|
63
|
+
|# Note that changes to the underlying page that this page class is modeling, or
|
64
|
+
|# new versions of PageObjectify, may require this file to be generated again.
|
65
|
+
BANNER
|
66
|
+
final << @code
|
67
|
+
File.open(@config.file, 'w') do |file|
|
68
|
+
file.write(final)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
43
72
|
def execute_runtime_checks
|
44
73
|
fail "@browser variable must be a Watir::Browser instance! @browser=#{@browser.inspect}" unless @browser.is_a?(Watir::Browser)
|
45
74
|
fail "Cannot get current page HTML!" unless @browser.respond_to?(:html)
|
data/page-objectify.gemspec
CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency "aruba", "~> 0.10.0"
|
33
33
|
spec.add_development_dependency "bundler", "~> 1.10"
|
34
34
|
spec.add_development_dependency "chromedriver-helper", "~> 1.0"
|
35
|
+
spec.add_development_dependency "github_changelog_generator", "~> 1.9"
|
35
36
|
spec.add_development_dependency "phantomjs", "~> 1.9"
|
36
37
|
spec.add_development_dependency "rake", "~> 10.0"
|
37
38
|
spec.add_development_dependency "rspec", "~> 3.3"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page-objectify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shujon Mollah
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: github_changelog_generator
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.9'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.9'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: phantomjs
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|