page_magic 1.0.0.alpha20 → 1.0.0.alpha21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/circle.yml +3 -0
- data/lib/page_magic/class_methods.rb +14 -0
- data/lib/page_magic/instance_methods.rb +0 -6
- data/lib/page_magic.rb +6 -0
- data/spec/element_spec.rb +4 -7
- data/spec/page_magic/class_methods_spec.rb +19 -1
- data/spec/page_magic/element_context_spec.rb +1 -1
- data/spec/page_magic/instance_methods_spec.rb +4 -9
- data/spec/support/shared_contexts/webapp_context.rb +14 -12
- metadata +1 -4
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/page_magic.gemspec +0 -76
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 115f37789b407f0f922654cec028ab74268132c4
|
4
|
+
data.tar.gz: ad52bf172b7e0ebd649f738c86e418c47c57a70f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a3d128c9dbf70e10c7aae8ddef2c48603714b625634639b8b559af1870655a114c9f706447add67e906ed4cd087e905dc827492798b8b71166455e1cade255b
|
7
|
+
data.tar.gz: 6428d9dc270bc4768556e102a68bf0014817c05e3c947e467fc7cad3868b3cf7ad0007cf34a16cab24fc9cb8d23502192509103d6ca9799efe4f8c514c352337
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ It has a simple but powerful DSL which makes modelling and interacting with your
|
|
7
7
|
Wouldn't it be great if there was a framework that could:
|
8
8
|
- [Model your pages](#modelling-pages)
|
9
9
|
- [Fluently define interaction hooks / waiters on page elements](#interaction-hooks)
|
10
|
-
- [
|
10
|
+
- [Map paths to pages so that the correct page object is loaded as you navigate](#page-mapping)
|
11
11
|
- [Be super dynamic](#dynamic-selectors)
|
12
12
|
|
13
13
|
Well PageMagic might just be the answer!
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.0.
|
1
|
+
1.0.0.alpha21
|
data/circle.yml
CHANGED
@@ -16,5 +16,19 @@ module PageMagic
|
|
16
16
|
return @on_load || DEFAULT_ON_LOAD unless block
|
17
17
|
@on_load = block
|
18
18
|
end
|
19
|
+
|
20
|
+
# Visit this page based on the class level registered url
|
21
|
+
# @param [Object] application rack application (optional)
|
22
|
+
# @param [Symbol] browser name of browser
|
23
|
+
# @param [Hash] options browser driver specific options
|
24
|
+
# @return [Session] active session configured to be using an instance of the page object modeled by this class
|
25
|
+
def visit(application: nil, browser: :rack_test, options: {})
|
26
|
+
session_options = { browser: browser, options: options, url: url }
|
27
|
+
session_options[:application] = application if application
|
28
|
+
|
29
|
+
PageMagic.session(session_options).tap do |session|
|
30
|
+
session.visit(self, url: url)
|
31
|
+
end
|
32
|
+
end
|
19
33
|
end
|
20
34
|
end
|
@@ -24,12 +24,6 @@ module PageMagic
|
|
24
24
|
text.downcase.include?(string.downcase)
|
25
25
|
end
|
26
26
|
|
27
|
-
# Visit this page based on the class level registered url
|
28
|
-
def visit
|
29
|
-
browser.visit self.class.url
|
30
|
-
execute_on_load
|
31
|
-
end
|
32
|
-
|
33
27
|
# @return the page text
|
34
28
|
def text
|
35
29
|
browser.text
|
data/lib/page_magic.rb
CHANGED
@@ -16,6 +16,12 @@ module PageMagic
|
|
16
16
|
@drivers ||= Drivers.new.tap(&:load)
|
17
17
|
end
|
18
18
|
|
19
|
+
# Visit this page based on the class level registered url
|
20
|
+
# @param [Object] application rack application (optional)
|
21
|
+
# @param [Symbol] browser name of browser
|
22
|
+
# @param [String] url url to start the session on
|
23
|
+
# @param [Hash] options browser driver specific options
|
24
|
+
# @return [Session] configured sessoin
|
19
25
|
def session(application: nil, browser: :rack_test, url:, options: {})
|
20
26
|
driver = drivers.find(browser)
|
21
27
|
fail UnspportedBrowserException unless driver
|
data/spec/element_spec.rb
CHANGED
@@ -10,9 +10,9 @@ module PageMagic
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
let(:
|
14
|
-
|
15
|
-
|
13
|
+
let(:session) { page_class.visit(application: rack_app) }
|
14
|
+
|
15
|
+
let(:page) { session.current_page }
|
16
16
|
|
17
17
|
describe 'inheriting' do
|
18
18
|
it 'lets you create custom elements' do
|
@@ -62,14 +62,11 @@ module PageMagic
|
|
62
62
|
describe '#browser_element' do
|
63
63
|
let!(:browser) { double('browser') }
|
64
64
|
|
65
|
-
it 'calls the on_load hook' do
|
66
|
-
end
|
67
|
-
|
68
65
|
context 'options supplied to selector' do
|
69
66
|
it 'passes them on to the cappybara finder method' do
|
70
67
|
options = { count: 1 }
|
71
68
|
xpath_selector = '//div/input'
|
72
|
-
expect(
|
69
|
+
expect(page.session.raw_session).to receive(:find).with(:xpath, xpath_selector, options)
|
73
70
|
described_class.new(:my_input,
|
74
71
|
page,
|
75
72
|
type: :text_field,
|
@@ -1,7 +1,10 @@
|
|
1
1
|
module PageMagic
|
2
2
|
describe ClassMethods do
|
3
3
|
subject do
|
4
|
-
|
4
|
+
Class.new.tap do |clazz|
|
5
|
+
clazz.extend(described_class)
|
6
|
+
clazz.include(InstanceMethods)
|
7
|
+
end
|
5
8
|
end
|
6
9
|
describe '#url' do
|
7
10
|
it 'get/sets a value' do
|
@@ -25,5 +28,20 @@ module PageMagic
|
|
25
28
|
end
|
26
29
|
end
|
27
30
|
end
|
31
|
+
|
32
|
+
describe '#visit' do
|
33
|
+
include_context :webapp_fixture
|
34
|
+
it 'passes all options to create an active session on the registered url' do
|
35
|
+
subject.url '/page1'
|
36
|
+
expect(PageMagic).to receive(:session).with(application: rack_app,
|
37
|
+
options: {},
|
38
|
+
browser: :rack_test,
|
39
|
+
url: subject.url).and_call_original
|
40
|
+
|
41
|
+
session = subject.visit(application: rack_app, options: {}, browser: :rack_test)
|
42
|
+
|
43
|
+
expect(session.title).to eq('page1')
|
44
|
+
end
|
45
|
+
end
|
28
46
|
end
|
29
47
|
end
|
@@ -11,12 +11,12 @@ module PageMagic
|
|
11
11
|
end
|
12
12
|
|
13
13
|
subject do
|
14
|
-
page_class.
|
14
|
+
page_class.visit(application: rack_app)
|
15
15
|
end
|
16
16
|
|
17
17
|
describe 'execute_on_load' do
|
18
18
|
it 'runs the on_load_hook in the context of self' do
|
19
|
-
instance = subject
|
19
|
+
instance = subject.current_page
|
20
20
|
page_class.on_load do
|
21
21
|
extend RSpec::Matchers
|
22
22
|
expect(self).to be(instance)
|
@@ -26,7 +26,7 @@ module PageMagic
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'returns self' do
|
29
|
-
expect(subject.execute_on_load).to be(subject)
|
29
|
+
expect(subject.execute_on_load).to be(subject.current_page)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -44,16 +44,11 @@ module PageMagic
|
|
44
44
|
it 'goes to the class define url' do
|
45
45
|
expect(subject.session.current_path).to eq('/page1')
|
46
46
|
end
|
47
|
-
|
48
|
-
it 'runs the on load handler' do
|
49
|
-
expect(subject).to receive(:execute_on_load).and_call_original
|
50
|
-
subject.visit
|
51
|
-
end
|
52
47
|
end
|
53
48
|
|
54
49
|
describe 'session' do
|
55
50
|
it 'gives access to the page magic object wrapping the user session' do
|
56
|
-
expect(subject.session.raw_session).to
|
51
|
+
expect(subject.session.raw_session).to be_a(Capybara::Session)
|
57
52
|
end
|
58
53
|
end
|
59
54
|
|
@@ -1,17 +1,18 @@
|
|
1
1
|
shared_context :webapp_fixture do
|
2
2
|
require 'sinatra/base'
|
3
3
|
|
4
|
-
rack_app
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
'
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
4
|
+
let(:rack_app) do
|
5
|
+
Class.new(Sinatra::Base) do
|
6
|
+
get '/page1' do
|
7
|
+
"<html><head><title>page1</title></head><body><a href='/page2'>next page</a></body></html>"
|
8
|
+
end
|
9
|
+
|
10
|
+
get '/page2' do
|
11
|
+
'page 2 content'
|
12
|
+
end
|
13
|
+
|
14
|
+
get '/elements' do
|
15
|
+
<<-ELEMENTS
|
15
16
|
<a href='#'>a link</a>
|
16
17
|
|
17
18
|
|
@@ -23,7 +24,8 @@ shared_context :webapp_fixture do
|
|
23
24
|
<input id='form_button' type='submit' value='a button'/>
|
24
25
|
</form>
|
25
26
|
|
26
|
-
|
27
|
+
ELEMENTS
|
28
|
+
end
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page_magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.alpha21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leon Davis
|
@@ -133,8 +133,6 @@ files:
|
|
133
133
|
- ".pullreview.yml"
|
134
134
|
- ".rspec"
|
135
135
|
- ".rubocop.yml"
|
136
|
-
- ".ruby-gemset"
|
137
|
-
- ".ruby-version"
|
138
136
|
- ".simplecov"
|
139
137
|
- ".yardopts"
|
140
138
|
- Gemfile
|
@@ -160,7 +158,6 @@ files:
|
|
160
158
|
- lib/page_magic/exceptions.rb
|
161
159
|
- lib/page_magic/instance_methods.rb
|
162
160
|
- lib/page_magic/session.rb
|
163
|
-
- page_magic.gemspec
|
164
161
|
- spec/element_spec.rb
|
165
162
|
- spec/member_methods_spec.rb
|
166
163
|
- spec/page_magic/class_methods_spec.rb
|
data/.ruby-gemset
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
page_magic
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.1
|
data/page_magic.gemspec
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = 'page_magic'
|
8
|
-
s.version = '0.11.0.alpha3'
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new('> 1.3.1') if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ['Leon Davis']
|
12
|
-
s.date = '2014-04-05'
|
13
|
-
s.description = 'Framework for modeling and interacting with webpages which wraps capybara'
|
14
|
-
s.email = 'info@lad-tech.com'
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
'README.md'
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
'.rspec',
|
20
|
-
'.ruby-gemset',
|
21
|
-
'.ruby-version',
|
22
|
-
'.travis.yml',
|
23
|
-
'Gemfile',
|
24
|
-
'Gemfile.lock',
|
25
|
-
'README.md',
|
26
|
-
'Rakefile',
|
27
|
-
'VERSION',
|
28
|
-
'lib/ext/string.rb',
|
29
|
-
'lib/page_magic.rb',
|
30
|
-
'lib/page_magic/ajax_support.rb',
|
31
|
-
'lib/page_magic/browser.rb',
|
32
|
-
'lib/page_magic/element.rb',
|
33
|
-
'lib/page_magic/element_context.rb',
|
34
|
-
'lib/page_magic/elements.rb',
|
35
|
-
'lib/page_magic/exceptions.rb',
|
36
|
-
'lib/page_magic/page_magic.rb',
|
37
|
-
'lib/page_magic/session.rb',
|
38
|
-
'page_magic.gemspec',
|
39
|
-
'spec/browser_spec.rb',
|
40
|
-
'spec/element_context_spec.rb',
|
41
|
-
'spec/element_spec.rb',
|
42
|
-
'spec/helpers/capybara.rb',
|
43
|
-
'spec/member_methods_spec.rb',
|
44
|
-
'spec/page_magic/elements_spec.rb',
|
45
|
-
'spec/page_magic/usage/defining_page_elements_spec.rb',
|
46
|
-
'spec/page_magic/usage/defining_pages_spec.rb',
|
47
|
-
'spec/page_magic/usage/include_page_magic_spec.rb',
|
48
|
-
'spec/page_magic/usage/interacting_with_pages_spec.rb',
|
49
|
-
'spec/page_magic/usage/starting_a_session_spec.rb',
|
50
|
-
'spec/session_spec.rb',
|
51
|
-
'spec/spec_helper.rb'
|
52
|
-
]
|
53
|
-
s.homepage = 'https://github.com/ladtech/page_magic'
|
54
|
-
s.licenses = ['ruby']
|
55
|
-
s.require_paths = ['lib']
|
56
|
-
s.rubygems_version = '2.0.3'
|
57
|
-
s.summary = 'Framework for modeling and interacting with webpages'
|
58
|
-
|
59
|
-
if s.respond_to? :specification_version
|
60
|
-
s.specification_version = 4
|
61
|
-
|
62
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0')
|
63
|
-
s.add_runtime_dependency('capybara', ['>= 0'])
|
64
|
-
s.add_runtime_dependency('wait', ['>= 0'])
|
65
|
-
s.add_development_dependency('jeweler', ['>= 0'])
|
66
|
-
else
|
67
|
-
s.add_dependency('capybara', ['>= 0'])
|
68
|
-
s.add_dependency('wait', ['>= 0'])
|
69
|
-
s.add_dependency('jeweler', ['>= 0'])
|
70
|
-
end
|
71
|
-
else
|
72
|
-
s.add_dependency('capybara', ['>= 0'])
|
73
|
-
s.add_dependency('wait', ['>= 0'])
|
74
|
-
s.add_dependency('jeweler', ['>= 0'])
|
75
|
-
end
|
76
|
-
end
|