page_magic 0.11.0.alpha3 → 0.11.0.alpha5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +30 -0
- data/Guardfile +8 -0
- data/README.md +6 -0
- data/VERSION +1 -1
- data/lib/page_magic/element.rb +64 -39
- data/lib/page_magic/element_context.rb +8 -7
- data/lib/page_magic/elements.rb +10 -4
- data/lib/page_magic/page_magic.rb +0 -2
- data/lib/page_magic.rb +0 -1
- data/spec/element_spec.rb +57 -13
- data/spec/{browser_spec.rb → page_magic/browser_spec.rb} +0 -0
- data/spec/{element_context_spec.rb → page_magic/element_context_spec.rb} +5 -0
- data/spec/page_magic/elements_spec.rb +4 -4
- data/spec/{session_spec.rb → page_magic/session_spec.rb} +0 -0
- metadata +35 -7
- data/lib/page_magic/ajax_support.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd7f970881ca342aebac6a622629e2256c7b3772
|
4
|
+
data.tar.gz: c1a87cb1706b7d2bc40fc521a9cc5af55fea6c40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00119f1eacd5c3d0001a020fe938b1dfd3fa1340b21800f7a7087ecc43e375d3ffae769c4f3eca2b96404e7c19d605a448e4b35b2f2202bb43e58bfa11ffdf43
|
7
|
+
data.tar.gz: 243f27af8b0adfd0c58a9e254b128d0c60e4da10eff2d1e421435b1d65b22e30324adba474d92499df6bd0b2f008e203389e45510aa0dd24e82c1e0ffce1165f
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -9,13 +9,17 @@ GEM
|
|
9
9
|
rack (>= 1.0.0)
|
10
10
|
rack-test (>= 0.5.4)
|
11
11
|
xpath (~> 2.0)
|
12
|
+
celluloid (0.15.2)
|
13
|
+
timers (~> 1.1.0)
|
12
14
|
childprocess (0.3.9)
|
13
15
|
ffi (~> 1.0, >= 1.0.11)
|
14
16
|
cliver (0.2.2)
|
17
|
+
coderay (1.1.0)
|
15
18
|
diff-lcs (1.2.4)
|
16
19
|
faraday (0.8.9)
|
17
20
|
multipart-post (~> 1.2.0)
|
18
21
|
ffi (1.9.3)
|
22
|
+
formatador (0.2.5)
|
19
23
|
git (1.2.6)
|
20
24
|
github_api (0.10.2)
|
21
25
|
addressable
|
@@ -24,6 +28,14 @@ GEM
|
|
24
28
|
multi_json (~> 1.4)
|
25
29
|
nokogiri (~> 1.6.0)
|
26
30
|
oauth2
|
31
|
+
guard (2.6.1)
|
32
|
+
formatador (>= 0.2.4)
|
33
|
+
listen (~> 2.7)
|
34
|
+
lumberjack (~> 1.0)
|
35
|
+
pry (>= 0.9.12)
|
36
|
+
thor (>= 0.18.1)
|
37
|
+
guard-ctags-bundler (1.0.2)
|
38
|
+
guard (~> 2.0)
|
27
39
|
hashie (2.0.5)
|
28
40
|
highline (1.6.21)
|
29
41
|
jeweler (2.0.1)
|
@@ -38,6 +50,12 @@ GEM
|
|
38
50
|
json (1.8.1)
|
39
51
|
jwt (0.1.11)
|
40
52
|
multi_json (>= 1.5)
|
53
|
+
listen (2.7.8)
|
54
|
+
celluloid (>= 0.15.2)
|
55
|
+
rb-fsevent (>= 0.9.3)
|
56
|
+
rb-inotify (>= 0.9)
|
57
|
+
lumberjack (1.0.6)
|
58
|
+
method_source (0.8.2)
|
41
59
|
mime-types (1.25)
|
42
60
|
mini_portile (0.5.1)
|
43
61
|
multi_json (1.7.3)
|
@@ -56,12 +74,19 @@ GEM
|
|
56
74
|
cliver (~> 0.2.1)
|
57
75
|
multi_json (~> 1.0)
|
58
76
|
websocket-driver (>= 0.2.0)
|
77
|
+
pry (0.10.0)
|
78
|
+
coderay (~> 1.1.0)
|
79
|
+
method_source (~> 0.8.1)
|
80
|
+
slop (~> 3.4)
|
59
81
|
rack (1.5.2)
|
60
82
|
rack-protection (1.5.0)
|
61
83
|
rack
|
62
84
|
rack-test (0.6.2)
|
63
85
|
rack (>= 1.0)
|
64
86
|
rake (10.2.2)
|
87
|
+
rb-fsevent (0.9.4)
|
88
|
+
rb-inotify (0.9.5)
|
89
|
+
ffi (>= 0.5.0)
|
65
90
|
rdoc (4.1.1)
|
66
91
|
json (~> 1.4)
|
67
92
|
rspec (2.14.1)
|
@@ -86,7 +111,10 @@ GEM
|
|
86
111
|
rack (~> 1.4)
|
87
112
|
rack-protection (~> 1.4)
|
88
113
|
tilt (~> 1.3, >= 1.3.4)
|
114
|
+
slop (3.5.0)
|
115
|
+
thor (0.19.1)
|
89
116
|
tilt (1.4.1)
|
117
|
+
timers (1.1.0)
|
90
118
|
wait (0.5.1)
|
91
119
|
watir-webdriver (0.6.4)
|
92
120
|
selenium-webdriver (>= 2.18.0)
|
@@ -100,6 +128,8 @@ PLATFORMS
|
|
100
128
|
|
101
129
|
DEPENDENCIES
|
102
130
|
capybara
|
131
|
+
guard
|
132
|
+
guard-ctags-bundler
|
103
133
|
jeweler
|
104
134
|
poltergeist
|
105
135
|
rspec
|
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -1 +1,7 @@
|
|
1
1
|
[![Build Status](https://travis-ci.org/Ladtech/page_magic.png)](https://travis-ci.org/Ladtech/page_magic)
|
2
|
+
#PageMagic
|
3
|
+
PageMagic is an API for testing web applications.
|
4
|
+
|
5
|
+
It has a simple but powerful DSL which makes modelling and interacting with your pages easy.
|
6
|
+
|
7
|
+
More docs coming soon.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.11.0.
|
1
|
+
0.11.0.alpha5
|
data/lib/page_magic/element.rb
CHANGED
@@ -1,13 +1,24 @@
|
|
1
1
|
module PageMagic
|
2
2
|
|
3
|
+
module MethodObserver
|
4
|
+
def singleton_method_added arg
|
5
|
+
@singleton_methods_added = true unless arg == :singleton_method_added
|
6
|
+
end
|
7
|
+
|
8
|
+
def singleton_methods_added?
|
9
|
+
@singleton_methods_added == true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
3
13
|
class Element
|
4
14
|
attr_reader :type, :name, :selector, :browser_element
|
5
15
|
|
6
|
-
include
|
16
|
+
include Elements
|
7
17
|
|
8
18
|
class << self
|
9
19
|
def inherited clazz
|
10
|
-
clazz.extend(Elements
|
20
|
+
clazz.extend(Elements)
|
21
|
+
|
11
22
|
def clazz.selector selector=nil
|
12
23
|
return @selector unless selector
|
13
24
|
@selector = selector
|
@@ -15,17 +26,21 @@ module PageMagic
|
|
15
26
|
end
|
16
27
|
end
|
17
28
|
|
18
|
-
def initialize name, parent_page_element,
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
29
|
+
def initialize name, parent_page_element, options, &block
|
30
|
+
options = {type: :element, selector: {}, browser_element: nil}.merge(options)
|
31
|
+
@browser_element = options[:browser_element]
|
32
|
+
@selector = options[:selector]
|
33
|
+
|
34
|
+
@before_hook = proc {}
|
35
|
+
@after_hook = proc {}
|
36
|
+
@parent_page_element, @type, @name = parent_page_element, options[:type], name.to_s.downcase.to_sym
|
24
37
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
38
|
+
extend MethodObserver
|
39
|
+
expand &block if block
|
40
|
+
end
|
41
|
+
|
42
|
+
def expand *args, &block
|
43
|
+
instance_exec *args, &block
|
29
44
|
end
|
30
45
|
|
31
46
|
def selector selector=nil
|
@@ -34,7 +49,7 @@ module PageMagic
|
|
34
49
|
end
|
35
50
|
|
36
51
|
def section?
|
37
|
-
!element_definitions.empty?
|
52
|
+
!element_definitions.empty? || singleton_methods_added?
|
38
53
|
end
|
39
54
|
|
40
55
|
def session
|
@@ -65,34 +80,44 @@ module PageMagic
|
|
65
80
|
|
66
81
|
def browser_element *args
|
67
82
|
return @browser_element if @browser_element
|
68
|
-
raise UndefinedSelectorException, "Pass a selector/define one on the class"
|
83
|
+
raise UndefinedSelectorException, "Pass a selector/define one on the class" if @selector.empty?
|
69
84
|
if @selector
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
85
|
+
selector_copy = @selector.dup
|
86
|
+
method = selector.keys.first
|
87
|
+
selector = selector_copy.delete(method)
|
88
|
+
options = selector_copy
|
89
|
+
|
90
|
+
|
91
|
+
finder_method, selector_type, selector_arg = case method
|
92
|
+
when :id
|
93
|
+
[:find, "##{selector}"]
|
94
|
+
when :xpath
|
95
|
+
[:find, :xpath, selector]
|
96
|
+
when :name
|
97
|
+
[:find, "*[name='#{selector}']"]
|
98
|
+
when :css
|
99
|
+
[:find, :css, selector]
|
100
|
+
when :label
|
101
|
+
[:find_field, selector]
|
102
|
+
when :text
|
103
|
+
if @type == :link
|
104
|
+
[:find_link, selector]
|
105
|
+
elsif @type == :button
|
106
|
+
[:find_button, selector]
|
107
|
+
else
|
108
|
+
raise UnsupportedSelectorException
|
109
|
+
end
|
110
|
+
|
111
|
+
else
|
112
|
+
raise UnsupportedSelectorException
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
finder_args = [selector_type, selector_arg].compact
|
117
|
+
finder_args << options unless options.empty?
|
118
|
+
@browser_element = @parent_page_element.browser_element.send(finder_method, *finder_args)
|
94
119
|
end
|
95
120
|
@browser_element
|
96
121
|
end
|
97
122
|
end
|
98
|
-
end
|
123
|
+
end
|
@@ -59,13 +59,14 @@ module PageMagic
|
|
59
59
|
def apply_hooks(options)
|
60
60
|
_self = self
|
61
61
|
page_element, capybara_method = options[:page_element], options[:capybara_method]
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
62
|
+
if page_element.respond_to?(capybara_method)
|
63
|
+
original_method = page_element.method(capybara_method)
|
64
|
+
|
65
|
+
page_element.define_singleton_method capybara_method do |*arguments, &block|
|
66
|
+
_self.call_hook &options[:before_hook]
|
67
|
+
original_method.call *arguments, &block
|
68
|
+
_self.call_hook &options[:after_hook]
|
69
|
+
end
|
69
70
|
end
|
70
71
|
end
|
71
72
|
|
data/lib/page_magic/elements.rb
CHANGED
@@ -33,11 +33,17 @@ module PageMagic
|
|
33
33
|
|
34
34
|
first_arg = args.first
|
35
35
|
if first_arg.is_a?(Symbol)
|
36
|
-
name,
|
36
|
+
name, object = args
|
37
|
+
options = {type: type}
|
38
|
+
if object.is_a?(Hash)
|
39
|
+
options[:selector] = object
|
40
|
+
else
|
41
|
+
options[:browser_element] = object
|
42
|
+
end
|
37
43
|
|
38
44
|
add_element_definition(name) do |*args_for_block|
|
39
|
-
page_section = PageMagic::Element.new name, args_for_block.delete_at(0),
|
40
|
-
page_section.
|
45
|
+
page_section = PageMagic::Element.new name, args_for_block.delete_at(0), options
|
46
|
+
page_section.expand *args_for_block, &(block || Proc.new {})
|
41
47
|
page_section
|
42
48
|
end
|
43
49
|
|
@@ -50,7 +56,7 @@ module PageMagic
|
|
50
56
|
end
|
51
57
|
|
52
58
|
add_element_definition(name) do |parent_browser_element|
|
53
|
-
section_class.new(name, parent_browser_element, :section, selector|| section_class.selector)
|
59
|
+
section_class.new(name, parent_browser_element, type: :section, selector: (selector || section_class.selector))
|
54
60
|
end
|
55
61
|
|
56
62
|
end
|
data/lib/page_magic.rb
CHANGED
data/spec/element_spec.rb
CHANGED
@@ -46,11 +46,11 @@ describe 'Page elements' do
|
|
46
46
|
|
47
47
|
describe 'browser_element' do
|
48
48
|
it 'should raise an error if a selector has not been specified' do
|
49
|
-
expect { PageMagic::Element.new(:name, Object.new, :
|
49
|
+
expect { PageMagic::Element.new(:name, Object.new, type: :element).browser_element }.to raise_error(PageMagic::UndefinedSelectorException)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
describe '
|
53
|
+
describe '#browser_element' do
|
54
54
|
let!(:browser) { double('browser') }
|
55
55
|
let!(:page) do
|
56
56
|
page_class = Class.new do
|
@@ -59,58 +59,102 @@ describe 'Page elements' do
|
|
59
59
|
page_class.new
|
60
60
|
end
|
61
61
|
|
62
|
+
context 'options supplied to selector' do
|
63
|
+
it 'passes them on to the cappybara finder method' do
|
64
|
+
options = {key: :value}
|
65
|
+
xpath_selector = '//input'
|
66
|
+
expect(Capybara.current_session).to receive(:find).with(:xpath, xpath_selector, options)
|
67
|
+
PageMagic::Element.new(:my_input, page, type: :text_field, selector: {xpath: xpath_selector}.merge(options)).browser_element
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
62
71
|
it 'should find by xpath' do
|
63
|
-
element = PageMagic::Element.new(:my_input, page, :text_field, xpath: '//input').browser_element
|
72
|
+
element = PageMagic::Element.new(:my_input, page, type: :text_field, selector: {xpath: '//input'}).browser_element
|
64
73
|
element.value == 'filled in'
|
65
74
|
end
|
66
75
|
|
67
76
|
it 'should locate an element using its id' do
|
68
|
-
element = PageMagic::Element.new(:my_input, page, :text_field, id: 'field_id').browser_element
|
77
|
+
element = PageMagic::Element.new(:my_input, page, type: :text_field, selector: {id: 'field_id'}).browser_element
|
69
78
|
element.value.should == 'filled in'
|
70
79
|
end
|
71
80
|
|
72
81
|
it 'should locate an element using its name' do
|
73
|
-
element = PageMagic::Element.new(:my_input, page, :text_field, name: 'field_name').browser_element
|
82
|
+
element = PageMagic::Element.new(:my_input, page, type: :text_field, selector: {name: 'field_name'}).browser_element
|
74
83
|
element.value.should == 'filled in'
|
75
84
|
end
|
76
85
|
|
77
86
|
|
78
87
|
it 'should locate an element using its label' do
|
79
|
-
element = PageMagic::Element.new(:my_link, page, :link, label: 'enter text').browser_element
|
88
|
+
element = PageMagic::Element.new(:my_link, page, type: :link, selector: {label: 'enter text'}).browser_element
|
80
89
|
element[:id].should == 'field_id'
|
81
90
|
end
|
82
91
|
|
83
92
|
it 'should raise an exception when finding another element using its text' do
|
84
|
-
expect { PageMagic::Element.new(:my_link, page, :text_field, text: 'my link').browser_element }.to raise_error(PageMagic::UnsupportedSelectorException)
|
93
|
+
expect { PageMagic::Element.new(:my_link, page, type: :text_field, selector: {text: 'my link'}).browser_element }.to raise_error(PageMagic::UnsupportedSelectorException)
|
85
94
|
end
|
86
95
|
|
87
96
|
it 'should locate an element using css' do
|
88
|
-
element = PageMagic::Element.new(:my_link, page, :link, css: "input[name='field_name']").browser_element
|
97
|
+
element = PageMagic::Element.new(:my_link, page, type: :link, selector: {css: "input[name='field_name']"}).browser_element
|
89
98
|
element[:id].should == 'field_id'
|
90
99
|
end
|
91
100
|
|
92
101
|
|
93
102
|
it 'should return a prefetched value' do
|
94
|
-
PageMagic::Element.new(:help, page, :link, :prefetched_object).browser_element.should == :prefetched_object
|
103
|
+
PageMagic::Element.new(:help, page, type: :link, browser_element: :prefetched_object).browser_element.should == :prefetched_object
|
95
104
|
end
|
96
105
|
|
97
106
|
it 'should raise errors for unsupported selectors' do
|
98
|
-
expect { PageMagic::Element.new(:my_link, page, :link, unsupported: "").browser_element }.to raise_error(PageMagic::UnsupportedSelectorException)
|
107
|
+
expect { PageMagic::Element.new(:my_link, page, type: :link, selector: {unsupported: ""}).browser_element }.to raise_error(PageMagic::UnsupportedSelectorException)
|
99
108
|
end
|
100
109
|
|
101
110
|
context 'text selector' do
|
102
111
|
it 'should locate a link' do
|
103
|
-
element = PageMagic::Element.new(:my_link, page, :link, text: 'my link').browser_element
|
112
|
+
element = PageMagic::Element.new(:my_link, page, type: :link, selector: {text: 'my link'}).browser_element
|
104
113
|
element[:id].should == 'my_link'
|
105
114
|
end
|
106
115
|
|
107
116
|
it 'should locate a button' do
|
108
|
-
element = PageMagic::Element.new(:my_button, page, :button, text: 'my button').browser_element
|
117
|
+
element = PageMagic::Element.new(:my_button, page, type: :button, selector: {text: 'my button'}).browser_element
|
109
118
|
element[:id].should == 'my_button'
|
110
119
|
end
|
111
120
|
end
|
112
121
|
end
|
113
122
|
|
123
|
+
describe '#section?' do
|
124
|
+
context 'element definitions exist' do
|
125
|
+
subject do
|
126
|
+
PageMagic::Element.new(:my_link, :page, type: :link, selector: {text: 'my link'}) do
|
127
|
+
element :thing, text: 'text'
|
128
|
+
end
|
129
|
+
end
|
130
|
+
it 'returns true' do
|
131
|
+
expect(subject.section?).to eq(true)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'method defined' do
|
136
|
+
subject do
|
137
|
+
PageMagic::Element.new(:my_link, :page, type: :link, selector: {text: 'my link'}) do
|
138
|
+
def custom_method
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'returns true' do
|
144
|
+
expect(subject.section?).to eq(true)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'neither method or elements defined' do
|
149
|
+
subject do
|
150
|
+
PageMagic::Element.new(:my_link, :page, type: :link, selector: {text: 'my link'})
|
151
|
+
end
|
152
|
+
it 'returns false' do
|
153
|
+
expect(subject.section?).to eq(false)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
114
158
|
describe 'session' do
|
115
159
|
it 'should have a handle to the session' do
|
116
160
|
page_class = Class.new do
|
@@ -118,7 +162,7 @@ describe 'Page elements' do
|
|
118
162
|
end
|
119
163
|
page = page_class.new
|
120
164
|
|
121
|
-
PageMagic::Element.new(:help, page, :link, :selector).session.should == page.session
|
165
|
+
PageMagic::Element.new(:help, page, type: :link, selector: :selector).session.should == page.session
|
122
166
|
end
|
123
167
|
end
|
124
168
|
|
File without changes
|
@@ -113,6 +113,11 @@ describe PageMagic::ElementContext do
|
|
113
113
|
|
114
114
|
describe 'hooks' do
|
115
115
|
|
116
|
+
|
117
|
+
#it 'only applies them if browser element supports event' do
|
118
|
+
# page = elements_page.new
|
119
|
+
#end
|
120
|
+
|
116
121
|
it 'should execute a before and after action that gives access to the browser' do
|
117
122
|
|
118
123
|
page = elements_page.new
|
@@ -2,7 +2,7 @@ describe PageMagic::Elements do
|
|
2
2
|
|
3
3
|
|
4
4
|
let(:page_elements) do
|
5
|
-
|
5
|
+
Class.new do
|
6
6
|
extend(PageMagic::Elements)
|
7
7
|
end
|
8
8
|
end
|
@@ -17,7 +17,7 @@ describe PageMagic::Elements do
|
|
17
17
|
|
18
18
|
context 'using a selector' do
|
19
19
|
it 'should add an element' do
|
20
|
-
expected_element = PageMagic::Element.new(:name, parent_page_element, :text_field, selector)
|
20
|
+
expected_element = PageMagic::Element.new(:name, parent_page_element, type: :text_field, selector: selector)
|
21
21
|
page_elements.text_field :name, selector
|
22
22
|
page_elements.element_definitions[:name].call(parent_page_element).should == expected_element
|
23
23
|
end
|
@@ -40,7 +40,7 @@ describe PageMagic::Elements do
|
|
40
40
|
|
41
41
|
context 'using a predefined class' do
|
42
42
|
it 'should add a section' do
|
43
|
-
expected_section = section_class.new(:page_section, parent_page_element, :section, selector)
|
43
|
+
expected_section = section_class.new(:page_section, parent_page_element, type: :section, selector: selector)
|
44
44
|
|
45
45
|
page_elements.section section_class, :page_section, selector
|
46
46
|
page_elements.elements(parent_page_element).first.should == expected_section
|
@@ -118,7 +118,7 @@ describe PageMagic::Elements do
|
|
118
118
|
describe 'location' do
|
119
119
|
context 'a prefetched object' do
|
120
120
|
it 'should add a section' do
|
121
|
-
expected_section = section_class.new(:page_section, parent_page_element, :section, :object)
|
121
|
+
expected_section = section_class.new(:page_section, parent_page_element, type: :section, browser_element: :object)
|
122
122
|
page_elements.section :page_section, :object
|
123
123
|
expected_section.should == page_elements.elements(parent_page_element).first
|
124
124
|
end
|
File without changes
|
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.alpha5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leon Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -52,6 +52,34 @@ 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'
|
55
83
|
description: Framework for modeling and interacting with webpages which wraps capybara
|
56
84
|
email: info@lad-tech.com
|
57
85
|
executables: []
|
@@ -65,12 +93,12 @@ files:
|
|
65
93
|
- .travis.yml
|
66
94
|
- Gemfile
|
67
95
|
- Gemfile.lock
|
96
|
+
- Guardfile
|
68
97
|
- README.md
|
69
98
|
- Rakefile
|
70
99
|
- VERSION
|
71
100
|
- lib/ext/string.rb
|
72
101
|
- lib/page_magic.rb
|
73
|
-
- lib/page_magic/ajax_support.rb
|
74
102
|
- lib/page_magic/browser.rb
|
75
103
|
- lib/page_magic/element.rb
|
76
104
|
- lib/page_magic/element_context.rb
|
@@ -79,18 +107,18 @@ files:
|
|
79
107
|
- lib/page_magic/page_magic.rb
|
80
108
|
- lib/page_magic/session.rb
|
81
109
|
- page_magic.gemspec
|
82
|
-
- spec/browser_spec.rb
|
83
|
-
- spec/element_context_spec.rb
|
84
110
|
- spec/element_spec.rb
|
85
111
|
- spec/helpers/capybara.rb
|
86
112
|
- spec/member_methods_spec.rb
|
113
|
+
- spec/page_magic/browser_spec.rb
|
114
|
+
- spec/page_magic/element_context_spec.rb
|
87
115
|
- spec/page_magic/elements_spec.rb
|
116
|
+
- spec/page_magic/session_spec.rb
|
88
117
|
- spec/page_magic/usage/defining_page_elements_spec.rb
|
89
118
|
- spec/page_magic/usage/defining_pages_spec.rb
|
90
119
|
- spec/page_magic/usage/include_page_magic_spec.rb
|
91
120
|
- spec/page_magic/usage/interacting_with_pages_spec.rb
|
92
121
|
- spec/page_magic/usage/starting_a_session_spec.rb
|
93
|
-
- spec/session_spec.rb
|
94
122
|
- spec/spec_helper.rb
|
95
123
|
homepage: https://github.com/ladtech/page_magic
|
96
124
|
licenses:
|
@@ -112,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
140
|
version: 1.3.1
|
113
141
|
requirements: []
|
114
142
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.
|
143
|
+
rubygems_version: 2.2.2
|
116
144
|
signing_key:
|
117
145
|
specification_version: 4
|
118
146
|
summary: Framework for modeling and interacting with webpages
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module PageMagic
|
2
|
-
module AjaxSupport
|
3
|
-
def on_element_with_trigger css_selector, event, browser, &block
|
4
|
-
set_variable_on_event(browser, css_selector, event)
|
5
|
-
yield
|
6
|
-
wait_until(:timeout_after => 20.seconds, :retry_every => 1.second) do
|
7
|
-
event_triggered(browser, event)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def event_triggered(browser, variable)
|
12
|
-
browser.execute_script("return #{variable}_triggered")
|
13
|
-
end
|
14
|
-
|
15
|
-
def set_variable_on_event(browser, element, event)
|
16
|
-
variable_name="#{event}_triggered"
|
17
|
-
browser.execute_script("#{variable_name}=false")
|
18
|
-
browser.execute_script("$('#{element}').on('#{event}', function(){#{variable_name}=true})")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|