page_magic 1.2.1 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +44 -58
- data/VERSION +1 -1
- data/lib/page_magic/driver.rb +1 -1
- data/lib/page_magic/element/locators.rb +2 -2
- data/lib/page_magic/element/query.rb +1 -1
- data/lib/page_magic/element/selector.rb +2 -2
- data/lib/page_magic/element.rb +13 -2
- data/lib/page_magic/element_context.rb +3 -3
- data/lib/page_magic/element_definition_builder.rb +3 -3
- data/lib/page_magic/elements.rb +6 -6
- data/lib/page_magic/exceptions.rb +3 -0
- data/lib/page_magic/matcher.rb +3 -3
- data/lib/page_magic/session.rb +19 -12
- data/lib/page_magic/wait_methods.rb +3 -3
- data/lib/page_magic/watchers.rb +2 -2
- data/lib/page_magic.rb +2 -2
- data/page_magic.gemspec +3 -3
- data/spec/element_spec.rb +7 -0
- data/spec/page_magic/driver_spec.rb +1 -1
- data/spec/page_magic/element_context_spec.rb +1 -1
- data/spec/page_magic/elements_spec.rb +1 -1
- data/spec/page_magic/session_spec.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f73c42fab4dedc07b8f403de27bbafb7f06beda6
|
4
|
+
data.tar.gz: 6bb45f94bf3cebc7da9678dd29b4ec135c4899be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ca98987cf3ba24618714325f42b5b3567389f06dd4d67348a75fb22ac941f3e1d88250e373ec94397cfb2d93f6e484166824f319f4ffc92d75d5392efe3c862
|
7
|
+
data.tar.gz: 3cc31ae2222b73a2ad710595c2e16c4716cc8fba1b4ffd09132af280fbbe25406ec18a48c000dabad31d6369a2fd07fe0d09fbea4e772d23767ee0070d73412c
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,38 +1,28 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (4.2.
|
4
|
+
activesupport (4.2.6)
|
5
5
|
i18n (~> 0.7)
|
6
6
|
json (~> 1.7, >= 1.7.7)
|
7
7
|
minitest (~> 5.1)
|
8
8
|
thread_safe (~> 0.3, >= 0.3.4)
|
9
9
|
tzinfo (~> 1.1)
|
10
|
-
addressable (2.
|
11
|
-
ast (2.
|
12
|
-
astrolabe (1.3.1)
|
13
|
-
parser (~> 2.2)
|
10
|
+
addressable (2.4.0)
|
11
|
+
ast (2.2.0)
|
14
12
|
builder (3.2.2)
|
15
|
-
capybara (2.
|
13
|
+
capybara (2.7.1)
|
14
|
+
addressable
|
16
15
|
mime-types (>= 1.16)
|
17
16
|
nokogiri (>= 1.3.3)
|
18
17
|
rack (>= 1.0.0)
|
19
18
|
rack-test (>= 0.5.4)
|
20
19
|
xpath (~> 2.0)
|
21
|
-
certifi (
|
22
|
-
childprocess (0.5.
|
20
|
+
certifi (2016.02.28)
|
21
|
+
childprocess (0.5.9)
|
23
22
|
ffi (~> 1.0, >= 1.0.11)
|
24
23
|
cliver (0.3.2)
|
25
|
-
codeclimate-test-reporter (0.
|
24
|
+
codeclimate-test-reporter (0.5.0)
|
26
25
|
simplecov (>= 0.7.1, < 1.0.0)
|
27
|
-
cucumber (2.1.0)
|
28
|
-
builder (>= 2.1.2)
|
29
|
-
cucumber-core (~> 1.3.0)
|
30
|
-
diff-lcs (>= 1.1.3)
|
31
|
-
gherkin3 (~> 3.1.0)
|
32
|
-
multi_json (>= 1.7.5, < 2.0)
|
33
|
-
multi_test (>= 0.1.2)
|
34
|
-
cucumber-core (1.3.0)
|
35
|
-
gherkin3 (~> 3.1.0)
|
36
26
|
descendants_tracker (0.0.4)
|
37
27
|
thread_safe (~> 0.3, >= 0.3.1)
|
38
28
|
diff-lcs (1.2.5)
|
@@ -40,21 +30,19 @@ GEM
|
|
40
30
|
faraday (0.9.2)
|
41
31
|
multipart-post (>= 1.2, < 3)
|
42
32
|
ffi (1.9.10)
|
43
|
-
|
44
|
-
git (1.2.9.1)
|
33
|
+
git (1.3.0)
|
45
34
|
github-markup (1.4.0)
|
46
|
-
github_api (0.13.
|
47
|
-
addressable (~> 2.
|
35
|
+
github_api (0.13.1)
|
36
|
+
addressable (~> 2.4.0)
|
48
37
|
descendants_tracker (~> 0.0.4)
|
49
38
|
faraday (~> 0.8, < 0.10)
|
50
39
|
hashie (>= 3.4)
|
51
40
|
multi_json (>= 1.7.5, < 2.0)
|
52
|
-
nokogiri (~> 1.6.6)
|
53
41
|
oauth2
|
54
|
-
hashie (3.4.
|
42
|
+
hashie (3.4.4)
|
55
43
|
highline (1.7.8)
|
56
44
|
i18n (0.7.0)
|
57
|
-
jeweler (2.
|
45
|
+
jeweler (2.1.1)
|
58
46
|
builder
|
59
47
|
bundler (>= 1.0)
|
60
48
|
git (>= 1.2.5)
|
@@ -63,28 +51,28 @@ GEM
|
|
63
51
|
nokogiri (>= 1.5.10)
|
64
52
|
rake
|
65
53
|
rdoc
|
54
|
+
semver
|
66
55
|
json (1.8.3)
|
67
|
-
jwt (1.5.
|
56
|
+
jwt (1.5.1)
|
68
57
|
mime-types (3.0)
|
69
58
|
mime-types-data (~> 3.2015)
|
70
|
-
mime-types-data (3.
|
59
|
+
mime-types-data (3.2016.0221)
|
71
60
|
mini_portile2 (2.0.0)
|
72
|
-
minitest (5.8.
|
73
|
-
multi_json (1.
|
74
|
-
multi_test (0.1.2)
|
61
|
+
minitest (5.8.4)
|
62
|
+
multi_json (1.12.0)
|
75
63
|
multi_xml (0.5.5)
|
76
64
|
multipart-post (2.0.0)
|
77
|
-
nokogiri (1.6.7.
|
65
|
+
nokogiri (1.6.7.2)
|
78
66
|
mini_portile2 (~> 2.0.0.rc2)
|
79
|
-
oauth2 (1.
|
67
|
+
oauth2 (1.1.0)
|
80
68
|
faraday (>= 0.8, < 0.10)
|
81
|
-
jwt (~> 1.0)
|
69
|
+
jwt (~> 1.0, < 1.5.2)
|
82
70
|
multi_json (~> 1.3)
|
83
71
|
multi_xml (~> 0.5)
|
84
|
-
rack (
|
85
|
-
parser (2.
|
86
|
-
ast (
|
87
|
-
poltergeist (1.
|
72
|
+
rack (>= 1.2, < 3)
|
73
|
+
parser (2.3.1.0)
|
74
|
+
ast (~> 2.2)
|
75
|
+
poltergeist (1.9.0)
|
88
76
|
capybara (~> 2.1)
|
89
77
|
cliver (~> 0.3.1)
|
90
78
|
multi_json (~> 1.0)
|
@@ -98,55 +86,54 @@ GEM
|
|
98
86
|
rack
|
99
87
|
rack-test (0.6.3)
|
100
88
|
rack (>= 1.0)
|
101
|
-
rainbow (2.
|
102
|
-
rake (
|
103
|
-
rdoc (4.2.
|
89
|
+
rainbow (2.1.0)
|
90
|
+
rake (11.1.2)
|
91
|
+
rdoc (4.2.2)
|
104
92
|
json (~> 1.4)
|
105
|
-
redcarpet (3.3.
|
93
|
+
redcarpet (3.3.4)
|
106
94
|
rspec (3.4.0)
|
107
95
|
rspec-core (~> 3.4.0)
|
108
96
|
rspec-expectations (~> 3.4.0)
|
109
97
|
rspec-mocks (~> 3.4.0)
|
110
|
-
rspec-core (3.4.
|
98
|
+
rspec-core (3.4.4)
|
111
99
|
rspec-support (~> 3.4.0)
|
112
100
|
rspec-expectations (3.4.0)
|
113
101
|
diff-lcs (>= 1.2.0, < 2.0)
|
114
102
|
rspec-support (~> 3.4.0)
|
115
|
-
rspec-mocks (3.4.
|
103
|
+
rspec-mocks (3.4.1)
|
116
104
|
diff-lcs (>= 1.2.0, < 2.0)
|
117
105
|
rspec-support (~> 3.4.0)
|
118
106
|
rspec-support (3.4.1)
|
119
|
-
rubocop (0.
|
120
|
-
|
121
|
-
parser (>= 2.2.3.0, < 3.0)
|
107
|
+
rubocop (0.40.0)
|
108
|
+
parser (>= 2.3.1.0, < 3.0)
|
122
109
|
powerpack (~> 0.1)
|
123
110
|
rainbow (>= 1.99.1, < 3.0)
|
124
111
|
ruby-progressbar (~> 1.7)
|
125
|
-
|
126
|
-
ruby-progressbar (1.
|
127
|
-
rubyzip (1.
|
128
|
-
selenium-webdriver (2.
|
112
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
113
|
+
ruby-progressbar (1.8.1)
|
114
|
+
rubyzip (1.2.0)
|
115
|
+
selenium-webdriver (2.53.0)
|
129
116
|
childprocess (~> 0.5)
|
130
|
-
multi_json (~> 1.0)
|
131
117
|
rubyzip (~> 1.0)
|
132
118
|
websocket (~> 1.0)
|
133
|
-
|
119
|
+
semver (1.0.1)
|
120
|
+
simplecov (0.11.2)
|
134
121
|
docile (~> 1.1.0)
|
135
122
|
json (~> 1.8)
|
136
123
|
simplecov-html (~> 0.10.0)
|
137
124
|
simplecov-html (0.10.0)
|
138
|
-
sinatra (1.4.
|
139
|
-
rack (~> 1.
|
125
|
+
sinatra (1.4.7)
|
126
|
+
rack (~> 1.5)
|
140
127
|
rack-protection (~> 1.4)
|
141
128
|
tilt (>= 1.3, < 3)
|
142
129
|
thread_safe (0.3.5)
|
143
|
-
tilt (2.0.
|
144
|
-
tins (1.6.0)
|
130
|
+
tilt (2.0.3)
|
145
131
|
tzinfo (1.2.2)
|
146
132
|
thread_safe (~> 0.1)
|
133
|
+
unicode-display_width (1.0.5)
|
147
134
|
watir-webdriver (0.9.1)
|
148
135
|
selenium-webdriver (>= 2.46.2)
|
149
|
-
websocket (1.2.
|
136
|
+
websocket (1.2.3)
|
150
137
|
websocket-driver (0.6.3)
|
151
138
|
websocket-extensions (>= 0.1.0)
|
152
139
|
websocket-extensions (0.1.2)
|
@@ -161,7 +148,6 @@ DEPENDENCIES
|
|
161
148
|
activesupport (~> 4)
|
162
149
|
capybara (>= 2.5)
|
163
150
|
codeclimate-test-reporter
|
164
|
-
cucumber
|
165
151
|
github-markup (~> 1.4)
|
166
152
|
jeweler (~> 2.0)
|
167
153
|
poltergeist
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.3
|
data/lib/page_magic/driver.rb
CHANGED
@@ -25,7 +25,7 @@ module PageMagic
|
|
25
25
|
# @param [Symbol] browser name of required browser
|
26
26
|
# @param [Hash] options driver specific options
|
27
27
|
# @return [Object] Capybara compliant driver instance
|
28
|
-
def build(app, browser:, options:{})
|
28
|
+
def build(app, browser:, options: {})
|
29
29
|
handler.call(app, options, browser)
|
30
30
|
end
|
31
31
|
|
@@ -4,7 +4,7 @@ module PageMagic
|
|
4
4
|
# contains method for finding element definitions
|
5
5
|
module Locators
|
6
6
|
# message used when raising {ElementMissingException} from methods within this module
|
7
|
-
ELEMENT_NOT_DEFINED_MSG = 'Element not defined: %s'
|
7
|
+
ELEMENT_NOT_DEFINED_MSG = 'Element not defined: %s'.freeze
|
8
8
|
|
9
9
|
# find an element definition based on its name
|
10
10
|
# @param [Symbol] name name of the element
|
@@ -12,7 +12,7 @@ module PageMagic
|
|
12
12
|
# @raise [ElementMissingException] raised when element with the given name is not found
|
13
13
|
def element_by_name(name, *args)
|
14
14
|
defintion = element_definitions[name]
|
15
|
-
|
15
|
+
raise ElementMissingException, (ELEMENT_NOT_DEFINED_MSG % name) unless defintion
|
16
16
|
defintion.call(self, *args)
|
17
17
|
end
|
18
18
|
|
@@ -11,7 +11,7 @@ module PageMagic
|
|
11
11
|
# @param [Symbol] type the name of the required query in snakecase format
|
12
12
|
# @return [Query] returns the predefined query with the given name
|
13
13
|
def find(type)
|
14
|
-
query = constants.find { |constant| constant.to_s.
|
14
|
+
query = constants.find { |constant| constant.to_s.casecmp(type.to_s).zero? }
|
15
15
|
return ELEMENT unless query
|
16
16
|
const_get(query)
|
17
17
|
end
|
@@ -8,8 +8,8 @@ module PageMagic
|
|
8
8
|
# selectors
|
9
9
|
# @return [Selector] returns the predefined selector with the given name
|
10
10
|
def find(name)
|
11
|
-
selector = constants.find { |constant| constant.to_s.
|
12
|
-
|
11
|
+
selector = constants.find { |constant| constant.to_s.casecmp(name.to_s).zero? }
|
12
|
+
raise UnsupportedCriteriaException unless selector
|
13
13
|
const_get(selector)
|
14
14
|
end
|
15
15
|
end
|
data/lib/page_magic/element.rb
CHANGED
@@ -6,8 +6,9 @@ require 'page_magic/element/query'
|
|
6
6
|
module PageMagic
|
7
7
|
# class Element - represents an element in a html page.
|
8
8
|
class Element
|
9
|
-
EVENT_TYPES = [:set, :select, :select_option, :unselect_option, :click]
|
9
|
+
EVENT_TYPES = [:set, :select, :select_option, :unselect_option, :click].freeze
|
10
10
|
DEFAULT_HOOK = proc {}.freeze
|
11
|
+
EVENT_NOT_SUPPORTED_MSG = '%s event not supported'.freeze
|
11
12
|
|
12
13
|
include SelectorMethods, Watchers, SessionMethods, WaitMethods, Locators
|
13
14
|
extend Elements, SelectorMethods, Forwardable
|
@@ -68,12 +69,22 @@ module PageMagic
|
|
68
69
|
wrap_events(browser_element)
|
69
70
|
end
|
70
71
|
|
72
|
+
# @!method click
|
73
|
+
# @!method set
|
74
|
+
# @!method select
|
75
|
+
# @!method select_option
|
76
|
+
# @!method unselect_option
|
77
|
+
# calls method of the same name on the underlying Capybara element
|
78
|
+
# @raise [NotSupportedException] if the wrapped Capybara element does not support the method
|
71
79
|
EVENT_TYPES.each do |method|
|
72
80
|
define_method method do |*args|
|
81
|
+
unless browser_element.respond_to?(method)
|
82
|
+
raise NotSupportedException, EVENT_NOT_SUPPORTED_MSG % method
|
83
|
+
end
|
84
|
+
|
73
85
|
browser_element.send(method, *args)
|
74
86
|
end
|
75
87
|
end
|
76
|
-
|
77
88
|
def method_missing(method, *args, &block)
|
78
89
|
ElementContext.new(self).send(method, *args, &block)
|
79
90
|
rescue ElementMissingException
|
@@ -2,7 +2,7 @@ module PageMagic
|
|
2
2
|
# class ElementContext - resolves which element definition to use when accessing the browser.
|
3
3
|
class ElementContext
|
4
4
|
# Message template for execptions raised as a result of calling method_missing
|
5
|
-
ELEMENT_NOT_FOUND_MSG = 'Unable to find %s'
|
5
|
+
ELEMENT_NOT_FOUND_MSG = 'Unable to find %s'.freeze
|
6
6
|
|
7
7
|
attr_reader :page_element
|
8
8
|
|
@@ -36,9 +36,9 @@ module PageMagic
|
|
36
36
|
query_args = builder.build_query
|
37
37
|
result = page_element.browser_element.all(*query_args)
|
38
38
|
|
39
|
-
if result.
|
39
|
+
if result.empty?
|
40
40
|
query = Capybara::Query.new(*query_args)
|
41
|
-
|
41
|
+
raise ElementMissingException, ELEMENT_NOT_FOUND_MSG % query.description
|
42
42
|
end
|
43
43
|
|
44
44
|
result.to_a.collect { |e| builder.build(e) }
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module PageMagic
|
2
2
|
# Builder for creating ElementDefinitions
|
3
3
|
class ElementDefinitionBuilder
|
4
|
-
INVALID_SELECTOR_MSG = 'Pass a locator/define one on the class'
|
4
|
+
INVALID_SELECTOR_MSG = 'Pass a locator/define one on the class'.freeze
|
5
5
|
attr_reader :definition_class, :options, :selector, :type, :element
|
6
6
|
|
7
|
-
def initialize(definition_class:, selector:, type:, options:{}, element: nil)
|
7
|
+
def initialize(definition_class:, selector:, type:, options: {}, element: nil)
|
8
8
|
unless element
|
9
9
|
selector ||= definition_class.selector
|
10
|
-
|
10
|
+
raise UndefinedSelectorException, INVALID_SELECTOR_MSG if selector.nil? || selector.empty?
|
11
11
|
end
|
12
12
|
|
13
13
|
@definition_class = definition_class
|
data/lib/page_magic/elements.rb
CHANGED
@@ -12,9 +12,9 @@ module PageMagic
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
INVALID_METHOD_NAME_MSG = 'a method already exists with this method name'
|
15
|
+
INVALID_METHOD_NAME_MSG = 'a method already exists with this method name'.freeze
|
16
16
|
|
17
|
-
TYPES = [:text_field, :button, :link, :checkbox, :select_list, :radios, :textarea]
|
17
|
+
TYPES = [:text_field, :button, :link, :checkbox, :select_list, :radios, :textarea].freeze
|
18
18
|
|
19
19
|
class << self
|
20
20
|
def extended(clazz)
|
@@ -59,7 +59,7 @@ module PageMagic
|
|
59
59
|
add_element_definition(options.delete(:name)) do |parent_element, *e_args|
|
60
60
|
definition_class = Class.new(section_class) do
|
61
61
|
parent_element(parent_element)
|
62
|
-
class_exec(*e_args, &
|
62
|
+
class_exec(*e_args, &block)
|
63
63
|
end
|
64
64
|
ElementDefinitionBuilder.new(options.merge(definition_class: definition_class))
|
65
65
|
end
|
@@ -85,10 +85,10 @@ module PageMagic
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def add_element_definition(name, &block)
|
88
|
-
|
88
|
+
raise InvalidElementNameException, 'duplicate page element defined' if element_definitions[name]
|
89
89
|
|
90
90
|
methods = respond_to?(:instance_methods) ? instance_methods : methods()
|
91
|
-
|
91
|
+
raise InvalidElementNameException, INVALID_METHOD_NAME_MSG if methods.find { |method| method == name }
|
92
92
|
|
93
93
|
element_definitions[name] = block
|
94
94
|
end
|
@@ -104,7 +104,7 @@ module PageMagic
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def method_added(method)
|
107
|
-
|
107
|
+
raise InvalidMethodNameException, 'method name matches element name' if element_definitions[method]
|
108
108
|
end
|
109
109
|
|
110
110
|
def compute_argument(args, clazz)
|
data/lib/page_magic/matcher.rb
CHANGED
@@ -6,7 +6,7 @@ module PageMagic
|
|
6
6
|
|
7
7
|
# @raise [MatcherInvalidException] if at least one component is not specified
|
8
8
|
def initialize(path = nil, parameters: nil, fragment: nil)
|
9
|
-
|
9
|
+
raise MatcherInvalidException unless path || parameters || fragment
|
10
10
|
@path = path
|
11
11
|
@parameters = parameters
|
12
12
|
@fragment = fragment
|
@@ -19,7 +19,7 @@ module PageMagic
|
|
19
19
|
|
20
20
|
# @return [String] uri represented by this mapping
|
21
21
|
def compute_uri
|
22
|
-
|
22
|
+
path.to_s.tap do |uri|
|
23
23
|
uri << "?#{parameters.to_query}" if parameters
|
24
24
|
uri << "##{fragment}" if fragment
|
25
25
|
end
|
@@ -54,7 +54,7 @@ module PageMagic
|
|
54
54
|
path == other.path && parameters == other.parameters && fragment == other.fragment
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
alias eql? ==
|
58
58
|
|
59
59
|
private
|
60
60
|
|
data/lib/page_magic/session.rb
CHANGED
@@ -3,9 +3,10 @@ require 'page_magic/matcher'
|
|
3
3
|
module PageMagic
|
4
4
|
# class Session - coordinates access to the browser though page objects.
|
5
5
|
class Session
|
6
|
-
URL_MISSING_MSG = 'a path must be mapped or a url supplied'
|
7
|
-
REGEXP_MAPPING_MSG = 'URL could not be derived because mapping contains Regexps'
|
8
|
-
INVALID_MAPPING_MSG = 'mapping must be a string or regexp'
|
6
|
+
URL_MISSING_MSG = 'a path must be mapped or a url supplied'.freeze
|
7
|
+
REGEXP_MAPPING_MSG = 'URL could not be derived because mapping contains Regexps'.freeze
|
8
|
+
INVALID_MAPPING_MSG = 'mapping must be a string or regexp'.freeze
|
9
|
+
UNSUPPORTED_OPERATION_MSG = 'execute_script not supported by driver'.freeze
|
9
10
|
|
10
11
|
extend Forwardable
|
11
12
|
|
@@ -54,11 +55,15 @@ module PageMagic
|
|
54
55
|
end.to_h
|
55
56
|
end
|
56
57
|
|
57
|
-
# @!method execute_script
|
58
58
|
# execute javascript on the browser
|
59
59
|
# @param [String] script the script to be executed
|
60
60
|
# @return [Object] object returned by the capybara execute_script method
|
61
|
-
|
61
|
+
# @raise [NotSupportedException] if the capybara driver in use does not support execute script
|
62
|
+
def execute_script(script)
|
63
|
+
raw_session.execute_script(script)
|
64
|
+
rescue Capybara::NotSupportedByDriverError
|
65
|
+
raise NotSupportedException, UNSUPPORTED_OPERATION_MSG
|
66
|
+
end
|
62
67
|
|
63
68
|
# proxies unknown method calls to the currently loaded page object
|
64
69
|
# @return [Object] returned object from the page object method call
|
@@ -86,14 +91,16 @@ module PageMagic
|
|
86
91
|
# @raise [InvalidURLException] if neither a page or url are supplied
|
87
92
|
# @raise [InvalidURLException] if the mapped path for a page is a Regexp
|
88
93
|
def visit(page = nil, url: nil)
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
else
|
95
|
-
fail InvalidURLException, URL_MISSING_MSG
|
94
|
+
target_url = url || begin
|
95
|
+
if (mapping = transitions.key(page))
|
96
|
+
raise InvalidURLException, REGEXP_MAPPING_MSG unless mapping.can_compute_uri?
|
97
|
+
url(base_url, mapping.compute_uri)
|
98
|
+
end
|
96
99
|
end
|
100
|
+
|
101
|
+
raise InvalidURLException, URL_MISSING_MSG unless target_url
|
102
|
+
|
103
|
+
raw_session.visit(target_url)
|
97
104
|
@current_page = initialize_page(page) if page
|
98
105
|
self
|
99
106
|
end
|
@@ -6,13 +6,13 @@ module PageMagic
|
|
6
6
|
# wait_until do
|
7
7
|
# (rand % 2) == 0
|
8
8
|
# end
|
9
|
-
def wait_until(timeout_after: 5, retry_every: 1, &
|
9
|
+
def wait_until(timeout_after: 5, retry_every: 1, &_block)
|
10
10
|
start_time = Time.now
|
11
11
|
until Time.now > start_time + timeout_after
|
12
|
-
return true if
|
12
|
+
return true if yield == true
|
13
13
|
sleep retry_every
|
14
14
|
end
|
15
|
-
|
15
|
+
raise TimeoutException, 'Action took to long'
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/page_magic/watchers.rb
CHANGED
@@ -3,7 +3,7 @@ require 'page_magic/watcher'
|
|
3
3
|
module PageMagic
|
4
4
|
# module Watchers - contains methods for adding watchers and checking them
|
5
5
|
module Watchers
|
6
|
-
ELEMENT_MISSING_MSG = 'Unable to defined watcher: Element or method with the name %s can not be found'
|
6
|
+
ELEMENT_MISSING_MSG = 'Unable to defined watcher: Element or method with the name %s can not be found'.freeze
|
7
7
|
|
8
8
|
# @param [Symbol] name - the name of the watcher
|
9
9
|
# @return [Boolean] true if a change is detected
|
@@ -23,7 +23,7 @@ module PageMagic
|
|
23
23
|
# # more complicated code to get value
|
24
24
|
# end
|
25
25
|
def watch(name, method = nil, &block)
|
26
|
-
|
26
|
+
raise ElementMissingException, (ELEMENT_MISSING_MSG % name) unless block || respond_to?(name)
|
27
27
|
watched_element = block ? Watcher.new(name, &block) : Watcher.new(name, method)
|
28
28
|
watchers.delete_if { |w| w.name == name }
|
29
29
|
watchers << watched_element.check(self)
|
data/lib/page_magic.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
$LOAD_PATH.unshift(
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__).to_s)
|
2
2
|
require 'capybara'
|
3
3
|
require 'page_magic/exceptions'
|
4
4
|
require 'page_magic/wait_methods'
|
@@ -43,7 +43,7 @@ module PageMagic
|
|
43
43
|
# @return [Session] configured sessoin
|
44
44
|
def session(application: nil, browser: :rack_test, url:, options: {})
|
45
45
|
driver = drivers.find(browser)
|
46
|
-
|
46
|
+
raise UnspportedBrowserException unless driver
|
47
47
|
|
48
48
|
Capybara.register_driver browser do |app|
|
49
49
|
driver.build(app, browser: browser, options: options)
|
data/page_magic.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: page_magic 1.2.
|
5
|
+
# stub: page_magic 1.2.3 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "page_magic"
|
9
|
-
s.version = "1.2.
|
9
|
+
s.version = "1.2.3"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Leon Davis"]
|
14
|
-
s.date = "2016-
|
14
|
+
s.date = "2016-05-15"
|
15
15
|
s.description = "Framework for modeling and interacting with webpages which wraps capybara"
|
16
16
|
s.email = "info@lad-tech.com"
|
17
17
|
s.extra_rdoc_files = [
|
data/spec/element_spec.rb
CHANGED
@@ -126,6 +126,13 @@ module PageMagic
|
|
126
126
|
subject.select :args
|
127
127
|
end
|
128
128
|
end
|
129
|
+
|
130
|
+
context 'Capybara element does not respond to the method' do
|
131
|
+
it 'raises an error' do
|
132
|
+
expected_message = (described_class::EVENT_NOT_SUPPORTED_MSG % 'click')
|
133
|
+
expect { subject.click }.to raise_error(NotSupportedException, expected_message)
|
134
|
+
end
|
135
|
+
end
|
129
136
|
end
|
130
137
|
end
|
131
138
|
|
@@ -8,7 +8,7 @@ module PageMagic
|
|
8
8
|
|
9
9
|
describe '#build' do
|
10
10
|
it 'returns the result of the block passed to the driver class constructor' do
|
11
|
-
subject = described_class.new(:custom_browser)do
|
11
|
+
subject = described_class.new(:custom_browser) do
|
12
12
|
:driver
|
13
13
|
end
|
14
14
|
expect(subject.build(:rack_app, browser: :custom_browser, options: :options)).to eq(:driver)
|
@@ -142,7 +142,7 @@ module PageMagic
|
|
142
142
|
it 'should not evaluate the elements when applying naming checks' do
|
143
143
|
subject.class_eval do
|
144
144
|
link(:link1, :selector) do
|
145
|
-
|
145
|
+
raise('should not have been evaluated')
|
146
146
|
end
|
147
147
|
link(:link2, :selector)
|
148
148
|
end
|
@@ -75,6 +75,14 @@ module PageMagic
|
|
75
75
|
expect(browser).to receive(:execute_script).with(:script).and_return(:result)
|
76
76
|
expect(subject.execute_script(:script)).to be(:result)
|
77
77
|
end
|
78
|
+
|
79
|
+
context 'Capybara session does not support #execute_script' do
|
80
|
+
let(:browser) { Capybara::Driver::Base.new }
|
81
|
+
it 'raises an error' do
|
82
|
+
expected_message = described_class::UNSUPPORTED_OPERATION_MSG
|
83
|
+
expect { subject.execute_script(:script) }.to raise_error(NotSupportedException, expected_message)
|
84
|
+
end
|
85
|
+
end
|
78
86
|
end
|
79
87
|
|
80
88
|
describe '#find_mapped_page' do
|
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: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leon Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|