add project mode
This commit is contained in:
parent
8a526f8c77
commit
b8a827dd2d
9
hollandaise.rb
Normal file
9
hollandaise.rb
Normal file
@ -0,0 +1,9 @@
|
||||
Hollandaise.project "cats" do |p|
|
||||
p.root 'http://my.site/'
|
||||
|
||||
p.screenshot 'Home', '/'
|
||||
p.screenshot 'Archive', '/archive'
|
||||
|
||||
p.browsers :chrome
|
||||
end
|
||||
|
@ -1,14 +1,41 @@
|
||||
require "hollandaise/version"
|
||||
require 'hollandaise/browsers'
|
||||
require 'hollandaise/project'
|
||||
require 'hollandaise/browser'
|
||||
|
||||
module Hollandaise
|
||||
class << self
|
||||
attr_accessor :url, :browsers
|
||||
attr_accessor :url, :browsers, :delay
|
||||
end
|
||||
|
||||
def self.configure
|
||||
yield self
|
||||
end
|
||||
|
||||
def self.project(name)
|
||||
project = Project.new(name)
|
||||
projects << project
|
||||
|
||||
yield project
|
||||
|
||||
project
|
||||
end
|
||||
|
||||
def self.dir
|
||||
@dir ||= Pathname("screenshots")
|
||||
end
|
||||
|
||||
def self.chdir(name)
|
||||
_odir = dir.clone
|
||||
@dir = @dir.join(name)
|
||||
|
||||
yield
|
||||
|
||||
@dir = _odir
|
||||
end
|
||||
|
||||
def self.projects
|
||||
@projects ||= []
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -3,16 +3,13 @@ module Hollandaise
|
||||
class Base
|
||||
attr_reader :browser
|
||||
|
||||
def run(url)
|
||||
def run_and_take_screenshot(url)
|
||||
@url = url
|
||||
|
||||
selenium.navigate.to url
|
||||
sleep @options[:delay].to_i
|
||||
selenium.execute_script %{window.resizeTo(1280, 1024)}
|
||||
end
|
||||
|
||||
def dir
|
||||
@options[:dir]
|
||||
take_screenshot
|
||||
end
|
||||
|
||||
def take_screenshot
|
||||
@ -26,6 +23,10 @@ module Hollandaise
|
||||
|
||||
@selenium = nil
|
||||
end
|
||||
|
||||
def dir
|
||||
Hollandaise.dir
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,11 +1,7 @@
|
||||
module Hollandaise
|
||||
module Browsers
|
||||
def self.for(browsers, options)
|
||||
browsers.collect { |browser| Hollandaise::Browser.for(self.send(browser), options) }
|
||||
end
|
||||
|
||||
def self.each(browsers, options, &block)
|
||||
self.for(browsers, options).each(&block)
|
||||
class Browsers
|
||||
def self.for(browsers, options = {})
|
||||
new(browsers.flatten.collect { |browser| Hollandaise::Browser.for(self.send(browser), options) })
|
||||
end
|
||||
|
||||
def self.ie7
|
||||
@ -35,5 +31,23 @@ module Hollandaise
|
||||
def self.chrome
|
||||
[ :selenium, :chrome ]
|
||||
end
|
||||
|
||||
def initialize(browsers)
|
||||
@browsers = browsers
|
||||
end
|
||||
|
||||
def each(&block)
|
||||
@browsers.each(&block)
|
||||
end
|
||||
|
||||
def run
|
||||
@browsers.each do |browser|
|
||||
begin
|
||||
yield browser
|
||||
ensure
|
||||
browser.close
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -3,6 +3,21 @@ require 'pathname'
|
||||
|
||||
module Hollandaise
|
||||
class CLI < Thor
|
||||
include Thor::Actions
|
||||
source_root File.expand_path('../../../skel', __FILE__)
|
||||
|
||||
desc "cook", "Use the config file and take all the screenshots listed in there"
|
||||
def cook
|
||||
Hollandaise.projects.each(&:run)
|
||||
end
|
||||
|
||||
desc "project NAME", "Create a skeletal project file"
|
||||
def project(name)
|
||||
@name = name
|
||||
|
||||
template 'hollandaise.rb.tt', 'hollandaise.rb'
|
||||
end
|
||||
|
||||
desc "sauce URL BROWSER BROWSER...", "Take screenshots of a URL on Sauce Labs"
|
||||
method_options :delay => 0
|
||||
def sauce(*browsers)
|
||||
@ -16,15 +31,10 @@ module Hollandaise
|
||||
browsers = Hollandaise.browsers
|
||||
end
|
||||
|
||||
browser_objects = Hollandaise::Browsers.for(browsers, options.merge(:dir => dir))
|
||||
browser_objects = Hollandaise::Browsers.for(browsers, options)
|
||||
|
||||
browser_objects.each do |browser|
|
||||
begin
|
||||
browser.run(url)
|
||||
browser.take_screenshot
|
||||
ensure
|
||||
browser.close
|
||||
end
|
||||
browser_objects.run do |browser|
|
||||
browser.run_and_take_screenshot(url)
|
||||
end
|
||||
|
||||
html = Arbre::Context.new do
|
||||
@ -59,11 +69,5 @@ module Hollandaise
|
||||
end
|
||||
|
||||
default_task :sauce
|
||||
|
||||
no_tasks do
|
||||
def dir
|
||||
Pathname("screenshots")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
45
lib/hollandaise/project.rb
Normal file
45
lib/hollandaise/project.rb
Normal file
@ -0,0 +1,45 @@
|
||||
require 'uri'
|
||||
|
||||
module Hollandaise
|
||||
class Project
|
||||
def initialize(project_name)
|
||||
@project_name = project_name
|
||||
end
|
||||
|
||||
def root(root)
|
||||
@root = URI(root)
|
||||
end
|
||||
|
||||
def screenshot(name, uri)
|
||||
@screenshots ||= []
|
||||
|
||||
@screenshots << [ name, uri ]
|
||||
end
|
||||
|
||||
def browsers(*browsers)
|
||||
@browsers = browsers
|
||||
end
|
||||
|
||||
def run
|
||||
urls.each do |url, name|
|
||||
Hollandaise.chdir "#{@project_name}/#{name}" do
|
||||
browser_objects.run do |browser|
|
||||
browser.run_and_take_screenshot(url)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def urls
|
||||
@screenshots.collect do |name, uri|
|
||||
[ @root.merge(URI(uri)), name ]
|
||||
end
|
||||
end
|
||||
|
||||
def browser_objects
|
||||
@browser_objects ||= Hollandaise::Browsers.for(@browsers)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
9
skel/hollandaise.rb.tt
Normal file
9
skel/hollandaise.rb.tt
Normal file
@ -0,0 +1,9 @@
|
||||
Hollandaise.project "<%= @name %>" do |p|
|
||||
p.root 'http://my.site/'
|
||||
|
||||
p.screenshot 'Home', '/'
|
||||
p.screenshot 'Archive', '/archive'
|
||||
|
||||
p.browsers :chrome
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user