page_magic 0.11.0.alpha8 → 1.0.0.alpha
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/.ruby-version +1 -1
- data/.travis.yml +4 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +0 -12
- data/README.md +2 -1
- data/VERSION +1 -1
- data/lib/page_magic/browser.rb +19 -0
- data/lib/page_magic/element_context.rb +6 -2
- data/lib/page_magic/session.rb +7 -22
- data/lib/page_magic.rb +28 -19
- data/spec/page_magic/browser_spec.rb +35 -0
- data/spec/page_magic/element_context_spec.rb +11 -28
- data/spec/page_magic/session_spec.rb +8 -42
- data/spec/page_magic/usage/starting_a_session_spec.rb +30 -6
- data/spec/spec_helper.rb +0 -15
- metadata +20 -42
- data/lib/page_magic/driver.rb +0 -19
- data/lib/page_magic/drivers/poltergeist.rb +0 -9
- data/lib/page_magic/drivers/rack_test.rb +0 -7
- data/lib/page_magic/drivers/selenium.rb +0 -8
- data/lib/page_magic/drivers.rb +0 -31
- data/spec/page_magic/driver_spec.rb +0 -47
- data/spec/page_magic/drivers/poltergeist_spec.rb +0 -10
- data/spec/page_magic/drivers/rack_test_spec.rb +0 -10
- data/spec/page_magic/drivers/selenium_spec.rb +0 -10
- data/spec/page_magic/drivers_spec.rb +0 -41
- data/spec/page_magic_spec.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd89ee316817755f4b899d4e09dc5c985c34e97f
|
4
|
+
data.tar.gz: 24d259f187207b3ad600ab807c19f6202d2988af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 060f54874232cb6447596a75ee5c7251185bc1b1d93f2c0e265999d321c9de4c512354cf14e55e5f6e19f86c619d874d34ae86a71f795be70d17700b2b1abd32
|
7
|
+
data.tar.gz: 9347c6789a93e2e4854763dea8ca8fe5ffd0b45f25873fdab51acd733f3b368402ecdc590b3ee3b0a355903d1589ad7304daf964260233bfc97b5a41b37be19e
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.0.0
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,12 +1,6 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (4.2.3)
|
5
|
-
i18n (~> 0.7)
|
6
|
-
json (~> 1.7, >= 1.7.7)
|
7
|
-
minitest (~> 5.1)
|
8
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
9
|
-
tzinfo (~> 1.1)
|
10
4
|
addressable (2.3.6)
|
11
5
|
builder (3.2.2)
|
12
6
|
capybara (2.1.0)
|
@@ -44,7 +38,6 @@ GEM
|
|
44
38
|
guard (~> 2.0)
|
45
39
|
hashie (2.0.5)
|
46
40
|
highline (1.6.21)
|
47
|
-
i18n (0.7.0)
|
48
41
|
jeweler (2.0.1)
|
49
42
|
builder
|
50
43
|
bundler (>= 1.0)
|
@@ -65,7 +58,6 @@ GEM
|
|
65
58
|
method_source (0.8.2)
|
66
59
|
mime-types (1.25)
|
67
60
|
mini_portile (0.5.1)
|
68
|
-
minitest (5.7.0)
|
69
61
|
multi_json (1.7.3)
|
70
62
|
multi_xml (0.5.5)
|
71
63
|
multipart-post (1.2.0)
|
@@ -121,11 +113,8 @@ GEM
|
|
121
113
|
tilt (~> 1.3, >= 1.3.4)
|
122
114
|
slop (3.5.0)
|
123
115
|
thor (0.19.1)
|
124
|
-
thread_safe (0.3.5)
|
125
116
|
tilt (1.4.1)
|
126
117
|
timers (1.1.0)
|
127
|
-
tzinfo (1.2.2)
|
128
|
-
thread_safe (~> 0.1)
|
129
118
|
wait (0.5.1)
|
130
119
|
watir-webdriver (0.6.4)
|
131
120
|
selenium-webdriver (>= 2.18.0)
|
@@ -138,7 +127,6 @@ PLATFORMS
|
|
138
127
|
ruby
|
139
128
|
|
140
129
|
DEPENDENCIES
|
141
|
-
activesupport
|
142
130
|
capybara
|
143
131
|
guard
|
144
132
|
guard-ctags-bundler
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
[](https://travis-ci.org/Ladtech/page_magic)
|
2
|
+
#PageMagic
|
2
3
|
PageMagic is an API for testing web applications.
|
3
4
|
|
4
5
|
It has a simple but powerful DSL which makes modelling and interacting with your pages easy.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0.alpha
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PageMagic
|
2
|
+
module Browser
|
3
|
+
|
4
|
+
class << self
|
5
|
+
attr_writer :default
|
6
|
+
def session
|
7
|
+
@session ||= PageMagic.session(default)
|
8
|
+
end
|
9
|
+
|
10
|
+
def default
|
11
|
+
@default || :firefox
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def browser
|
16
|
+
Browser.session
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -28,15 +28,19 @@ module PageMagic
|
|
28
28
|
element_locator = element_locator_factory.call(@page_element, *args)
|
29
29
|
end
|
30
30
|
|
31
|
+
result = element_locator.browser_element
|
32
|
+
|
33
|
+
return element_locator if element_locator.section?
|
34
|
+
|
31
35
|
[:set, :select_option, :unselect_option, :click].each do |action_method|
|
32
|
-
apply_hooks(page_element:
|
36
|
+
apply_hooks(page_element: result,
|
33
37
|
capybara_method: action_method,
|
34
38
|
before_hook: element_locator.before,
|
35
39
|
after_hook: element_locator.after,
|
36
40
|
)
|
37
41
|
end
|
38
42
|
|
39
|
-
|
43
|
+
result
|
40
44
|
end
|
41
45
|
|
42
46
|
def apply_hooks(options)
|
data/lib/page_magic/session.rb
CHANGED
@@ -7,37 +7,22 @@ module PageMagic
|
|
7
7
|
@raw_session = browser
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def define_transitions transitions
|
11
11
|
@transitions = transitions
|
12
12
|
end
|
13
13
|
|
14
14
|
def current_page
|
15
15
|
if transitions
|
16
|
-
mapping =
|
17
|
-
|
16
|
+
mapping = transitions.keys.find do |key|
|
17
|
+
current_url.include?(key)
|
18
|
+
end
|
19
|
+
@current_page = transitions[mapping].new(self) if transitions[mapping]
|
18
20
|
end
|
19
21
|
@current_page
|
20
22
|
end
|
21
23
|
|
22
|
-
def
|
23
|
-
|
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
|
-
|
39
|
-
def visit(page, url: nil)
|
40
|
-
raw_session.visit url || page.url
|
24
|
+
def visit page
|
25
|
+
raw_session.visit page.url
|
41
26
|
@current_page = page.new self
|
42
27
|
self
|
43
28
|
end
|
data/lib/page_magic.rb
CHANGED
@@ -1,33 +1,41 @@
|
|
1
1
|
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
|
2
2
|
require 'capybara'
|
3
3
|
require 'page_magic/exceptions'
|
4
|
+
require 'page_magic/browser'
|
4
5
|
require 'page_magic/session'
|
5
6
|
require 'page_magic/elements'
|
6
7
|
require 'page_magic/element_context'
|
7
8
|
require 'page_magic/element'
|
8
9
|
require 'page_magic/page_magic'
|
9
|
-
require 'page_magic/drivers'
|
10
10
|
|
11
11
|
module PageMagic
|
12
|
-
class UnspportedBrowserException < Exception;end
|
13
|
-
|
14
12
|
class << self
|
13
|
+
def session browser=nil, options = {}
|
14
|
+
if browser.is_a?(Symbol)
|
15
|
+
application = options.delete(:application)
|
16
|
+
|
17
|
+
Capybara.register_driver browser do |app|
|
18
|
+
options[:browser] = browser
|
19
|
+
case browser
|
20
|
+
when :poltergeist
|
21
|
+
require 'capybara/poltergeist'
|
22
|
+
Capybara::Poltergeist::Driver.new(app)
|
23
|
+
when :rack_test
|
24
|
+
Capybara::RackTest::Driver.new(app, options)
|
25
|
+
else
|
26
|
+
require 'watir-webdriver'
|
27
|
+
Capybara::Selenium::Driver.new(app, options)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
Session.new(Capybara::Session.new(browser, application))
|
33
|
+
else
|
34
|
+
Capybara.reset!
|
35
|
+
Capybara.app = browser[:application] if browser.is_a?(Hash) && browser[:application]
|
36
|
+
Session.new(Capybara.current_session)
|
37
|
+
end
|
15
38
|
|
16
|
-
def drivers
|
17
|
-
@drivers ||= Drivers.new.tap do |drivers|
|
18
|
-
drivers.load
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def session(application: nil, browser: :rack_test, options: {})
|
23
|
-
driver = drivers.find(browser)
|
24
|
-
raise UnspportedBrowserException unless driver
|
25
|
-
|
26
|
-
Capybara.register_driver browser do |app|
|
27
|
-
driver.build(app, browser: browser, options: options)
|
28
|
-
end
|
29
|
-
|
30
|
-
Session.new(Capybara::Session.new(browser, application))
|
31
39
|
end
|
32
40
|
|
33
41
|
def included clazz
|
@@ -45,10 +53,11 @@ module PageMagic
|
|
45
53
|
PageMagic.pages << clazz
|
46
54
|
end
|
47
55
|
end
|
56
|
+
|
48
57
|
end
|
49
58
|
|
50
59
|
def pages
|
51
60
|
@pages||=[]
|
52
61
|
end
|
53
62
|
end
|
54
|
-
end
|
63
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
describe PageMagic::Browser do
|
2
|
+
let(:app) { Object.new }
|
3
|
+
|
4
|
+
before do
|
5
|
+
PageMagic::Browser.instance_variable_set(:@session, nil)
|
6
|
+
app.extend PageMagic::Browser
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'default' do
|
10
|
+
it 'should be firefox' do
|
11
|
+
PageMagic::Browser.default.should == :firefox
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'browser' do
|
16
|
+
it 'should return the existing session' do
|
17
|
+
session_instance = app.browser
|
18
|
+
app.browser.should == session_instance
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should create a session if not already set' do
|
22
|
+
new_session = double(:new_session)
|
23
|
+
|
24
|
+
PageMagic.should_receive(:session).with(:firefox).and_return new_session
|
25
|
+
app.browser.should == new_session
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should use custom browser' do
|
29
|
+
PageMagic.should_receive(:session).with(:custom_browser)
|
30
|
+
|
31
|
+
PageMagic::Browser.default = :custom_browser
|
32
|
+
app.browser
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -87,40 +87,23 @@ describe PageMagic::ElementContext do
|
|
87
87
|
|
88
88
|
describe 'hooks' do
|
89
89
|
|
90
|
-
subject(:page) do
|
91
|
-
elements_page.new.tap do|p|
|
92
|
-
p.visit
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
before do
|
97
|
-
browser = page.browser
|
98
|
-
browser.should_receive(:call_in_before_hook)
|
99
|
-
browser.should_receive(:call_in_after_before_hook)
|
100
|
-
end
|
101
90
|
|
91
|
+
#it 'only applies them if browser element supports event' do
|
92
|
+
# page = elements_page.new
|
93
|
+
#end
|
102
94
|
|
103
|
-
|
104
|
-
it 'applies the hooks' do
|
105
|
-
|
106
|
-
elements_page.section(:form, id: 'form') do
|
107
|
-
link :form_link, id: 'form_link'
|
95
|
+
it 'should execute a before and after action that gives access to the browser' do
|
108
96
|
|
109
|
-
|
110
|
-
|
111
|
-
end
|
97
|
+
page = elements_page.new
|
98
|
+
page.visit
|
112
99
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
100
|
+
selector = {text: 'a link'}
|
101
|
+
browser = page.browser
|
102
|
+
browser.should_receive(:call_in_before_hook)
|
103
|
+
browser.should_receive(:call_in_after_before_hook)
|
117
104
|
|
118
|
-
described_class.new(page, page.browser, self).form.click
|
119
|
-
end
|
120
|
-
end
|
121
105
|
|
122
|
-
|
123
|
-
elements_page.link(:create, text: 'a link') do
|
106
|
+
elements_page.link(:create, selector) do
|
124
107
|
before do |page_browser|
|
125
108
|
page_browser.call_in_before_hook
|
126
109
|
end
|
@@ -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 :url
|
7
7
|
|
8
8
|
def my_method
|
9
9
|
:called
|
@@ -23,67 +23,33 @@ describe PageMagic::Session do
|
|
23
23
|
describe '#current_page' do
|
24
24
|
subject do
|
25
25
|
PageMagic::Session.new(browser).tap do |session|
|
26
|
-
session.
|
26
|
+
session.define_transitions '/another_page1' => another_page_class
|
27
27
|
end
|
28
28
|
end
|
29
29
|
context 'page url has not changed' do
|
30
30
|
it 'returns the original page' do
|
31
31
|
browser.should_receive(:visit).with(page.url)
|
32
|
-
allow(browser).to receive(:current_path).and_return('/page1')
|
33
32
|
subject.visit(page)
|
34
33
|
expect(subject.current_page).to be_an_instance_of(page)
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
37
|
context 'page url has changed' do
|
38
|
+
|
39
39
|
it 'returns the mapped page object' do
|
40
40
|
browser.should_receive(:visit).with(page.url)
|
41
41
|
subject.visit(page)
|
42
|
-
allow(browser).to receive(:
|
42
|
+
allow(browser).to receive(:current_url).and_return('http://example.com/another_page1')
|
43
43
|
expect(subject.current_page).to be_an_instance_of(another_page_class)
|
44
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
45
|
|
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
46
|
end
|
71
47
|
end
|
72
48
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
session = PageMagic::Session.new(browser).visit(page, url: :custom_url)
|
78
|
-
session.current_page.should be_a(page)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'visits the url on defined on the page class' do
|
83
|
-
browser.should_receive(:visit).with(page.url)
|
84
|
-
session = PageMagic::Session.new(browser).visit(page)
|
85
|
-
session.current_page.should be_a(page)
|
86
|
-
end
|
49
|
+
it 'should visit the given url' do
|
50
|
+
browser.should_receive(:visit).with(page.url)
|
51
|
+
session = PageMagic::Session.new(browser).visit(page)
|
52
|
+
session.current_page.should be_a(page)
|
87
53
|
end
|
88
54
|
|
89
55
|
it 'should return the current url' do
|
@@ -1,5 +1,4 @@
|
|
1
1
|
describe 'PageMagic.session' do
|
2
|
-
|
3
2
|
let(:app_class) do
|
4
3
|
Class.new do
|
5
4
|
def call env
|
@@ -12,10 +11,35 @@ describe 'PageMagic.session' do
|
|
12
11
|
Capybara.drivers[browser].call(nil)
|
13
12
|
end
|
14
13
|
|
15
|
-
context '
|
16
|
-
it '
|
17
|
-
|
18
|
-
|
14
|
+
context 'using a symbol as a parameter' do
|
15
|
+
it 'sets up a session using the specified browser' do
|
16
|
+
Capybara::Session.should_receive(:new).with(:chrome, nil).and_return(:chrome_session)
|
17
|
+
|
18
|
+
session = PageMagic.session(:chrome)
|
19
|
+
|
20
|
+
registered_driver(:chrome).should == Capybara::Selenium::Driver.new(nil, browser: :chrome)
|
21
|
+
|
22
|
+
session.raw_session.should == :chrome_session
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'browsers' do
|
26
|
+
it 'supports poltergeist' do
|
27
|
+
session = PageMagic.session(:poltergeist, application: app_class.new)
|
28
|
+
session.raw_session.driver.is_a?(Capybara::Poltergeist::Driver).should be_true
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'supports selenium' do
|
32
|
+
session = PageMagic.session(:firefox, application: app_class.new)
|
33
|
+
session.raw_session.driver.is_a?(Capybara::Selenium::Driver).should be_true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'defaulting the browser used from PageMagic sessions' do
|
39
|
+
it "uses what ever Capybara's default_driver is set to" do
|
40
|
+
Capybara.default_driver = :rack_test
|
41
|
+
session = PageMagic.session
|
42
|
+
session.raw_session.mode.should == :rack_test
|
19
43
|
end
|
20
44
|
end
|
21
45
|
|
@@ -28,7 +52,7 @@ describe 'PageMagic.session' do
|
|
28
52
|
end
|
29
53
|
|
30
54
|
it 'can run against an rack application using a particular browser' do
|
31
|
-
session = PageMagic.session(
|
55
|
+
session = PageMagic.session(:rack_test, application: app_class.new)
|
32
56
|
session.raw_session.mode.should == :rack_test
|
33
57
|
session.raw_session.visit('/')
|
34
58
|
session.raw_session.text.should == 'hello world!!'
|
data/spec/spec_helper.rb
CHANGED
@@ -11,22 +11,7 @@ require 'page_magic'
|
|
11
11
|
require 'capybara/rspec'
|
12
12
|
require 'helpers/capybara'
|
13
13
|
|
14
|
-
shared_context :files do
|
15
|
-
require 'tmpdir'
|
16
|
-
def scratch_dir
|
17
|
-
@dir ||= Dir.mktmpdir
|
18
|
-
end
|
19
|
-
end
|
20
14
|
|
21
|
-
shared_context :rack_application do
|
22
|
-
let(:rack_application) do
|
23
|
-
Class.new do
|
24
|
-
def call env
|
25
|
-
[200, {}, ["hello world!!"]]
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
15
|
|
31
16
|
RSpec.configure do
|
32
17
|
|
metadata
CHANGED
@@ -1,97 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page_magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.alpha
|
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-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: activesupport
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
24
|
+
- - '>='
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: wait
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- -
|
31
|
+
- - '>='
|
46
32
|
- !ruby/object:Gem::Version
|
47
33
|
version: '0'
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- -
|
38
|
+
- - '>='
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: jeweler
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- -
|
45
|
+
- - '>='
|
60
46
|
- !ruby/object:Gem::Version
|
61
47
|
version: '0'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- -
|
52
|
+
- - '>='
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: guard
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- -
|
59
|
+
- - '>='
|
74
60
|
- !ruby/object:Gem::Version
|
75
61
|
version: '0'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- -
|
66
|
+
- - '>='
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: guard-ctags-bundler
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- -
|
73
|
+
- - '>='
|
88
74
|
- !ruby/object:Gem::Version
|
89
75
|
version: '0'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- -
|
80
|
+
- - '>='
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
83
|
description: Framework for modeling and interacting with webpages which wraps capybara
|
@@ -101,9 +87,10 @@ extensions: []
|
|
101
87
|
extra_rdoc_files:
|
102
88
|
- README.md
|
103
89
|
files:
|
104
|
-
-
|
105
|
-
-
|
106
|
-
-
|
90
|
+
- .rspec
|
91
|
+
- .ruby-gemset
|
92
|
+
- .ruby-version
|
93
|
+
- .travis.yml
|
107
94
|
- Gemfile
|
108
95
|
- Gemfile.lock
|
109
96
|
- Guardfile
|
@@ -112,11 +99,7 @@ files:
|
|
112
99
|
- VERSION
|
113
100
|
- lib/ext/string.rb
|
114
101
|
- lib/page_magic.rb
|
115
|
-
- lib/page_magic/
|
116
|
-
- lib/page_magic/drivers.rb
|
117
|
-
- lib/page_magic/drivers/poltergeist.rb
|
118
|
-
- lib/page_magic/drivers/rack_test.rb
|
119
|
-
- lib/page_magic/drivers/selenium.rb
|
102
|
+
- lib/page_magic/browser.rb
|
120
103
|
- lib/page_magic/element.rb
|
121
104
|
- lib/page_magic/element_context.rb
|
122
105
|
- lib/page_magic/elements.rb
|
@@ -127,11 +110,7 @@ files:
|
|
127
110
|
- spec/element_spec.rb
|
128
111
|
- spec/helpers/capybara.rb
|
129
112
|
- spec/member_methods_spec.rb
|
130
|
-
- spec/page_magic/
|
131
|
-
- spec/page_magic/drivers/poltergeist_spec.rb
|
132
|
-
- spec/page_magic/drivers/rack_test_spec.rb
|
133
|
-
- spec/page_magic/drivers/selenium_spec.rb
|
134
|
-
- spec/page_magic/drivers_spec.rb
|
113
|
+
- spec/page_magic/browser_spec.rb
|
135
114
|
- spec/page_magic/element_context_spec.rb
|
136
115
|
- spec/page_magic/elements_spec.rb
|
137
116
|
- spec/page_magic/session_spec.rb
|
@@ -140,7 +119,6 @@ files:
|
|
140
119
|
- spec/page_magic/usage/include_page_magic_spec.rb
|
141
120
|
- spec/page_magic/usage/interacting_with_pages_spec.rb
|
142
121
|
- spec/page_magic/usage/starting_a_session_spec.rb
|
143
|
-
- spec/page_magic_spec.rb
|
144
122
|
- spec/spec_helper.rb
|
145
123
|
homepage: https://github.com/ladtech/page_magic
|
146
124
|
licenses:
|
@@ -152,12 +130,12 @@ require_paths:
|
|
152
130
|
- lib
|
153
131
|
required_ruby_version: !ruby/object:Gem::Requirement
|
154
132
|
requirements:
|
155
|
-
- -
|
133
|
+
- - '>='
|
156
134
|
- !ruby/object:Gem::Version
|
157
135
|
version: '0'
|
158
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
137
|
requirements:
|
160
|
-
- -
|
138
|
+
- - '>'
|
161
139
|
- !ruby/object:Gem::Version
|
162
140
|
version: 1.3.1
|
163
141
|
requirements: []
|
data/lib/page_magic/driver.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module PageMagic
|
2
|
-
class Driver
|
3
|
-
attr_reader :supported_browsers, :handler
|
4
|
-
def initialize(*supported_browsers, &block)
|
5
|
-
@handler = block
|
6
|
-
@supported_browsers = supported_browsers
|
7
|
-
end
|
8
|
-
|
9
|
-
def support? browser
|
10
|
-
supported_browsers.include?(browser)
|
11
|
-
end
|
12
|
-
|
13
|
-
def build(app, browser:, options:{})
|
14
|
-
options[:browser] = browser
|
15
|
-
driver_clazz = handler.call
|
16
|
-
driver_clazz.new(app, options)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/lib/page_magic/drivers.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'page_magic/driver'
|
2
|
-
module PageMagic
|
3
|
-
class Drivers
|
4
|
-
def all
|
5
|
-
@all ||=[]
|
6
|
-
end
|
7
|
-
|
8
|
-
def register(driver)
|
9
|
-
all << driver
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
def find browser
|
14
|
-
all.find{|driver|driver.support?(browser)}
|
15
|
-
end
|
16
|
-
|
17
|
-
def load path="#{__dir__}/drivers"
|
18
|
-
require 'active_support/inflector'
|
19
|
-
|
20
|
-
Dir["#{path}/*.rb"].each do |driver_file|
|
21
|
-
require driver_file
|
22
|
-
driver_name = File.basename(driver_file)[/(.*)\.rb$/, 1]
|
23
|
-
register eval(driver_name.classify)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def == other
|
28
|
-
other.is_a?(Drivers) && other.all == other.all
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'page_magic/driver'
|
2
|
-
|
3
|
-
module PageMagic
|
4
|
-
describe Driver do
|
5
|
-
|
6
|
-
let(:driver_class) do
|
7
|
-
Class.new do
|
8
|
-
attr_reader :rack_app, :options
|
9
|
-
def initialize rack_app, options
|
10
|
-
@rack_app = rack_app
|
11
|
-
@options = options
|
12
|
-
end
|
13
|
-
def == driver
|
14
|
-
driver.rack_app == rack_app && driver.options == options
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
subject do
|
19
|
-
described_class.new :custom_browser do
|
20
|
-
driver_class
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#supports?' do
|
25
|
-
context 'browser is in supported browsers' do
|
26
|
-
it 'returns true' do
|
27
|
-
expect(subject.support?(:custom_browser)).to eq(true)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'browser is not in supported browsers' do
|
32
|
-
it 'returns false' do
|
33
|
-
expect(subject.support?(:unsupported_browser)).to eq(false)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
describe '#build' do
|
38
|
-
it 'adds the browser to the options supplied to the driver' do
|
39
|
-
expect(subject.build(:rack_app, browser: :custom_browser, options: {}).options).to eq(browser: :custom_browser)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'creates an instance of the supplied driver' do
|
43
|
-
expect(subject.build(:rack_app,browser: :custom_browser, options: {})).to eq(driver_class.new(:rack_app, {browser: :custom_browser}))
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'page_magic/drivers/poltergeist'
|
2
|
-
module PageMagic
|
3
|
-
class Drivers
|
4
|
-
describe Poltergeist do
|
5
|
-
it %q{is capybara's poltergeist driver} do
|
6
|
-
expect(described_class.build(:app, browser: :poltergeist, options:{})).to be_a(Capybara::Poltergeist::Driver)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'page_magic/drivers/rack_test'
|
2
|
-
module PageMagic
|
3
|
-
class Drivers
|
4
|
-
describe RackTest do
|
5
|
-
it %q{is capybara's rack test driver} do
|
6
|
-
expect(described_class.build(:app, browser: :rack_test, options:{})).to be_a(Capybara::RackTest::Driver)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'page_magic/drivers'
|
2
|
-
|
3
|
-
module PageMagic
|
4
|
-
|
5
|
-
describe Drivers do
|
6
|
-
subject { described_class.new }
|
7
|
-
let(:expected_driver) { Driver.new(:browser_driver) }
|
8
|
-
describe '#register' do
|
9
|
-
it 'stores the driver' do
|
10
|
-
subject.register expected_driver
|
11
|
-
expect(subject.all).to eq([expected_driver])
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#find' do
|
16
|
-
it 'returns the registered driver' do
|
17
|
-
subject.register expected_driver
|
18
|
-
expect(subject.find(:browser_driver)).to eq(expected_driver)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '#load' do
|
23
|
-
include_context :files
|
24
|
-
it 'loads the drivers in the specified path' do
|
25
|
-
|
26
|
-
class_definition=<<-RUBY
|
27
|
-
class CustomDriver;
|
28
|
-
def self.support? browser
|
29
|
-
true
|
30
|
-
end
|
31
|
-
end
|
32
|
-
RUBY
|
33
|
-
|
34
|
-
File.write("#{scratch_dir}/custom_driver.rb", class_definition )
|
35
|
-
|
36
|
-
subject.load(scratch_dir)
|
37
|
-
expect(subject.find(:custom_browser)).to be(::CustomDriver)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/spec/page_magic_spec.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'page_magic'
|
2
|
-
|
3
|
-
describe PageMagic do
|
4
|
-
describe '::drivers' do
|
5
|
-
it 'returns loaded drivers' do
|
6
|
-
expected_drivers = described_class::Drivers.new.tap do |drivers|
|
7
|
-
drivers.load
|
8
|
-
end
|
9
|
-
|
10
|
-
expect(described_class.drivers).to eq(expected_drivers)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '::session' do
|
15
|
-
context 'specifying the browser' do
|
16
|
-
it 'loads the correct driver' do
|
17
|
-
session = described_class.session(browser: :firefox)
|
18
|
-
session.raw_session.driver.is_a?(Capybara::Selenium::Driver).should be_true
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'specifying a rack application' do
|
23
|
-
it 'configures capybara to run against the app' do
|
24
|
-
session = described_class.session(application: :rack_application)
|
25
|
-
expect(session.raw_session.app).to be(:rack_application)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'specifying options' do
|
30
|
-
it 'passes the options to the browser driver' do
|
31
|
-
options = {option: :config}
|
32
|
-
session = described_class.session(options: options, browser: :chrome)
|
33
|
-
|
34
|
-
expect(session.raw_session.driver.options).to include(options)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context 'driver for browser not found' do
|
39
|
-
it 'raises an error' do
|
40
|
-
expect{described_class.session(browser: :invalid)}.to raise_exception described_class::UnspportedBrowserException
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|