doubletake 0.1.0 → 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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTg2Nzg5ZDExOGQzN2QwNjdiNGMyODNmNTAwYTRhMGU4MGQzNDA1Zg==
4
+ MjRjNzc1YTI3MWJlNjIwNmM2MzU3OWIzMWU0NWViNDczZTE5YmZkMg==
5
5
  data.tar.gz: !binary |-
6
- OTM4MmRmM2FhOGExMGI4MzM4OWYxYWMwYzMzYWFmMTczNDdjZWM5OA==
6
+ OGY3NmZlZGRjZTQ1NzBhOWYxZTg5MDc1YTJjNGRjMTljMGViN2ExYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTM2Y2M2ZGVmNmIwMzM4NTk1MjFjZWNkYmNmNTY0MDg3NDg2NWZhNGJhZmRm
10
- YmY5Mjk3ODRhYjEwNTY0YzE5ODA5ZDg1MWU3ZTI0OTBjNTU1ZjIxOGI3MzQy
11
- ODJkN2YyNjlmZGM1MDRmYzFkNGQ2NDJmZGNhZTYyMGNjYWU0ZDM=
9
+ NTg0NzNlMDAxMmMzNTRkNTNjYmM2Zjk5NzJlMjQyMjA1Zjc5YjAxODUyMTNk
10
+ YmNlNzA1NWVlMTcyYTRlNWIwODlmNGY5YTU5YjBkYWQ3YjJjMTBmZTUwZmRl
11
+ NGFlYzNmNmMyYzgyNDVlNTI5YzQxN2NkNWMyOWE0NjI3MDUwMDk=
12
12
  data.tar.gz: !binary |-
13
- OWE4Y2UxMmYyMDk4N2M1NGZkM2UxNzE3Zjk5MDgxZTg3OTU5MGZhZThiYjUx
14
- ZDllNTIzM2VmYmU3MTYxODc2M2VlZGE5NmI4NWZhNTdkZTlhMjNkNDIyNDhh
15
- OWU4YzgyZTBmZmRmZDgzZWMwODk5OTM3NWJlYTM2ZjFkNjA2YTU=
13
+ MzA3NTg0MzgyMzk1NmY5ZDFmYTkxOWIzZmU5MjBmZWRmZjZlNGVmYWJkZjNm
14
+ YWM1ZDI5ZGZmM2Y5YmQ2MjFiZjg5YjNhOTBmYjIzMTQxMmFiN2JiN2FhZGMz
15
+ OGVkM2YyMTJmMTQ4OWFlYzFhNDA0NjlkY2U1YTQ3ZDc2ZTAyMDg=
data/README.md CHANGED
@@ -47,7 +47,39 @@ Use your preferred file editor and edit the config file.
47
47
 
48
48
  Edit the ignored list to skip URIs or file formats. DoubleTake generates sensible defaults that can be extended.
49
49
 
50
- The window resolution can also be changed. The default desktop resolution is set to 1400x800
50
+ Testing multiple window resolutions for responsive design is made possible in DoubleTake.
51
+ By default DoubleTake generated config file has 3 resolutions:
52
+
53
+ ```
54
+ SCREEN_RESOLUTION:
55
+ :desktop:
56
+ - 1400
57
+ - 800
58
+ :tablet:
59
+ - 640
60
+ - 480
61
+ :mobile:
62
+ - 300
63
+ - 600
64
+ ```
65
+ The above configuration has Desktop mode set to 1400x800, tablet to 640x480 and mobile to 300x600. This can be edited and extended
66
+ to something like this:
67
+
68
+ ```
69
+ SCREEN_RESOLUTION:
70
+ :desktop:
71
+ - 1024
72
+ - 800
73
+ :tablet:
74
+ - 640
75
+ - 480
76
+ :mobile:
77
+ - 300
78
+ - 550
79
+ :iphone6:
80
+ - 375
81
+ - 667
82
+ ```
51
83
 
52
84
  DoubleTake is cable to authenticate with user credentials provided in the config file. This allows more in-depth scans.
53
85
 
@@ -135,7 +167,9 @@ Ex: ~/DoubleTake_data/desktop/progress_mysite.yml
135
167
  In addition to this progress config file we also need to known the type of the scan that is being resumed i.e, compare / scrape
136
168
 
137
169
  To Resume a scan:
170
+ ```
138
171
  $ doubletake resume --type compare --conf ~/DoubleTake_data/desktop/progress_mysite.com.yml
172
+ ```
139
173
 
140
174
 
141
175
  ## Contributing
data/doubletake.gemspec CHANGED
@@ -9,10 +9,10 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Melchi Salins"]
10
10
  spec.email = ["melchisalins@gmail.com"]
