page_magic 0.11.0.alpha3 → 0.11.0.alpha5
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/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
|
[](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
|