ae_page_objects 0.5.2.mw1 → 0.5.2.mw2
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.
data/lib/ae_page_objects.rb
CHANGED
@@ -26,6 +26,7 @@ module AePageObjects
|
|
26
26
|
autoload :Window, 'ae_page_objects/window'
|
27
27
|
autoload :Node, 'ae_page_objects/node'
|
28
28
|
autoload :Document, 'ae_page_objects/document'
|
29
|
+
autoload :DocumentFinder, 'ae_page_objects/document_finder'
|
29
30
|
autoload :VariableDocument, 'ae_page_objects/variable_document'
|
30
31
|
autoload :Element, 'ae_page_objects/element'
|
31
32
|
autoload :ElementProxy, 'ae_page_objects/element_proxy'
|
@@ -3,54 +3,12 @@ module AePageObjects
|
|
3
3
|
include Concerns::Visitable
|
4
4
|
|
5
5
|
class << self
|
6
|
-
|
7
|
-
|
8
|
-
original_window = AePageObjects::Window.current
|
9
|
-
|
10
|
-
# Loop through all the windows and attempt to instantiate the Document. Continue to loop around
|
11
|
-
# until finding a Document that can be instantiated or timing out.
|
12
|
-
Capybara.wait_until do
|
13
|
-
find_window(&extra_condition)
|
14
|
-
end
|
15
|
-
|
16
|
-
rescue Capybara::TimeoutError
|
17
|
-
original_window.switch_to
|
18
|
-
|
19
|
-
all_windows = AePageObjects::Window.all.map do |window|
|
20
|
-
name = window.current_document && window.current_document.to_s || "<none>"
|
21
|
-
{:window_handle => window.handle, :document => name }
|
22
|
-
end
|
23
|
-
|
24
|
-
raise PageNotFound, "Couldn't find page #{self.name} in any of the open windows: #{all_windows.inspect}"
|
6
|
+
def find(*args, &block)
|
7
|
+
DocumentFinder.new(self).find(*args, &block)
|
25
8
|
end
|
26
9
|
|
27
10
|
private
|
28
11
|
|
29
|
-
def find_window(&extra_condition)
|
30
|
-
AePageObjects::Window.all.each do |window|
|
31
|
-
window.switch_to
|
32
|
-
|
33
|
-
if inst = attempt_to_load(&extra_condition)
|
34
|
-
return inst
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
|
41
|
-
def attempt_to_load(&extra_condition)
|
42
|
-
inst = new
|
43
|
-
|
44
|
-
if extra_condition.nil? || inst.instance_eval(&extra_condition)
|
45
|
-
return inst
|
46
|
-
end
|
47
|
-
|
48
|
-
nil
|
49
|
-
rescue AePageObjects::LoadingFailed
|
50
|
-
# These will happen from the new() call above.
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
|
54
12
|
def site
|
55
13
|
@site ||= AePageObjects::Site.from(self)
|
56
14
|
end
|
@@ -69,4 +27,4 @@ module AePageObjects
|
|
69
27
|
self
|
70
28
|
end
|
71
29
|
end
|
72
|
-
end
|
30
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module AePageObjects
|
2
|
+
class DocumentFinder
|
3
|
+
|
4
|
+
def initialize(document_class)
|
5
|
+
@document_class = document_class
|
6
|
+
end
|
7
|
+
|
8
|
+
class Conditions
|
9
|
+
def initialize(conditions, block_condition)
|
10
|
+
@conditions = conditions || {}
|
11
|
+
@conditions[:block] = block_condition if block_condition
|
12
|
+
end
|
13
|
+
|
14
|
+
def match?(page)
|
15
|
+
@conditions.each do |type, value|
|
16
|
+
case type
|
17
|
+
when :title then
|
18
|
+
return false unless browser.title.include?(value)
|
19
|
+
when :url then
|
20
|
+
return false unless page.current_url.include?(value)
|
21
|
+
when :block then
|
22
|
+
return false unless value.call(page)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def find(conditions = {}, &extra_condition)
|
31
|
+
original_window = AePageObjects::Window.current
|
32
|
+
|
33
|
+
# Loop through all the windows and attempt to instantiate the Document. Continue to loop around
|
34
|
+
# until finding a Document that can be instantiated or timing out.
|
35
|
+
Capybara.wait_until do
|
36
|
+
find_window(Conditions.new(conditions, extra_condition))
|
37
|
+
end
|
38
|
+
|
39
|
+
rescue Capybara::TimeoutError
|
40
|
+
original_window.switch_to
|
41
|
+
|
42
|
+
all_windows = AePageObjects::Window.all.map do |window|
|
43
|
+
name = window.current_document && window.current_document.to_s || "<none>"
|
44
|
+
{:window_handle => window.handle, :document => name }
|
45
|
+
end
|
46
|
+
|
47
|
+
raise PageNotFound, "Couldn't find page #{@document_class.name} in any of the open windows: #{all_windows.inspect}"
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def find_window(conditions)
|
53
|
+
AePageObjects::Window.all.each do |window|
|
54
|
+
window.switch_to
|
55
|
+
|
56
|
+
if inst = attempt_to_load(conditions)
|
57
|
+
return inst
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
|
64
|
+
def attempt_to_load(conditions)
|
65
|
+
inst = @document_class.new
|
66
|
+
|
67
|
+
if conditions.match?(inst)
|
68
|
+
return inst
|
69
|
+
end
|
70
|
+
|
71
|
+
nil
|
72
|
+
rescue AePageObjects::LoadingFailed
|
73
|
+
# These will happen from the new() call above.
|
74
|
+
nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ae_page_objects
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: -4066462860
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
9
|
- 2
|
10
10
|
- mw
|
11
|
-
-
|
12
|
-
version: 0.5.2.
|
11
|
+
- 2
|
12
|
+
version: 0.5.2.mw2
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Donnie Tognazzini
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2013-
|
20
|
+
date: 2013-11-08 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: capybara
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- lib/ae_page_objects/core/universe.rb
|
57
57
|
- lib/ae_page_objects/core_ext/module.rb
|
58
58
|
- lib/ae_page_objects/document.rb
|
59
|
+
- lib/ae_page_objects/document_finder.rb
|
59
60
|
- lib/ae_page_objects/element.rb
|
60
61
|
- lib/ae_page_objects/element_proxy.rb
|
61
62
|
- lib/ae_page_objects/elements/checkbox.rb
|