11
11
 
12
- spec.summary = %q{Visual regression testing tool and more }
13
- spec.homepage = "http://melchisalins.users.sf.net/"
12
+ spec.summary = %q{Visual regression testing tool and more.}
13
+ spec.homepage = "https://www.linkedin.com/in/melchisalins"
14
14
  spec.license = "MIT"
15
- spec.description = "This is test description"
15
+ spec.description = "Visual regression testing tool and more"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
18
  spec.bindir = "exe"
data/lib/config.rb CHANGED
@@ -9,12 +9,13 @@ class Configuration
9
9
  attr_reader :PASS_VALUE, :PASS_DOM_ID
10
10
  attr_reader :LOGIN_CONFIRM_CHECK, :LOGIN_CONFIRM, :LOGIN
11
11
  attr_reader :URI_THRESHOLD, :IMAGE_THRESHOLD
12
+ attr_reader :SCREEN_RESOLUTION
12
13
 
13
14
  def initialize
14
15
  @stage = ""
15
16
  @prod = ""
16
17
  @ignored = ["ignore_me", "not_important_url_prefix",".css", ".pdf", ".js", ".jpg", ".png", "video/pop", "user/logout", "?", "=", "#"]
17
- @SCREEN_RESOLUTION = {:desktop => [1400,800]}
18
+ @SCREEN_RESOLUTION = {:desktop => [1400,800], :iPadair => [1024,768], :iphone6 => [375,667]}
18
19
  @IMAGE_THRESHOLD = 0
19
20
  @LOGIN = true
20
21
  @LOGIN_URI = 'user/login' # http://example.com/login
@@ -1,3 +1,3 @@
1
1
  module Doubletake
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/site_context.rb CHANGED
@@ -88,20 +88,22 @@ class Crawler < SiteContext
88
88
 
89
89
  def initialize(site, test, base, browser = :firefox)
90
90
  @site = site.to_s
91
- FileUtils::mkdir_p "#{ENV['HOME']}/DoubleTake_data/desktop/"+@site
92
- puts "* Screenshots are saved in #{ENV['HOME']}/DoubleTake_data/desktop/"+@site
91
+ $config.SCREEN_RESOLUTION.keys.each do |key|
92
+ FileUtils::mkdir_p "#{ENV['HOME']}/DoubleTake_data/#{@site}/#{key}"
93
+ end
94
+ puts "* Screenshots are saved in #{ENV['HOME']}/DoubleTake_data/#{@site}"
93
95
  $config.to_be_scraped << test
94
96
  @test_domain_length = test.length
95
97
  puts "Crawler initialized"
96
98
  @driver1 = SiteContext.new
97
99
  @driver1 = @driver1.set_driver(browser)
98
100
  @driver1.get(test)
99
- @driver1.manage.window.resize_to(1400, 800) #Desktop size
101
+ @driver1.manage.window.resize_to($config.SCREEN_RESOLUTION.first[1][0], $config.SCREEN_RESOLUTION.first[1][1]) #First resolution
100
102
  unless $cf == "scrape"
101
103
  @driver2 = SiteContext.new
102
104
  @driver2 = @driver2.set_driver(browser)
103
105
  @driver2.get(base)
104
- @driver2.manage.window.resize_to(1400, 800) #Desktop size
106
+ @driver2.manage.window.resize_to($config.SCREEN_RESOLUTION.first[1][0], $config.SCREEN_RESOLUTION.first[1][1]) #First resolution
105
107
  end
106
108
  end
107
109
 
@@ -152,7 +154,6 @@ class Crawler < SiteContext
152
154
  puts "Good Link: "+link
153
155
  return false
154
156
  end #End of `if`
155
-
156
157
  end
157
158
 
158
159
  def crawl
@@ -196,13 +197,12 @@ class Crawler < SiteContext
196
197
  prod_link = $config.prod + stage_uri
197
198
  # *****************************************
198
199
  if $cf == "scrape"
