diff --git a/CHANGELOG.md b/CHANGELOG.md index 8be7a1e..70f17c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### Next release ### #### Features #### +* Added ability to set paper_size via a driver setter (Philippe Lehoux) #### Bug fixes #### diff --git a/lib/capybara/poltergeist/browser.rb b/lib/capybara/poltergeist/browser.rb index 067de1b..014c20e 100644 --- a/lib/capybara/poltergeist/browser.rb +++ b/lib/capybara/poltergeist/browser.rb @@ -171,6 +171,10 @@ module Capybara::Poltergeist command 'render_base64', format.to_s, !!options[:full], options[:selector] end + def set_paper_size(size) + command 'set_paper_size', size + end + def resize(width, height) command 'resize', width, height end diff --git a/lib/capybara/poltergeist/client/browser.coffee b/lib/capybara/poltergeist/client/browser.coffee index ee5cb00..38e6fec 100644 --- a/lib/capybara/poltergeist/client/browser.coffee +++ b/lib/capybara/poltergeist/client/browser.coffee @@ -277,6 +277,10 @@ class Poltergeist.Browser @page.setClipRect(rect) dimensions + set_paper_size: (size) -> + @page.setPaperSize(size) + this.sendResponse(true) + resize: (width, height) -> @page.setViewportSize(width: width, height: height) this.sendResponse(true) diff --git a/lib/capybara/poltergeist/client/compiled/browser.js b/lib/capybara/poltergeist/client/compiled/browser.js index 37da809..92d73a3 100644 --- a/lib/capybara/poltergeist/client/compiled/browser.js +++ b/lib/capybara/poltergeist/client/compiled/browser.js @@ -371,6 +371,11 @@ Poltergeist.Browser = (function() { return dimensions; }; + Browser.prototype.set_paper_size = function(size) { + this.page.setPaperSize(size); + return this.sendResponse(true); + }; + Browser.prototype.resize = function(width, height) { this.page.setViewportSize({ width: width, diff --git a/lib/capybara/poltergeist/client/compiled/web_page.js b/lib/capybara/poltergeist/client/compiled/web_page.js index 35f9c8b..7a9fc53 100644 --- a/lib/capybara/poltergeist/client/compiled/web_page.js +++ b/lib/capybara/poltergeist/client/compiled/web_page.js @@ -198,6 +198,10 @@ Poltergeist.WebPage = (function() { return this["native"].viewportSize = size; }; + WebPage.prototype.setPaperSize = function(size) { + return this["native"].paperSize = size; + }; + WebPage.prototype.scrollPosition = function() { return this["native"].scrollPosition; }; diff --git a/lib/capybara/poltergeist/client/web_page.coffee b/lib/capybara/poltergeist/client/web_page.coffee index 0315a15..7bd445a 100644 --- a/lib/capybara/poltergeist/client/web_page.coffee +++ b/lib/capybara/poltergeist/client/web_page.coffee @@ -132,6 +132,9 @@ class Poltergeist.WebPage setViewportSize: (size) -> @native.viewportSize = size + setPaperSize: (size) -> + @native.paperSize = size + scrollPosition: -> @native.scrollPosition diff --git a/lib/capybara/poltergeist/driver.rb b/lib/capybara/poltergeist/driver.rb index e9a5678..b76bcd6 100644 --- a/lib/capybara/poltergeist/driver.rb +++ b/lib/capybara/poltergeist/driver.rb @@ -161,6 +161,10 @@ module Capybara::Poltergeist browser.render_base64(format, options) end + def paper_size=(size = {}) + browser.set_paper_size(size) + end + def resize(width, height) browser.resize(width, height) end diff --git a/poltergeist.gemspec b/poltergeist.gemspec index ef86d08..1c4bcf1 100644 --- a/poltergeist.gemspec +++ b/poltergeist.gemspec @@ -25,6 +25,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'sinatra', '~> 1.0' s.add_development_dependency 'rake', '~> 10.0' s.add_development_dependency 'image_size', '~> 1.0' + s.add_development_dependency 'pdf-reader', '~> 1.3.3' s.add_development_dependency 'coffee-script', '~> 2.2.0' s.add_development_dependency 'guard-coffeescript', '~> 1.0.0' s.add_development_dependency 'rspec-rerun', '~> 0.1' diff --git a/spec/integration/driver_spec.rb b/spec/integration/driver_spec.rb index 70700c1..49cac54 100644 --- a/spec/integration/driver_spec.rb +++ b/spec/integration/driver_spec.rb @@ -1,5 +1,6 @@ require 'spec_helper' require 'image_size' +require 'pdf/reader' module Capybara::Poltergeist describe Driver do @@ -180,6 +181,24 @@ module Capybara::Poltergeist expect(File.exist?(file)).to be_true end + context 'when #paper_size= is set' do + let(:format) { :pdf } + + it 'changes pdf size' do + @session.visit('/poltergeist/long_page') + @driver.paper_size = { width: '1in', height: '1in' } + + @driver.save_screenshot(file) + + reader = PDF::Reader.new(file) + reader.pages.each do |page| + bbox = page.attributes[:MediaBox] + width = (bbox[2] - bbox[0]) / 72 + expect(width).to eq(1) + end + end + end + include_examples 'render screen' end