ae_page_objects 0.4.1.dt3 → 0.4.1.dt4
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/version.rb +1 -1
- data/lib/ae_page_objects/window.rb +96 -21
- metadata +11 -11
@@ -1,33 +1,109 @@
|
|
1
1
|
module AePageObjects
|
2
2
|
class Window
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
|
4
|
+
class Registry < Hash
|
5
|
+
def [](window_or_handle)
|
6
|
+
if window_or_handle.is_a?(Window)
|
7
|
+
super(window_or_handle.handle)
|
8
|
+
else
|
9
|
+
super(window_or_handle)
|
10
|
+
end
|
6
11
|
end
|
7
12
|
|
8
|
-
def
|
9
|
-
|
13
|
+
def add(window)
|
14
|
+
self[window.handle] = window
|
15
|
+
end
|
16
|
+
|
17
|
+
def remove(window)
|
18
|
+
self.delete(window.handle)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class HandleManager
|
23
|
+
def self.all
|
24
|
+
browser.window_handles
|
25
|
+
end
|
10
26
|
|
11
|
-
|
12
|
-
|
27
|
+
def self.current
|
28
|
+
# Accessing browser.window_handle tries to find an existing page, which will blow up
|
29
|
+
# if there isn't one. So... we look at the collection first as a guard.
|
30
|
+
if all.empty?
|
31
|
+
nil
|
32
|
+
else
|
33
|
+
browser.window_handle
|
13
34
|
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.switch_to(handle)
|
38
|
+
browser.switch_to.window(handle)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.browser
|
42
|
+
Capybara.current_session.driver.browser
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.close(handle)
|
46
|
+
all_handles_before_close = all()
|
47
|
+
more_than_one_window = (all_handles_before_close.size > 1)
|
48
|
+
|
49
|
+
# We must protect against closing the last window as doing so will quit the entire browser
|
50
|
+
# which would mess up subsequent tests.
|
51
|
+
# http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebDriver.html#close()
|
52
|
+
return false unless more_than_one_window
|
53
|
+
|
54
|
+
current_handle_before_switch = current
|
55
|
+
|
56
|
+
# switch to the window to close
|
57
|
+
switch_to(handle)
|
58
|
+
|
59
|
+
browser.close
|
14
60
|
|
15
|
-
unless
|
16
|
-
|
17
|
-
|
61
|
+
# need to switch back to something. Use whatever was switched from originally unless we just
|
62
|
+
# closed that window, in which case just pick something else.
|
63
|
+
switch_to(current_handle_before_switch == handle ? all.first : current_handle_before_switch)
|
64
|
+
|
65
|
+
true
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class << self
|
70
|
+
def registry
|
71
|
+
@registry ||= Registry.new
|
72
|
+
end
|
73
|
+
|
74
|
+
def close_all
|
75
|
+
all.each(&:close)
|
76
|
+
end
|
77
|
+
|
78
|
+
def all
|
79
|
+
HandleManager.all.map do |handle|
|
80
|
+
find(handle)
|
18
81
|
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def find(handle)
|
85
|
+
registry[handle] || create(handle)
|
86
|
+
end
|
87
|
+
|
88
|
+
def current
|
89
|
+
current_handle = HandleManager.current
|
19
90
|
|
20
|
-
|
91
|
+
find(current_handle) if current_handle
|
92
|
+
end
|
93
|
+
|
94
|
+
def create(handle)
|
95
|
+
new(registry, handle)
|
21
96
|
end
|
22
97
|
end
|
23
98
|
|
24
99
|
attr_reader :current_document, :handle
|
25
100
|
|
26
|
-
def initialize(handle)
|
27
|
-
@
|
101
|
+
def initialize(registry, handle)
|
102
|
+
@registry = registry
|
103
|
+
@handle = handle
|
28
104
|
@current_document = nil
|
29
105
|
|
30
|
-
|
106
|
+
@registry.add(self)
|
31
107
|
end
|
32
108
|
|
33
109
|
def current_document=(document)
|
@@ -36,16 +112,15 @@ module AePageObjects
|
|
36
112
|
end
|
37
113
|
|
38
114
|
def switch_to
|
39
|
-
|
115
|
+
HandleManager.switch_to(handle)
|
40
116
|
current_document
|
41
117
|
end
|
42
118
|
|
43
119
|
def close
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
self.class.all.delete(self)
|
120
|
+
if HandleManager.close(@handle)
|
121
|
+
self.current_document = nil
|
122
|
+
@registry.remove(self)
|
123
|
+
end
|
49
124
|
end
|
50
125
|
end
|
51
|
-
end
|
126
|
+
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: -4200723772
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
9
|
- 1
|
10
10
|
- dt
|
11
|
-
-
|
12
|
-
version: 0.4.1.
|
11
|
+
- 4
|
12
|
+
version: 0.4.1.dt4
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Donnie Tognazzini
|
@@ -20,7 +20,6 @@ cert_chain: []
|
|
20
20
|
date: 2013-07-19 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
|
-
type: :runtime
|
24
23
|
name: capybara
|
25
24
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
25
|
none: false
|
@@ -32,10 +31,10 @@ dependencies:
|
|
32
31
|
- 1
|
33
32
|
- 1
|
34
33
|
version: "1.1"
|
35
|
-
requirement: *id001
|
36
34
|
prerelease: false
|
35
|
+
type: :runtime
|
36
|
+
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
type: :development
|
39
38
|
name: appraisal
|
40
39
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
@@ -48,10 +47,10 @@ dependencies:
|
|
48
47
|
- 5
|
49
48
|
- 1
|
50
49
|
version: 0.5.1
|
51
|
-
requirement: *id002
|
52
50
|
prerelease: false
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
51
|
type: :development
|
52
|
+
requirement: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
55
54
|
name: mocha
|
56
55
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
57
56
|
none: false
|
@@ -64,10 +63,10 @@ dependencies:
|
|
64
63
|
- 13
|
65
64
|
- 3
|
66
65
|
version: 0.13.3
|
67
|
-
requirement: *id003
|
68
66
|
prerelease: false
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
67
|
type: :development
|
68
|
+
requirement: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
71
70
|
name: selenium-webdriver
|
72
71
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
73
72
|
none: false
|
@@ -78,8 +77,9 @@ dependencies:
|
|
78
77
|
segments:
|
79
78
|
- 0
|
80
79
|
version: "0"
|
81
|
-
requirement: *id004
|
82
80
|
prerelease: false
|
81
|
+
type: :development
|
82
|
+
requirement: *id004
|
83
83
|
description: Capybara Page Objects pattern
|
84
84
|
email:
|
85
85
|
- engineering@appfolio.com
|