selenium-client 1.1 → 1.2

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.
@@ -1,187 +0,0 @@
1
- require "digest/md5"
2
- require "base64"
3
- require "rubygems"
4
- require "spec"
5
- require 'spec/runner/formatter/html_formatter'
6
-
7
- module Selenium
8
- module RSpec
9
- class ScreenshotFormatter < Spec::Runner::Formatter::HtmlFormatter
10
- PLACEHOLDER = "<<placeholder>>"
11
-
12
- ################### Hooks? ########
13
-
14
- def start(example_count)
15
- super
16
- # ensure there's at least 1 example group header (normally 0 with deep_test)
17
- # prevents js and html validity errors
18
- example_group = Object.new
19
- def example_group.description; ""; end
20
- add_example_group(example_group)
21
- end
22
-
23
- def move_progress
24
- # we don't have current_example_number, and we don't really care about the progress bar
25
- end
26
-
27
- def extra_failure_content(failure)
28
- super + PLACEHOLDER
29
- end
30
-
31
- def example_passed(example)
32
- include_example_group_description example
33
- super
34
- end
35
-
36
- def example_pending(example_group_description, example, message)
37
- include_example_group_description example
38
- super
39
- end
40
-
41
- def example_failed(example, counter, failure)
42
- include_example_group_description example
43
- old_output = @output
44
- @output = StringIO.new
45
- super
46
- result = @output.string
47
- result.gsub! PLACEHOLDER, html_capture(example)
48
- old_output.puts result
49
- old_output.flush
50
- ensure
51
- @output = old_output
52
- end
53
-
54
-
55
- ###### Called from After each ####
56
-
57
- def self.capture_browser_state(selenium_driver, example)
58
- # Selenium RC seems to 'freeze' every so often when calling getHTMLSource, especially when DeepTest timeout is low, I need to investigate...
59
- # Set deeptest :timeout_in_seconds => 30 to see it happen
60
- capture_html_snapshot selenium_driver, example
61
- capture_screenshot selenium_driver, example
62
- end
63
-
64
- def self.capture_html_snapshot(selenium_driver, example)
65
- html = selenium_driver.get_html_source
66
- File.open(file_for_html_capture(example), "w") { |f| f.write html }
67
- end
68
-
69
- def self.capture_screenshot(selenium_driver, example)
70
- selenium_driver.window_maximize
71
- encodedImage = selenium_driver.capture_screenshot_to_string
72
- pngImage = Base64.decode64(encodedImage)
73
- File.open(file_for_screenshot_capture(example), "w") { |f| f.write pngImage }
74
- end
75
-
76
- ################### Instrumentation ########
77
-
78
- def html_capture(example)
79
- dom_id = "example_" + self.class.hash_for_example(example)
80
- screenshot_url = self.class.relative_file_for_png_capture(example)
81
- snapshot_url = self.class.relative_file_for_html_capture(example)
82
- <<-EOS
83
- <div>[<a id="#{dom_id}_screenshot_link" href="javascript:toggleVisilibility('#{dom_id}_screenshot', 'Screenshot');">Show screenshot</a>]</div>
84
- <br/>
85
- <div id="#{dom_id}_screenshot" style="display: none">
86
- <a href="#{screenshot_url}">
87
- <img width="80%" src="#{screenshot_url}" />
88
- </a>
89
- </div>
90
- <br/>
91
-
92
- <div>[<a id="#{dom_id}_snapshot_link" href=\"javascript:toggleVisilibility('#{dom_id}_snapshot', 'Snapshot')\">Show snapshot</a>]</div>
93
- <br/><br/>
94
- <div id="#{dom_id}_snapshot" class="dyn-source">
95
- <a href="#{snapshot_url}">Full screen</a><br/><br/>
96
- <iframe src="#{snapshot_url}" width="100%" height="600px" ></iframe>
97
- </div>
98
- EOS
99
- end
100
-
101
-
102
- def self.relative_file_for_html_capture(example)
103
- "resources/example_#{hash_for_example(example)}.html"
104
- end
105
-
106
- def self.relative_file_for_png_capture(example)
107
- "resources/example_#{hash_for_example(example)}.png"
108
- end
109
-
110
- def self.file_for_html_capture(example)
111
- file_name = capture_root_dir + "/example_#{hash_for_example(example)}.html"
112
- FileUtils.mkdir_p(capture_root_dir) unless File.directory?(capture_root_dir)
113
- file_name
114
- end
115
-
116
- def self.file_for_screenshot_capture(example)
117
- file_name = capture_root_dir + "/example_#{hash_for_example(example)}.png"
118
- FileUtils.mkdir_p(capture_root_dir) unless File.directory?(capture_root_dir)
119
- file_name
120
- end
121
-
122
- def self.hash_for_example(example)
123
- Digest::MD5.hexdigest example.implementation_backtrace.first
124
- end
125
-
126
-
127
- def self.capture_root_dir
128
- root_dir + "/resources"
129
- end
130
-
131
- def self.root_dir
132
- (ENV['CC_BUILD_ARTIFACTS'] || './tmp/rspec_report')
133
- end
134
-
135
-
136
- def include_example_group_description(example)
137
- def example.description
138
- self.class.description.to_s + " :: " + super
139
- end
140
- end
141
-
142
-
143
- def report_header
144
- super + "\n<script type=\"text/javascript\">moveProgressBar('100.0');</script>"
145
- end
146
-
147
-
148
-
149
- def global_scripts
150
- super + <<-EOF
151
- function toggleVisilibility(id, description) {
152
- var section;
153
- var link;
154
-
155
- section = document.getElementById(id);
156
- link = document.getElementById(id + "_link");
157
-
158
- if (section.style.display == "block") {
159
- section.style.display = "none"
160
- link.innerHTML = description
161
- } else {
162
- section.style.display = "block"
163
- link.innerHTML = "Hide " + description
164
- }
165
- }
166
- EOF
167
- end
168
-
169
- def global_styles
170
- super + <<-EOF
171
- div.rspec-report textarea {
172
- width: 100%;
173
- }
174
-
175
- div.rspec-report .dyn-source {
176
- background: #FFFFEE none repeat scroll 0%;
177
- border:1px dotted black;
178
- color: #000000;
179
- display: none;
180
- margin: 0.5em 2em;
181
- padding: 0.5em;
182
- }
183
- EOF
184
- end
185
- end
186
- end
187
- end
@@ -1,25 +0,0 @@
1
- module Selenium
2
- module ScreenshotSaver
3
-
4
- def save_screenshot_to(png_path)
5
- dir = File.dirname(png_path)
6
- FileUtils.mkdir_p(dir) unless File.directory?(dir)
7
- if PLATFORM['darwin']
8
- sh "screencapture '#{png_path}'"
9
- elsif image_magick_support?
10
- sh "import -window root '#{png_path}'"
11
- end
12
- end
13
-
14
- def image_magick_support?
15
- @image_magick_support ||= `import --version`.grep /"ImageMagick"/
16
- end
17
-
18
- def sh(command)
19
- system command
20
- STDERR.puts "Warning: Could not capture screenshot with '#{command}'" unless $? == 0
21
- end
22
-
23
- end
24
-
25
- end