auto_screenshot 0.0.1 → 0.0.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.
- data/Gemfile +4 -0
- data/README.md +28 -23
- data/lib/auto_screenshot.rb +39 -43
- data/lib/auto_screenshot/version.rb +1 -1
- metadata +4 -4
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,42 +1,47 @@
|
|
1
1
|
Auto Screenshot
|
2
2
|
===============
|
3
3
|
|
4
|
-
A small library designed to help document web products.
|
4
|
+
A small library designed to help the document web products.
|
5
5
|
|
6
6
|
## Usage
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
irb
|
11
|
-
load auto_screenshot.rb
|
8
|
+
gem install auto_screenshot
|
12
9
|
|
13
|
-
|
10
|
+
### Basics
|
14
11
|
|
15
|
-
|
12
|
+
Pass in an array of URL's,
|
16
13
|
|
17
|
-
urls = ["http://
|
18
|
-
s = Screenshot.new(:urls => urls)
|
14
|
+
urls = ["http://domain.lvh.me:3000", "http://domain.lvh.me:3000/link/1"]
|
15
|
+
s = Screenshot.new(:urls => urls)
|
19
16
|
|
20
|
-
|
17
|
+
read from a [.json](/links.json) file,
|
21
18
|
|
22
|
-
|
19
|
+
s = Screenshot.new(:file => "test.json") # an array of URL's as string
|
23
20
|
|
24
|
-
|
25
|
-
s.go # => screenshots are saved to the /screenshots directory as .png files
|
21
|
+
or, read a [.rb](/links.rb) file.
|
26
22
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
23
|
+
s = Screenshot.new(:file => "/users/name/path/to/links.rb")
|
24
|
+
|
25
|
+
Run Capybara (Selenium) and Firefox.
|
26
|
+
|
27
|
+
s.go # screenshots are saved to the /screenshots directory as .png files.
|
28
|
+
|
29
|
+
### Logging in and custom stuff
|
30
|
+
|
31
|
+
[Action Map](/action_map.rb) - an action map allows you to specify certain URL's that call some ruby code that you write. I built this to accomodate logins. It can be used for whatever.
|
32
|
+
|
33
|
+
s = Screenshot.new({ :file => "/some/links/in/ruby.rb",
|
34
|
+
:action_map => "/users/name/path/to/action_map.rb" })
|
31
35
|
|
32
|
-
|
33
|
-
s = Screenshot.new(:file => "test.json")
|
34
|
-
s.go
|
36
|
+
load 'lib/auto_screenshot.rb'
|
35
37
|
|
36
|
-
|
38
|
+
s = AutoScreenshot::Screenshot.new({
|
39
|
+
:links => "/users/ryanw/Desktop/ci.rb",
|
40
|
+
:action_mappings => "/path/to/action_mappings.json",
|
41
|
+
:action_map => "/path/to/action_map.rb",
|
42
|
+
:folder => "/path/to/screenshot_images"
|
43
|
+
})
|
37
44
|
|
38
|
-
load 'dmap.rb'
|
39
|
-
s = Screenshot.new(:urls => $links)
|
40
45
|
|
41
46
|
#### Remember
|
42
47
|
|
data/lib/auto_screenshot.rb
CHANGED
@@ -7,39 +7,45 @@ require 'capybara/dsl'
|
|
7
7
|
module AutoScreenshot
|
8
8
|
|
9
9
|
class Screenshot
|
10
|
-
|
11
10
|
include Capybara::DSL
|
12
11
|
Capybara.default_driver = :selenium
|
13
12
|
|
14
|
-
attr_accessor :
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
13
|
+
attr_accessor :links, :folder, :action_mappings, :action_map
|
14
|
+
|
15
|
+
# Pass in an array of URL's, with http(s)
|
16
|
+
# or
|
17
|
+
# Pass in a .json or .rb file of links
|
18
|
+
#
|
19
|
+
# pass in an action_map
|
20
|
+
# pass in a folder path to where to store the screenshots
|
21
|
+
def initialize(opts = { :links => "", :action_mappings => [], :action_map => "", :folder => "" })
|
22
|
+
raise Exception, "please pass in an array of urls like {:urls => []}, or a file, like {:file => \"test.json\"}" unless opts[:links]
|
23
|
+
|
24
|
+
@links = opts[:links]
|
25
|
+
if @links.class == Array
|
26
|
+
@links = links
|
27
|
+
elsif links.class == String
|
28
|
+
ext = File.extname(@links)
|
29
|
+
if ext == ".rb"
|
30
|
+
load @links
|
31
|
+
@links = $links
|
32
|
+
elsif ext == ".json"
|
33
|
+
@links = JSON.parse(File.open(@links, "r").read)
|
34
|
+
end
|
26
35
|
end
|
27
36
|
|
28
|
-
@
|
37
|
+
@action_mappings = set_action_mappings(opts[:action_mappings])
|
38
|
+
load opts[:action_map].to_s
|
29
39
|
@folder = opts[:folder] ||= "screenshots"
|
30
|
-
@action_map = action_map
|
31
40
|
end
|
32
41
|
|
33
42
|
def go
|
34
43
|
errors = []
|
35
|
-
@
|
44
|
+
@links.each do |url|
|
36
45
|
begin
|
37
46
|
puts "Getting #{url}"
|
38
47
|
visit "#{url}"
|
39
48
|
|
40
|
-
page.wait_until do
|
41
|
-
page.evaluate_script 'jQuery.active == 0'
|
42
|
-
end
|
43
49
|
snap
|
44
50
|
actions(url)
|
45
51
|
rescue => err
|
@@ -52,38 +58,28 @@ module AutoScreenshot
|
|
52
58
|
puts errors
|
53
59
|
end
|
54
60
|
|
55
|
-
|
56
|
-
|
61
|
+
# Load an action map .json file
|
62
|
+
# see /action_mappings.json as an example
|
63
|
+
# {
|
64
|
+
# "url":<method in action_map.rb>
|
65
|
+
# }
|
66
|
+
def set_action_mappings(path)
|
67
|
+
return {} if path && path.empty?
|
68
|
+
|
69
|
+
json = File.open(path).read
|
57
70
|
hash = JSON.parse(json)
|
58
71
|
end
|
59
72
|
|
60
|
-
|
61
|
-
# custom actions for Granicus
|
62
|
-
# something custom based on a page. pages must be ordered in the URL array though
|
73
|
+
# do a specific action for a url, like login
|
63
74
|
def actions(url)
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
self.send(action_map[url])
|
75
|
+
if action_mappings.has_key?(url)
|
76
|
+
sleep 10.0
|
77
|
+
# self.send(action_mappings[url])
|
68
78
|
else
|
69
79
|
nil
|
70
80
|
end
|
71
81
|
end
|
72
82
|
|
73
|
-
def login
|
74
|
-
click_on "Sign in / up"
|
75
|
-
sleep 2.0
|
76
|
-
fill_in "user_email", :with => "ryanw@granicus.com"
|
77
|
-
fill_in "user_password", :with => ""
|
78
|
-
click_on "Sign in"
|
79
|
-
sleep 2.0
|
80
|
-
wait_for_ajax
|
81
|
-
end
|
82
|
-
|
83
|
-
def wait
|
84
|
-
sleep 15.0
|
85
|
-
end
|
86
|
-
|
87
83
|
def grab_links(url)
|
88
84
|
links = []
|
89
85
|
|
@@ -99,7 +95,7 @@ module AutoScreenshot
|
|
99
95
|
page.execute_script('$(window).width(1200)')
|
100
96
|
name = page.current_url.gsub("https:\/\/", "").gsub("http:\/\/", "").gsub(":", "").gsub("\/", "-").gsub("&", "-").gsub("?", "_").gsub("dev.lvh.me3000-", "").gsub("admin.lvh.me3000-", "").gsub("localhost3001-", "").gsub("dev.dev.lvh.me3000-", "").gsub("test.civicideasstaging.com", "")
|
101
97
|
Capybara.current_session.driver.browser.manage.window.resize_to(1000, 800)
|
102
|
-
Capybara.current_session.driver.browser.save_screenshot("#{
|
98
|
+
Capybara.current_session.driver.browser.save_screenshot("#{@folder}/#{name}.png")
|
103
99
|
end
|
104
100
|
|
105
101
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auto_screenshot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-20 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
16
|
-
requirement: &
|
16
|
+
requirement: &70237450785980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70237450785980
|
25
25
|
description: ! '''Automatically screenshot webpages'''
|
26
26
|
email:
|
27
27
|
- wold@afomi.com
|