gridium 0.1.21 → 0.2.0
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.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/lib/driver.rb +29 -1
- data/lib/gridium.rb +5 -1
- data/lib/gridium/version.rb +1 -1
- data/lib/log.rb +1 -1
- data/lib/s3.rb +70 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6756e4e593e9c99a266fe4bfb1c1c1f3a4412743
|
4
|
+
data.tar.gz: a7923e3514793d68fb2b60297a8792cfd0225d0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e07a44f3e1b61c6799b1ff4e323c4ce78b80df02ec0415456e925cc00364baf1cfbc632f9a92380e5d30f7fab38d64c89bab7651d76ab459bb91a229930394b7
|
7
|
+
data.tar.gz: aa89e4c7e8fa3f84bff99f9adde4ba50850291a470457529fb02336d146ac141353b090ebb7270767b44d348aac27d39df6b5c4b79702f75360465679180427b
|
data/Gemfile
CHANGED
data/lib/driver.rb
CHANGED
@@ -11,6 +11,7 @@ class Driver
|
|
11
11
|
driver.manage.timeouts.page_load = Gridium.config.page_load_timeout
|
12
12
|
driver.manage.timeouts.implicit_wait = Gridium.config.element_timeout
|
13
13
|
|
14
|
+
# Ensure the browser is maximized to maximize visibility of element
|
14
15
|
# Ensure the browser is maximized to maximize visibility of element
|
15
16
|
# Currently doesn't work with chromedriver, but the following workaround does:
|
16
17
|
if @browser_type.eql?(:chrome)
|
@@ -24,9 +25,9 @@ class Driver
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def self.driver
|
27
|
-
Log.debug("=====> Driver.driver: #{@@driver}")
|
28
28
|
begin
|
29
29
|
unless @@driver
|
30
|
+
Log.debug("=====> Driver.driver: instantiating new driver")
|
30
31
|
@browser_type = Gridium.config.browser
|
31
32
|
##Adding support for remote browsers
|
32
33
|
if Gridium.config.browser_source == :remote
|
@@ -40,6 +41,17 @@ class Driver
|
|
40
41
|
else
|
41
42
|
@@driver = Selenium::WebDriver.for(Gridium.config.browser)
|
42
43
|
end
|
44
|
+
if Gridium.config.screenshots_to_s3
|
45
|
+
#do stuff
|
46
|
+
s3_project_folder = Gridium.config.project_name_for_s3
|
47
|
+
s3_subfolder = Gridium.config.subdirectory_name_for_s3
|
48
|
+
Log.debug("configuring s3 to save files to this directory: #{s3_project_folder} in addition to being saved locally")
|
49
|
+
@s3 = Gridium::GridiumS3.new(s3_project_folder, s3_subfolder)
|
50
|
+
Log.debug("s3 is #{@s3}")
|
51
|
+
else
|
52
|
+
Log.debug("s3 screenshots not enabled in spec_helper; they will be only be saved locally")
|
53
|
+
@s3 = nil
|
54
|
+
end
|
43
55
|
reset
|
44
56
|
end
|
45
57
|
@@driver
|
@@ -51,6 +63,12 @@ class Driver
|
|
51
63
|
end
|
52
64
|
end
|
53
65
|
|
66
|
+
|
67
|
+
def self.s3
|
68
|
+
#TODO figure out why I can't just use attr_reader :s3
|
69
|
+
@s3
|
70
|
+
end
|
71
|
+
|
54
72
|
def self.driver= driver
|
55
73
|
@@driver.quit if @@driver
|
56
74
|
@@driver = driver
|
@@ -180,9 +198,19 @@ class Driver
|
|
180
198
|
timestamp = Time.now.strftime("%Y_%m_%d__%H_%M_%S")
|
181
199
|
screenshot_path = File.join($current_run_dir, "screenshot__#{timestamp}__#{type}.png")
|
182
200
|
driver.save_screenshot(screenshot_path)
|
201
|
+
_save_to_s3_if_configured(screenshot_path)
|
183
202
|
SpecData.screenshots_captured.push("screenshot__#{timestamp}__#{type}.png") # used by custom_formatter.rb for embedding in report
|
203
|
+
screenshot_path
|
184
204
|
end
|
185
205
|
|
206
|
+
def self._save_to_s3_if_configured(screenshot_path)
|
207
|
+
if Gridium.config.screenshots_to_s3
|
208
|
+
url = @s3.save_file(screenshot_path)
|
209
|
+
Log.info("#{screenshot_path} saved to #{url}")
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
|
186
214
|
def self.list_open_windows
|
187
215
|
handles = driver.window_handles
|
188
216
|
Log.debug("List of active windows:")
|
data/lib/gridium.rb
CHANGED
@@ -7,6 +7,7 @@ require 'element'
|
|
7
7
|
require 'element_extensions'
|
8
8
|
require 'element_verification'
|
9
9
|
require 'page'
|
10
|
+
require 's3'
|
10
11
|
|
11
12
|
module Gridium
|
12
13
|
class << self
|
@@ -20,7 +21,7 @@ module Gridium
|
|
20
21
|
|
21
22
|
class Config
|
22
23
|
attr_accessor :report_dir, :browser_source, :target_environment, :browser, :url, :page_load_timeout, :element_timeout, :visible_elements_only, :log_level
|
23
|
-
attr_accessor :highlight_verifications, :highlight_duration, :screenshot_on_failure
|
24
|
+
attr_accessor :highlight_verifications, :highlight_duration, :screenshot_on_failure, :screenshots_to_s3, :project_name_for_s3, :subdirectory_name_for_s3
|
24
25
|
|
25
26
|
def initialize
|
26
27
|
@report_dir = Dir.home
|
@@ -35,6 +36,9 @@ module Gridium
|
|
35
36
|
@highlight_verifications = false
|
36
37
|
@highlight_duration = 0.100
|
37
38
|
@screenshot_on_failure = false
|
39
|
+
@screenshots_to_s3 = false
|
40
|
+
@project_name_for_s3 = 'gridium'
|
41
|
+
@subdirectory_name_for_s3 = '' #rely on GridiumS3 default
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
data/lib/gridium/version.rb
CHANGED
data/lib/log.rb
CHANGED
@@ -86,6 +86,7 @@ module Gridium
|
|
86
86
|
@@devices ||= []
|
87
87
|
log.attach(device)
|
88
88
|
@@devices << device
|
89
|
+
log.add(log.level, "device added: #{File.absolute_path(device)}")
|
89
90
|
end
|
90
91
|
|
91
92
|
def close
|
@@ -134,7 +135,6 @@ module Gridium
|
|
134
135
|
"#{base_msg} X #{msg}\n"
|
135
136
|
end
|
136
137
|
end
|
137
|
-
|
138
138
|
logger
|
139
139
|
end # initialize_logger
|
140
140
|
end # class << self
|
data/lib/s3.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
module Gridium
|
3
|
+
|
4
|
+
|
5
|
+
class GridiumS3
|
6
|
+
|
7
|
+
ACCESS_KEY_ID = ENV['S3_ACCESS_KEY_ID']
|
8
|
+
SECRET_ACCESS_KEY = ENV['S3_SECRET_ACCESS_KEY']
|
9
|
+
DEFAULT_REGION = ENV['S3_DEFAULT_REGION']
|
10
|
+
ROOT_BUCKET = ENV['S3_ROOT_BUCKET']
|
11
|
+
DELIMITER = "/"
|
12
|
+
|
13
|
+
|
14
|
+
def initialize(project_name, subdirectory_name='screenshots')
|
15
|
+
Log.debug("initializing GridiumS3 with #{project_name} and #{subdirectory_name}")
|
16
|
+
Aws.config.update({ credentials: Aws::Credentials.new(ACCESS_KEY_ID, SECRET_ACCESS_KEY) ,region: DEFAULT_REGION})
|
17
|
+
_validate_string(project_name)
|
18
|
+
_validate_string(subdirectory_name)
|
19
|
+
@project_name = _sanitize_string(project_name)
|
20
|
+
@subdirectory_name = _sanitize_string(subdirectory_name)
|
21
|
+
@bucket = Aws::S3::Resource.new().bucket(ROOT_BUCKET)
|
22
|
+
end
|
23
|
+
|
24
|
+
def save_file(absolute_path_of_file)
|
25
|
+
Log.debug("attempting to save #{absolute_path_of_file} to s3")
|
26
|
+
_validate_path(absolute_path_of_file)
|
27
|
+
file_name = File.basename(absolute_path_of_file)
|
28
|
+
destination_name = create_s3_name(file_name)
|
29
|
+
@bucket.object(destination_name).upload_file(absolute_path_of_file)
|
30
|
+
@bucket.object(destination_name).wait_until_exists
|
31
|
+
_verify_upload(destination_name, absolute_path_of_file)
|
32
|
+
# @bucket.object(s3_name).presigned_url(:get, expires_in: 3600) #uncomment this if public url ends up not working out OPREQ-83850
|
33
|
+
@bucket.object(destination_name).public_url
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_s3_name(file_name)
|
37
|
+
_validate_string(file_name)
|
38
|
+
file_name = _sanitize_string(file_name)
|
39
|
+
joined_name = [@project_name, @subdirectory_name, file_name].join(DELIMITER)
|
40
|
+
joined_name
|
41
|
+
end
|
42
|
+
|
43
|
+
def _sanitize_string(input_string)
|
44
|
+
#remove left/right whitespace, split and join to collapse contiguous white space, replace whitespace and non-period special chars with underscore
|
45
|
+
input_string = input_string.strip().split.join(" ").gsub(/[^\w.]/i, '_')
|
46
|
+
input_string
|
47
|
+
end
|
48
|
+
|
49
|
+
def _validate_string(input_string)
|
50
|
+
Log.debug("attempting to validate #{input_string} for use as a name")
|
51
|
+
if input_string.empty? or input_string.strip().empty? then
|
52
|
+
raise(ArgumentError, "empty and/or whitespace file names are not wanted here.")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def _validate_path(path_to_file)
|
57
|
+
Log.debug("attmepting to validate #{path_to_file} as a legitimate path")
|
58
|
+
if not File.exist? path_to_file then
|
59
|
+
raise(ArgumentError, "this path doesn't resolve #{path_to_file}")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def _verify_upload(s3_name, local_absolute_path)
|
64
|
+
upload_size = @bucket.object(s3_name).content_length
|
65
|
+
local_size = File.size local_absolute_path
|
66
|
+
Log.debug("file upload verified: #{upload_size == local_size}. upload size is #{upload_size} and local size is #{local_size}")
|
67
|
+
upload_size == local_size
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gridium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seth Urban
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/gridium/version.rb
|
117
117
|
- lib/log.rb
|
118
118
|
- lib/page.rb
|
119
|
+
- lib/s3.rb
|
119
120
|
- lib/spec_data.rb
|
120
121
|
homepage: http://github.com/sethuster/gridium
|
121
122
|
licenses:
|