Module: OnlyofficeWebdriverWrapper::WebdriverScreenshotHelper

Included in:
WebDriver
Defined in:
lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb

Overview

Working with screenshots

Instance Method Summary collapse

Instance Method Details

#amazon_s3_wrapper ⇒ OnlyofficeS3Wrapper::AmazonS3Wrapper

Returns s3 wrapper.

Returns:

  • (OnlyofficeS3Wrapper::AmazonS3Wrapper) —

    s3 wrapper



8
9
10
11
# File 'lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb', line 8

def amazon_s3_wrapper
  @amazon_s3_wrapper ||= OnlyofficeS3Wrapper::AmazonS3Wrapper.new(bucket_name: 'webdriver-wrapper-screenshots',
                                                                  region: 'us-east-1')
end

#get_screenshot(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png") ⇒ Object



37
38
39
40
41
42
# File 'lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb', line 37

def get_screenshot(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png")
  screenshot_folder = File.dirname(path_to_screenshot)
  FileUtils.mkdir_p(screenshot_folder) unless File.directory?(screenshot_folder)
  @driver.save_screenshot(path_to_screenshot)
  OnlyofficeLoggerHelper.log("get_screenshot(#{path_to_screenshot})")
end

#get_screenshot_and_upload(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png") ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb', line 18

def get_screenshot_and_upload(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png")
  begin
    get_screenshot(path_to_screenshot)
    cloud_screenshot = amazon_s3_wrapper.upload_file_and_make_public(path_to_screenshot)
    File.delete(path_to_screenshot) if File.exist?(path_to_screenshot)
    OnlyofficeLoggerHelper.log("upload screenshot: #{cloud_screenshot}")
    return cloud_screenshot
  rescue Errno::ENOENT => e
    begin
      @driver.save_screenshot(path_to_screenshot)
      OnlyofficeLoggerHelper.log("Cant upload screenshot #{path_to_screenshot}. Error: #{e}")
    rescue Errno::ENOENT => e
      @driver.save_screenshot("tmp/#{File.basename(path_to_screenshot)}")
      OnlyofficeLoggerHelper.log("Upload screenshot to tmp/#{File.basename(path_to_screenshot)}. Error: #{e}")
    end
  end
  path_to_screenshot
end

#screenshot_folder ⇒ String

Returns location of screenshot to take.

Returns:

  • (String) —

    location of screenshot to take



14
15
16
# File 'lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb', line 14

def screenshot_folder
  '/tmp/screenshot/WebdriverError'
end

#webdriver_screenshot(screenshot_name = SecureRandom.uuid) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb', line 44

def webdriver_screenshot(screenshot_name = SecureRandom.uuid)
  begin
    link = get_screenshot_and_upload("#{screenshot_folder}/#{screenshot_name}.png")
  rescue Exception => e
    OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Trying to get headless screenshot")
    if @headless.headless_instance.nil?
      system_screenshot("/tmp/#{screenshot_name}.png")
      begin
        link = amazon_s3_wrapper.upload_file_and_make_public("/tmp/#{screenshot_name}.png")
      rescue Exception => e
        OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. System screenshot #{link}")
      end
    else
      @headless.take_screenshot("/tmp/#{screenshot_name}.png")
      begin
        link = amazon_s3_wrapper.upload_file_and_make_public("/tmp/#{screenshot_name}.png")
      rescue Exception => e
        OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Headless screenshot #{link}")
      end
    end
  end
  "screenshot: #{link}"
end