Skip to content

Commit e86ba16

Browse files
committed
add validation for background_rgba_color option
1 parent aab9414 commit e86ba16

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

README.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ Saves screenshot on a disk or returns it as base64.
335335
* :full `Boolean` whether you need full page screenshot or a viewport
336336
* :selector `String` css selector for given element
337337
* :scale `Float` zoom in/out
338+
* :background_rgba_color `Array` like `[R,G,B,A]` to have specific background color
338339

339340
```ruby
340341
browser.go_to("https://google.com/")
@@ -344,11 +345,8 @@ browser.screenshot(path: "google.png") # => 134660
344345
browser.screenshot(path: "google.jpg") # => 30902
345346
# Save to Base64 the whole page not only viewport and reduce quality
346347
browser.screenshot(full: true, quality: 60) # "iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAYAAAC6uhUNAAAAAXNSR0IArs4c6Q...
347-
348-
# To have transparent background for PNGs run before screenshotting
349-
browser.command('Emulation.setDefaultBackgroundColorOverride', color: { r: 0, g: 0, b: 0, a: 0 })
350-
# To restore background run
351-
browser.command('Emulation.setDefaultBackgroundColorOverride')
348+
# Save with specific background color
349+
browser.screenshot(background_rgba_color: [0, 0, 0, 0])
352350
```
353351

354352
#### pdf(\*\*options) : `String` | `Integer`

lib/ferrum/page/screenshot.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,21 @@ def screenshot_options(path = nil, format: nil, scale: 1.0, **opts)
123123
options[:clip].merge!(scale: scale)
124124
end
125125

126+
if validate_background_rgba_color(opts[:background_rgba_color])
127+
raise ArgumentError, "Specify :background_rgba_color as [R,G,B,A] array"
128+
end
129+
126130
options
127131
end
128132

133+
def validate_background_rgba_color(option)
134+
option && !(
135+
option.is_a?(Array) &&
136+
option.size == 4 &&
137+
option.all? { |value| value.is_a?(Integer) }
138+
)
139+
end
140+
129141
def get_bounding_rect(selector)
130142
rect = evaluate_async(%Q(
131143
const rect = document

spec/screenshot_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,32 @@ def create_screenshot(**options)
176176
end
177177
end
178178

179+
context 'background_rgba_color option' do
180+
shared_examples 'background_rgba_color ArgumentError' do
181+
it 'raises ArgumentError with message' do
182+
browser.go_to
183+
expect {
184+
browser.screenshot(path: file, background_rgba_color: background_rgba_color)
185+
}.to raise_exception(ArgumentError, 'Specify :background_rgba_color as [R,G,B,A] array')
186+
end
187+
end
188+
189+
include_examples 'background_rgba_color ArgumentError' do
190+
let(:background_rgba_color) do
191+
r, g, b = 0, 0, 0
192+
[r, g , b]
193+
end
194+
end
195+
196+
include_examples 'background_rgba_color ArgumentError' do
197+
let(:background_rgba_color) { '#FFF' }
198+
end
199+
200+
include_examples 'background_rgba_color ArgumentError' do
201+
let(:background_rgba_color) { %w[0 0 0 0] }
202+
end
203+
end
204+
179205
shared_examples "when scale is set" do
180206
it "changes image dimensions" do
181207
browser.go_to("/ferrum/zoom_test")

0 commit comments

Comments
 (0)