page_magic 0.11.0.alpha5 → 0.11.0.alpha6
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/VERSION +1 -1
- data/lib/page_magic/element_context.rb +2 -15
- data/lib/page_magic/session.rb +34 -11
- data/page_magic.gemspec +6 -6
- data/spec/page_magic/element_context_spec.rb +0 -26
- data/spec/page_magic/session_spec.rb +51 -27
- data/spec/page_magic/usage/defining_pages_spec.rb +1 -1
- metadata +3 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56f774d5606a8b3fbe8f0e8ea337bd54bd360d70
|
4
|
+
data.tar.gz: 318201438260f08156d1afa43a5baa2479143eb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce887cd3a1b4e3d8fbd6cd0c82b9d78036d46f075c821d213049ef60ff6ec453c601bb55f79359dae1bfab91d4aa1443dfbd8e4aef10b6ea873aee5c618c5a0f
|
7
|
+
data.tar.gz: 5b0b401f94a6d9fb856efc935157fb3a9754fb98d004c1fdb1590e440b79353ad97ba923970fe8c968bf0b0b686bb0f88b7e88812d46f8a61dc320d82c4b0531
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0.alpha2
|
@@ -18,15 +18,8 @@ module PageMagic
|
|
18
18
|
return @caller.send(method, *args) if @executing_hooks
|
19
19
|
return @page_element.send(method, *args) if @page_element.methods.include?(method)
|
20
20
|
|
21
|
-
|
22
21
|
element_locator_factory = @page_element.element_definitions[method]
|
23
22
|
|
24
|
-
action = nil
|
25
|
-
unless element_locator_factory
|
26
|
-
action = resolve_action(method)
|
27
|
-
element_locator_factory = @page_element.element_definitions[method.to_s.gsub("#{action}_", '').to_sym]
|
28
|
-
end
|
29
|
-
|
30
23
|
raise ElementMissingException, "Could not find: #{method}" unless element_locator_factory
|
31
24
|
|
32
25
|
if args.empty?
|
@@ -37,7 +30,7 @@ module PageMagic
|
|
37
30
|
|
38
31
|
result = element_locator.browser_element
|
39
32
|
|
40
|
-
return element_locator if element_locator.section?
|
33
|
+
return element_locator if element_locator.section?
|
41
34
|
|
42
35
|
[:set, :select_option, :unselect_option, :click].each do |action_method|
|
43
36
|
apply_hooks(page_element: result,
|
@@ -47,13 +40,7 @@ module PageMagic
|
|
47
40
|
)
|
48
41
|
end
|
49
42
|
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
def resolve_action(field)
|
54
|
-
{/^click_/ => :click}.each do |prefix, action|
|
55
|
-
return action if field.to_s =~ prefix
|
56
|
-
end
|
43
|
+
result
|
57
44
|
end
|
58
45
|
|
59
46
|
def apply_hooks(options)
|
data/lib/page_magic/session.rb
CHANGED
@@ -1,30 +1,53 @@
|
|
1
1
|
require 'wait'
|
2
2
|
module PageMagic
|
3
3
|
class Session
|
4
|
-
attr_accessor :current_page, :raw_session
|
4
|
+
attr_accessor :current_page, :raw_session, :transitions
|
5
5
|
|
6
6
|
def initialize browser
|
7
7
|
@raw_session = browser
|
8
8
|
end
|
9
9
|
|
10
|
+
def define_page_mappings transitions
|
11
|
+
@transitions = transitions
|
12
|
+
end
|
13
|
+
|
14
|
+
def current_page
|
15
|
+
if transitions
|
16
|
+
mapping = find_mapped_page(current_path)
|
17
|
+
@current_page = mapping.new(self) if mapping
|
18
|
+
end
|
19
|
+
@current_page
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_mapped_page path
|
23
|
+
mapping = transitions.keys.find do |key|
|
24
|
+
string_matches?(path, key)
|
25
|
+
end
|
26
|
+
transitions[mapping]
|
27
|
+
end
|
28
|
+
|
29
|
+
def string_matches?(string, matcher)
|
30
|
+
if matcher.is_a?(Regexp)
|
31
|
+
string =~ matcher
|
32
|
+
elsif matcher.is_a?(String)
|
33
|
+
string == matcher
|
34
|
+
else
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
10
39
|
def visit page
|
11
|
-
|
40
|
+
raw_session.visit page.url
|
12
41
|
@current_page = page.new self
|
13
42
|
self
|
14
43
|
end
|
15
44
|
|
16
45
|
def current_path
|
17
|
-
|
46
|
+
raw_session.current_path
|
18
47
|
end
|
19
48
|
|
20
49
|
def current_url
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
def move_to page_class
|
25
|
-
page_class = eval(page_class) if page_class.is_a?(String)
|
26
|
-
@current_page = page_class.new self
|
27
|
-
wait_until { raw_session.current_url == page_class.url }
|
50
|
+
raw_session.current_url
|
28
51
|
end
|
29
52
|
|
30
53
|
def wait_until &block
|
@@ -33,7 +56,7 @@ module PageMagic
|
|
33
56
|
end
|
34
57
|
|
35
58
|
def method_missing name, *args, &block
|
36
|
-
|
59
|
+
current_page.send(name, *args, &block)
|
37
60
|
end
|
38
61
|
|
39
62
|
end
|
data/page_magic.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "page_magic"
|
8
|
-
s.version = "0.11.0.
|
8
|
+
s.version = "0.11.0.alpha6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Leon Davis"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2015-07-03"
|
13
13
|
s.description = "Framework for modeling and interacting with webpages which wraps capybara"
|
14
14
|
s.email = "info@lad-tech.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -22,12 +22,12 @@ Gem::Specification.new do |s|
|
|
22
22
|
".travis.yml",
|
23
23
|
"Gemfile",
|
24
24
|
"Gemfile.lock",
|
25
|
+
"Guardfile",
|
25
26
|
"README.md",
|
26
27
|
"Rakefile",
|
27
28
|
"VERSION",
|
28
29
|
"lib/ext/string.rb",
|
29
30
|
"lib/page_magic.rb",
|
30
|
-
"lib/page_magic/ajax_support.rb",
|
31
31
|
"lib/page_magic/browser.rb",
|
32
32
|
"lib/page_magic/element.rb",
|
33
33
|
"lib/page_magic/element_context.rb",
|
@@ -36,18 +36,18 @@ Gem::Specification.new do |s|
|
|
36
36
|
"lib/page_magic/page_magic.rb",
|
37
37
|
"lib/page_magic/session.rb",
|
38
38
|
"page_magic.gemspec",
|
39
|
-
"spec/browser_spec.rb",
|
40
|
-
"spec/element_context_spec.rb",
|
41
39
|
"spec/element_spec.rb",
|
42
40
|
"spec/helpers/capybara.rb",
|
43
41
|
"spec/member_methods_spec.rb",
|
42
|
+
"spec/page_magic/browser_spec.rb",
|
43
|
+
"spec/page_magic/element_context_spec.rb",
|
44
44
|
"spec/page_magic/elements_spec.rb",
|
45
|
+
"spec/page_magic/session_spec.rb",
|
45
46
|
"spec/page_magic/usage/defining_page_elements_spec.rb",
|
46
47
|
"spec/page_magic/usage/defining_pages_spec.rb",
|
47
48
|
"spec/page_magic/usage/include_page_magic_spec.rb",
|
48
49
|
"spec/page_magic/usage/interacting_with_pages_spec.rb",
|
49
50
|
"spec/page_magic/usage/starting_a_session_spec.rb",
|
50
|
-
"spec/session_spec.rb",
|
51
51
|
"spec/spec_helper.rb"
|
52
52
|
]
|
53
53
|
s.homepage = "https://github.com/ladtech/page_magic"
|
@@ -61,18 +61,6 @@ describe PageMagic::ElementContext do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
describe 'actions' do
|
65
|
-
it 'should click the element' do
|
66
|
-
page = page1.new
|
67
|
-
page.visit
|
68
|
-
|
69
|
-
described_class.new(page, page.browser, self).click_next
|
70
|
-
page.session.current_path.should == '/page2'
|
71
|
-
page.text.should == 'page 2 content'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
64
|
describe 'accessing page sections' do
|
77
65
|
it 'should go through page sections' do
|
78
66
|
|
@@ -89,20 +77,6 @@ describe PageMagic::ElementContext do
|
|
89
77
|
described_class.new(page, page.browser, self).form
|
90
78
|
end
|
91
79
|
|
92
|
-
it 'they are clickable too' do
|
93
|
-
elements_page.class_eval do
|
94
|
-
section :section do
|
95
|
-
selector id: 'form_link'
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
page = elements_page.new
|
100
|
-
page.visit
|
101
|
-
|
102
|
-
|
103
|
-
described_class.new(page, page.browser, self).click_section
|
104
|
-
page.session.current_path.should == '/page2'
|
105
|
-
end
|
106
80
|
|
107
81
|
it 'should delegate to page element if method not found' do
|
108
82
|
#TODO call page method, look for subelement, delagate to capybara object
|
@@ -3,7 +3,7 @@ describe PageMagic::Session do
|
|
3
3
|
let(:page) do
|
4
4
|
Class.new do
|
5
5
|
include PageMagic
|
6
|
-
url
|
6
|
+
url '/page1'
|
7
7
|
|
8
8
|
def my_method
|
9
9
|
:called
|
@@ -20,6 +20,56 @@ describe PageMagic::Session do
|
|
20
20
|
|
21
21
|
let(:browser) { double('browser', current_url: 'url') }
|
22
22
|
|
23
|
+
describe '#current_page' do
|
24
|
+
subject do
|
25
|
+
PageMagic::Session.new(browser).tap do |session|
|
26
|
+
session.define_page_mappings '/another_page1' => another_page_class
|
27
|
+
end
|
28
|
+
end
|
29
|
+
context 'page url has not changed' do
|
30
|
+
it 'returns the original page' do
|
31
|
+
browser.should_receive(:visit).with(page.url)
|
32
|
+
allow(browser).to receive(:current_path).and_return('/page1')
|
33
|
+
subject.visit(page)
|
34
|
+
expect(subject.current_page).to be_an_instance_of(page)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'page url has changed' do
|
39
|
+
it 'returns the mapped page object' do
|
40
|
+
browser.should_receive(:visit).with(page.url)
|
41
|
+
subject.visit(page)
|
42
|
+
allow(browser).to receive(:current_path).and_return('/another_page1')
|
43
|
+
expect(subject.current_page).to be_an_instance_of(another_page_class)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#find_mapped_page' do
|
49
|
+
subject do
|
50
|
+
described_class.new(nil).tap do |session|
|
51
|
+
session.define_page_mappings '/page' => :mapped_page_using_string, /page\d/ => :mapped_page_using_regex
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'mapping is string' do
|
56
|
+
it 'returns the page class' do
|
57
|
+
expect(subject.find_mapped_page('/page')).to be(:mapped_page_using_string)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
context 'mapping is regex' do
|
61
|
+
it 'returns the page class' do
|
62
|
+
expect(subject.find_mapped_page('/page2')).to be(:mapped_page_using_regex)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'mapping is not found' do
|
67
|
+
it 'returns nil' do
|
68
|
+
expect(subject.find_mapped_page('/fake_page')).to be(nil)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
23
73
|
it 'should visit the given url' do
|
24
74
|
browser.should_receive(:visit).with(page.url)
|
25
75
|
session = PageMagic::Session.new(browser).visit(page)
|
@@ -38,30 +88,4 @@ describe PageMagic::Session do
|
|
38
88
|
session.my_method.should be(:called)
|
39
89
|
end
|
40
90
|
end
|
41
|
-
|
42
|
-
context 'move_to moves the session object to another page' do
|
43
|
-
it 'can take a class' do
|
44
|
-
page_magic_session = PageMagic::Session.new(double(:browser, current_url: '/another_page1'))
|
45
|
-
page_magic_session.move_to(another_page_class)
|
46
|
-
page_magic_session.current_page.should be_a(another_page_class)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'can take the name of the class as a string' do
|
50
|
-
class ThePage
|
51
|
-
include PageMagic
|
52
|
-
url '/the_page'
|
53
|
-
end
|
54
|
-
|
55
|
-
page_magic_session = PageMagic::Session.new(double(:browser, current_url: '/the_page'))
|
56
|
-
page_magic_session.move_to("ThePage")
|
57
|
-
page_magic_session.current_page.should be_a(ThePage)
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'should wait until the browser url has changed' do
|
61
|
-
mock_browser = double(:browser, current_url: 'a')
|
62
|
-
page_magic_session = PageMagic::Session.new(mock_browser)
|
63
|
-
|
64
|
-
expect { page_magic_session.move_to(another_page_class) }.to raise_error(Wait::ResultInvalid)
|
65
|
-
end
|
66
|
-
end
|
67
91
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page_magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.0.
|
4
|
+
version: 0.11.0.alpha6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leon Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -52,34 +52,6 @@ dependencies:
|
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: guard
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '>='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: guard-ctags-bundler
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '>='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - '>='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
55
|
description: Framework for modeling and interacting with webpages which wraps capybara
|
84
56
|
email: info@lad-tech.com
|
85
57
|
executables: []
|
@@ -140,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
112
|
version: 1.3.1
|
141
113
|
requirements: []
|
142
114
|
rubyforge_project:
|
143
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.4.3
|
144
116
|
signing_key:
|
145
117
|
specification_version: 4
|
146
118
|
summary: Framework for modeling and interacting with webpages
|