199
- warning_log = CSV.open("#{ENV['HOME']}/DoubleTake_data/desktop/#{@site}.csv", "a")
200
- name = sanitize(stage_uri)
201
- @driver1.save_screenshot("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_stage.png")
202
- @driver1.find_elements(:css, ".messages.error").each do |ele|
203
- warning_log << [@driver1.current_url, ele.text] unless ele.nil?
204
- end
205
- warning_log.close
200
+ $config.SCREEN_RESOLUTION.each do |type, res|
201
+ name = sanitize(stage_uri)
202
+ @driver1.manage.window.resize_to(res[0], res[1])
203
+ @driver1.save_screenshot("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
204
+ end
205
+ @driver1.manage.window.resize_to($config.SCREEN_RESOLUTION.first[1][0], $config.SCREEN_RESOLUTION.first[1][1])
206
206
  else
207
207
  @driver2.get(prod_link)
208
208
  image_stuff(stage_uri)
@@ -213,14 +213,14 @@ class Crawler < SiteContext
213
213
  $config.to_be_scraped = $config.to_be_scraped - [nil] # This was issue when .delete() was used which resulted in element replaced by nil
214
214
  $config.to_be_scraped = $config.to_be_scraped - [each_link]
215
215
  $config.to_be_scraped.uniq!
216
- File.open("#{ENV['HOME']}/DoubleTake_data/desktop/progress_#{@site}.yml", "w") {|f| f.write($config.to_yaml)}
216
+ File.open("#{ENV['HOME']}/DoubleTake_data/progress_#{@site}.yml", "w") {|f| f.write($config.to_yaml)}
217
217
  rescue Selenium::WebDriver::Error::StaleElementReferenceError => e
218
218
  puts "Stale element error occured moving to next link: #{stage_uri}"
219
219
  puts e
220
220
  next
221
221
  rescue Exception => e
222
222
  puts "Generic Exception occured"
223
- binding.pry
223
+ #binding.pry
224
224
  puts e.backtrace
225
225
  next
226
226
  end #End of begin
@@ -232,17 +232,21 @@ class Crawler < SiteContext
232
232
 
233
233
  def image_stuff(stage_uri)
234
234
  name = sanitize(stage_uri)
235
- @driver1.save_screenshot("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_stage.png")
236
- @driver2.save_screenshot("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_prod.png")
237
- # a, b = IO.read("#{ENV['HOME']}/DoubleTake_data/desktop/stage_"+@site+"/"+name+".png")[0x10..0x18].unpack('NN')
238
- img1 = ImageList.new("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_stage.png")
239
- img2 = ImageList.new("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_prod.png")
240
- diff_img, diff_metric = img1[0].compare_channel( img2[0], Magick::MeanSquaredErrorMetric )
241
- if diff_metric > $config.IMAGE_THRESHOLD
242
- diff_img.write("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_diff.png")
243
- else
244
- File.delete("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_stage.png")
245
- File.delete("#{ENV['HOME']}/DoubleTake_data/desktop/"+@site+"/"+name+"_prod.png")
246
- end # if diff_metric > $IMAGE_THRESHOLD
235
+ $config.SCREEN_RESOLUTION.each do |type, res|
236
+ @driver1.manage.window.resize_to(res[0], res[1])
237
+ @driver2.manage.window.resize_to(res[0], res[1])
238
+ @driver1.save_screenshot("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
239
+ @driver2.save_screenshot("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_prod.png")
240
+ # a, b = IO.read("#{ENV['HOME']}/DoubleTake_data/desktop/stage_"+@site+"/"+name+".png")[0x10..0x18].unpack('NN')
241
+ img1 = ImageList.new("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
242
+ img2 = ImageList.new("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_prod.png")
243
+ diff_img, diff_metric = img1[0].compare_channel( img2[0], Magick::MeanSquaredErrorMetric )
244
+ if diff_metric > $config.IMAGE_THRESHOLD
245
+ diff_img.write("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/"+name+"_diff.png")
246
+ else
247
+ File.delete("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
248
+ File.delete("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_prod.png")
249
+ end # if diff_metric > $IMAGE_THRESHOLD
250
+ end
247
251
  end #def image_stuff(image1, image2)
248
252
  end #Class Crawler < SiteContext
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doubletake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Melchi Salins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-26 00:00:00.000000000 Z
11
+ date: 2015-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -106,7 +106,7 @@ dependencies:
106
106
  - - ~>
107
107
  - !ruby/object:Gem::Version
108
108
  version: 0.19.1
109
- description: This is test description
109
+ description: Visual regression testing tool and more
110
110
  email:
111
111
  - melchisalins@gmail.com
112
112
  executables:
@@ -129,7 +129,7 @@ files:
129
129
  - lib/doubletake.rb
130
130
  - lib/doubletake/version.rb
131
131
  - lib/site_context.rb
132
- homepage: http://melchisalins.users.sf.net/
132
+ homepage: https://www.linkedin.com/in/melchisalins
133
133
  licenses:
134
134
  - MIT
135
135
  metadata:
@@ -154,5 +154,5 @@ rubyforge_project:
154
154
  rubygems_version: 2.4.6
155
155
  signing_key:
156
156
  specification_version: 4
157
- summary: Visual regression testing tool and more
157
+ summary: Visual regression testing tool and more.
158
158
  test_files: []