selenium_surfer 0.0.3 → 0.1.1
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/selenium_surfer/errors.rb +12 -1
- data/lib/selenium_surfer/search_context.rb +28 -11
- data/lib/selenium_surfer/version.rb +1 -1
- metadata +2 -2
@@ -17,11 +17,22 @@ module SeleniumSurfer
|
|
17
17
|
def initialize(_msg, _context)
|
18
18
|
super _msg
|
19
19
|
@context = _context
|
20
|
-
@source = _context.root_context.page_source # cache page source for future reference
|
20
|
+
@source = _context.root_context.page_source rescue nil # cache page source for future reference
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
# Error thrown when an element operation is attempted in an empty search result set
|
25
25
|
class EmptySetError < ContextError; end
|
26
26
|
|
27
|
+
# Wraps a web driver error adding
|
28
|
+
class WebDriverError < ContextError
|
29
|
+
|
30
|
+
attr_reader :original
|
31
|
+
|
32
|
+
def initialize(_original, _context)
|
33
|
+
super _original.message, _context
|
34
|
+
@original = _original
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
27
38
|
end
|
@@ -46,19 +46,23 @@ module SeleniumSurfer
|
|
46
46
|
# clears and sends_keys to this context main element
|
47
47
|
def fill(_value)
|
48
48
|
raise EmptySetError.new('Cannot call \'fill\' on an empty set', self) if empty?
|
49
|
-
|
50
|
-
|
49
|
+
wrap_errors do
|
50
|
+
context.first.clear
|
51
|
+
context.first.send_keys _value
|
52
|
+
end
|
51
53
|
end
|
52
54
|
|
53
55
|
# Any methods missing are forwarded to the main element (first).
|
54
56
|
def method_missing(_method, *_args, &_block)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
wrap_errors do
|
58
|
+
m = /^(.*)_all$/.match _method.to_s
|
59
|
+
if m then
|
60
|
+
return [] if empty?
|
61
|
+
context.map { |e| e.send(m[1], *_args, &_block) }
|
62
|
+
else
|
63
|
+
raise EmptySetError.new("Cannot call '#{_method}' on an empty set", self) if empty?
|
64
|
+
context.first.send(_method, *_args, &_block)
|
65
|
+
end
|
62
66
|
end
|
63
67
|
end
|
64
68
|
|
@@ -76,12 +80,25 @@ module SeleniumSurfer
|
|
76
80
|
|
77
81
|
private
|
78
82
|
|
83
|
+
# wrap every selenium errors that happen inside block.
|
84
|
+
def wrap_errors
|
85
|
+
begin
|
86
|
+
yield
|
87
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
88
|
+
raise WebDriverError.new e, self
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# base filtering method, expands current context
|
79
93
|
def search_elements(_options)
|
80
|
-
|
81
|
-
r
|
94
|
+
wrap_errors do
|
95
|
+
context.inject([]) do |r, element|
|
96
|
+
r + element.find_elements(_options)
|
97
|
+
end
|
82
98
|
end
|
83
99
|
end
|
84
100
|
|
101
|
+
# returns the current context
|
85
102
|
def context
|
86
103
|
@elements
|
87
104
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium_surfer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: selenium-webdriver
|