onlyoffice_webdriver_wrapper 0.3.4
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 +7 -0
 - data/lib/onlyoffice_webdriver_wrapper.rb +7 -0
 - data/lib/onlyoffice_webdriver_wrapper/dimensions.rb +22 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver +0 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver_mac +0 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/bin/geckodriver +0 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb +67 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb +37 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list +35 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb +72 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_screenshot_patch.rb +18 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/real_display_tools.rb +21 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/ruby_helper.rb +16 -0
 - data/lib/onlyoffice_webdriver_wrapper/helpers/os_helper.rb +11 -0
 - data/lib/onlyoffice_webdriver_wrapper/name.rb +7 -0
 - data/lib/onlyoffice_webdriver_wrapper/version.rb +7 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver.rb +434 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb +125 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/wait_until_methods.rb +71 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_alert_helper.rb +25 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_attributes_helper.rb +44 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_info_helper.rb +22 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_log_helper.rb +12 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb +5 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_helper.rb +37 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb +95 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb +68 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_style_helper.rb +35 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_tab_helper.rb +70 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_type_helper.rb +121 -0
 - data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_user_agent_helper.rb +51 -0
 - metadata +193 -0
 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'onlyoffice_s3_wrapper'
         
     | 
| 
      
 4 
     | 
    
         
            +
            module OnlyofficeWebdriverWrapper
         
     | 
| 
      
 5 
     | 
    
         
            +
              # Working with screenshots
         
     | 
| 
      
 6 
     | 
    
         
            +
              module WebdriverScreenshotHelper
         
     | 
| 
      
 7 
     | 
    
         
            +
                # @return [OnlyofficeS3Wrapper::AmazonS3Wrapper] s3 wrapper
         
     | 
| 
      
 8 
     | 
    
         
            +
                def amazon_s3_wrapper
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @amazon_s3_wrapper ||= OnlyofficeS3Wrapper::AmazonS3Wrapper.new(bucket_name: 'webdriver-wrapper-screenshots',
         
     | 
| 
      
 10 
     | 
    
         
            +
                                                                                  region: 'us-east-1')
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                # @return [String] location of screenshot to take
         
     | 
| 
      
 14 
     | 
    
         
            +
                def screenshot_folder
         
     | 
| 
      
 15 
     | 
    
         
            +
                  '/tmp/screenshot/WebdriverError'
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def get_screenshot_and_upload(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png")
         
     | 
| 
      
 19 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 20 
     | 
    
         
            +
                    get_screenshot(path_to_screenshot)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    cloud_screenshot = amazon_s3_wrapper.upload_file_and_make_public(path_to_screenshot)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    File.delete(path_to_screenshot) if File.exist?(path_to_screenshot)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    OnlyofficeLoggerHelper.log("upload screenshot: #{cloud_screenshot}")
         
     | 
| 
      
 24 
     | 
    
         
            +
                    return cloud_screenshot
         
     | 
| 
      
 25 
     | 
    
         
            +
                  rescue Errno::ENOENT => e
         
     | 
| 
      
 26 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 27 
     | 
    
         
            +
                      @driver.save_screenshot(path_to_screenshot)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      OnlyofficeLoggerHelper.log("Cant upload screenshot #{path_to_screenshot}. Error: #{e}")
         
     | 
| 
      
 29 
     | 
    
         
            +
                    rescue Errno::ENOENT => e
         
     | 
| 
      
 30 
     | 
    
         
            +
                      @driver.save_screenshot("tmp/#{File.basename(path_to_screenshot)}")
         
     | 
| 
      
 31 
     | 
    
         
            +
                      OnlyofficeLoggerHelper.log("Upload screenshot to tmp/#{File.basename(path_to_screenshot)}. Error: #{e}")
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  path_to_screenshot
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def get_screenshot(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png")
         
     | 
| 
      
 38 
     | 
    
         
            +
                  screenshot_folder = File.dirname(path_to_screenshot)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  FileUtils.mkdir_p(screenshot_folder) unless File.directory?(screenshot_folder)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  @driver.save_screenshot(path_to_screenshot)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  OnlyofficeLoggerHelper.log("get_screenshot(#{path_to_screenshot})")
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                def webdriver_screenshot(screenshot_name = SecureRandom.uuid)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 46 
     | 
    
         
            +
                    link = get_screenshot_and_upload("#{screenshot_folder}/#{screenshot_name}.png")
         
     | 
| 
      
 47 
     | 
    
         
            +
                  rescue Exception => e
         
     | 
| 
      
 48 
     | 
    
         
            +
                    OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Trying to get headless screenshot")
         
     | 
| 
      
 49 
     | 
    
         
            +
                    if @headless.headless_instance.nil?
         
     | 
| 
      
 50 
     | 
    
         
            +
                      system_screenshot("/tmp/#{screenshot_name}.png")
         
     | 
| 
      
 51 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 52 
     | 
    
         
            +
                        link = amazon_s3_wrapper.upload_file_and_make_public("/tmp/#{screenshot_name}.png")
         
     | 
| 
      
 53 
     | 
    
         
            +
                      rescue Exception => e
         
     | 
| 
      
 54 
     | 
    
         
            +
                        OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. System screenshot #{link}")
         
     | 
| 
      
 55 
     | 
    
         
            +
                      end
         
     | 
| 
      
 56 
     | 
    
         
            +
                    else
         
     | 
| 
      
 57 
     | 
    
         
            +
                      @headless.take_screenshot("/tmp/#{screenshot_name}.png")
         
     | 
| 
      
 58 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 59 
     | 
    
         
            +
                        link = amazon_s3_wrapper.upload_file_and_make_public("/tmp/#{screenshot_name}.png")
         
     | 
| 
      
 60 
     | 
    
         
            +
                      rescue Exception => e
         
     | 
| 
      
 61 
     | 
    
         
            +
                        OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Headless screenshot #{link}")
         
     | 
| 
      
 62 
     | 
    
         
            +
                      end
         
     | 
| 
      
 63 
     | 
    
         
            +
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                  "screenshot: #{link}"
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module OnlyofficeWebdriverWrapper
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Webdriver style helper
         
     | 
| 
      
 5 
     | 
    
         
            +
              module WebdriverStyleHelper
         
     | 
| 
      
 6 
     | 
    
         
            +
                def get_style_parameter(xpath, parameter_name)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  get_attribute(xpath, 'style').split(';').each do |current_param|
         
     | 
| 
      
 8 
     | 
    
         
            +
                    return /:\s(.*);?$/.match(current_param)[1] if current_param.include?(parameter_name)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                  nil
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def set_style_parameter(xpath, attribute, attribute_value)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  execute_javascript("document.evaluate(\"#{xpath.tr('"', "'")}\",document, null, XPathResult.ANY_TYPE, null ).iterateNext()." \
         
     | 
| 
      
 15 
     | 
    
         
            +
                                         "style.#{attribute}=\"#{attribute_value}\"")
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def set_style_attribute(xpath, attribute, attribute_value)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  execute_javascript("document.evaluate('#{xpath}',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)." \
         
     | 
| 
      
 20 
     | 
    
         
            +
                                         "singleNodeValue.style.#{attribute}=\"#{attribute_value}\"")
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def set_style_show_by_xpath(xpath, move_to_center = false)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  xpath = xpath.tr("'", '"')
         
     | 
| 
      
 25 
     | 
    
         
            +
                  execute_javascript('document.evaluate( \'' + xpath.to_s +
         
     | 
| 
      
 26 
     | 
    
         
            +
                                         '\' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.style.display = "block";')
         
     | 
| 
      
 27 
     | 
    
         
            +
                  return unless move_to_center
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  execute_javascript('document.evaluate( \'' + xpath.to_s +
         
     | 
| 
      
 30 
     | 
    
         
            +
                                         '\' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.style.left = "410px";')
         
     | 
| 
      
 31 
     | 
    
         
            +
                  execute_javascript('document.evaluate( \'' + xpath.to_s +
         
     | 
| 
      
 32 
     | 
    
         
            +
                                         '\' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.style.top = "260px";')
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,70 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module OnlyofficeWebdriverWrapper
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Module for work with tabs
         
     | 
| 
      
 5 
     | 
    
         
            +
              module WebdriverTabHelper
         
     | 
| 
      
 6 
     | 
    
         
            +
                TIMEOUT_WAIT_ELEMENT = 15
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def new_tab
         
     | 
| 
      
 9 
     | 
    
         
            +
                  execute_javascript('window.open()')
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def resize_tab(width, height)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @driver.manage.window.resize_to(width, height)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  OnlyofficeLoggerHelper.log("Resize current window to #{width}x#{height}")
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                # @param after_switch_timeout [Integer] wait after switch to window
         
     | 
| 
      
 18 
     | 
    
         
            +
                # non-zero to workaround bug with page load hanging up after switch
         
     | 
| 
      
 19 
     | 
    
         
            +
                def switch_to_popup(after_switch_timeout: 3)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  counter = 0
         
     | 
| 
      
 21 
     | 
    
         
            +
                  while tab_count < 2 && counter < 30
         
     | 
| 
      
 22 
     | 
    
         
            +
                    sleep 1
         
     | 
| 
      
 23 
     | 
    
         
            +
                    counter += 1
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  webdriver_error('switch_to_popup: Popup window not found') if counter >= 30
         
     | 
| 
      
 26 
     | 
    
         
            +
                  list_of_handlers = @driver.window_handles
         
     | 
| 
      
 27 
     | 
    
         
            +
                  last_window_handler = list_of_handlers.last
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @driver.switch_to.window(last_window_handler)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  sleep(after_switch_timeout) # Do not remove until problem with page loading stop resolved
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                # Get tab count
         
     | 
| 
      
 33 
     | 
    
         
            +
                # @return [Integer] count of tabs in opened session
         
     | 
| 
      
 34 
     | 
    
         
            +
                def tab_count
         
     | 
| 
      
 35 
     | 
    
         
            +
                  tab_count = @driver.window_handles.length
         
     | 
| 
      
 36 
     | 
    
         
            +
                  OnlyofficeLoggerHelper.log("tab_count: #{tab_count}")
         
     | 
| 
      
 37 
     | 
    
         
            +
                  tab_count
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def choose_tab(tab_number)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  counter = 0
         
     | 
| 
      
 42 
     | 
    
         
            +
                  while tab_count < 2 && counter < TIMEOUT_WAIT_ELEMENT
         
     | 
| 
      
 43 
     | 
    
         
            +
                    sleep 1
         
     | 
| 
      
 44 
     | 
    
         
            +
                    counter += 1
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                  webdriver_error("choose_tab: Tab number = #{tab_number} not found") if counter >= TIMEOUT_WAIT_ELEMENT
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @driver.switch_to.window(@driver.window_handles[tab_number - 1])
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def switch_to_main_tab
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @driver.switch_to.window(@driver.window_handles.first)
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                def close_tab
         
     | 
| 
      
 55 
     | 
    
         
            +
                  @driver.close
         
     | 
| 
      
 56 
     | 
    
         
            +
                  sleep 1
         
     | 
| 
      
 57 
     | 
    
         
            +
                  switch_to_main_tab
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                def close_popup_and_switch_to_main_tab
         
     | 
| 
      
 61 
     | 
    
         
            +
                  switch_to_popup
         
     | 
| 
      
 62 
     | 
    
         
            +
                  close_tab
         
     | 
| 
      
 63 
     | 
    
         
            +
                  switch_to_main_tab
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                def get_title_of_current_tab
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @driver.title
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,121 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module OnlyofficeWebdriverWrapper
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Class for helping with type stuff
         
     | 
| 
      
 5 
     | 
    
         
            +
              module WebdriverTypeHelper
         
     | 
| 
      
 6 
     | 
    
         
            +
                def type_text(element, text_to_send, clear_area = false)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  element = get_element(element)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  element.clear if clear_area
         
     | 
| 
      
 9 
     | 
    
         
            +
                  element.send_keys(text_to_send)
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def type_text_and_select_it(element, text_to_send, clear_area = false)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  type_text(element, text_to_send, clear_area)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  text_to_send.length.times { element.send_keys %i[shift left] }
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def type_to_locator(xpath_name, text_to_send, clear_content = true, click_on_it = false, by_action = false, by_element_send_key = false)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  element = get_element(xpath_name)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  if clear_content
         
     | 
| 
      
 20 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 21 
     | 
    
         
            +
                      element.clear
         
     | 
| 
      
 22 
     | 
    
         
            +
                    rescue Exception => e
         
     | 
| 
      
 23 
     | 
    
         
            +
                      webdriver_error(e.class, "Error in element.clear #{e} for "\
         
     | 
| 
      
 24 
     | 
    
         
            +
                                      "type_to_locator(#{xpath_name}, #{text_to_send}, "\
         
     | 
| 
      
 25 
     | 
    
         
            +
                                      "#{clear_content}, #{click_on_it}, "\
         
     | 
| 
      
 26 
     | 
    
         
            +
                                      "#{by_action}, #{by_element_send_key})")
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  if click_on_it
         
     | 
| 
      
 31 
     | 
    
         
            +
                    click_on_locator(xpath_name)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    sleep 0.2
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  if (@browser != :chrome && !by_action) || by_element_send_key
         
     | 
| 
      
 36 
     | 
    
         
            +
                    element.send_keys text_to_send
         
     | 
| 
      
 37 
     | 
    
         
            +
                  elsif text_to_send != ''
         
     | 
| 
      
 38 
     | 
    
         
            +
                    if text_to_send.is_a?(String)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      text_to_send.split(//).each do |symbol|
         
     | 
| 
      
 40 
     | 
    
         
            +
                        @driver.action.send_keys(symbol).perform
         
     | 
| 
      
 41 
     | 
    
         
            +
                      end
         
     | 
| 
      
 42 
     | 
    
         
            +
                    else
         
     | 
| 
      
 43 
     | 
    
         
            +
                      webdriver_bug_8179_workaround(text_to_send)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                def type_to_input(xpath_name, text_to_send, clear_content = false, click_on_it = true)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  element = get_element(xpath_name)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  if element.nil?
         
     | 
| 
      
 51 
     | 
    
         
            +
                    webdriver_error(Selenium::WebDriver::Error::NoSuchElementError,
         
     | 
| 
      
 52 
     | 
    
         
            +
                                    "type_to_input(#{xpath_name}, #{text_to_send}, "\
         
     | 
| 
      
 53 
     | 
    
         
            +
                                    "#{clear_content}, #{click_on_it}): element not found")
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  element.clear if clear_content
         
     | 
| 
      
 56 
     | 
    
         
            +
                  sleep 0.2
         
     | 
| 
      
 57 
     | 
    
         
            +
                  if click_on_it
         
     | 
| 
      
 58 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 59 
     | 
    
         
            +
                      element.click
         
     | 
| 
      
 60 
     | 
    
         
            +
                    rescue Exception => e
         
     | 
| 
      
 61 
     | 
    
         
            +
                      webdriver_error(e.class, "type_to_input(#{xpath_name}, #{text_to_send}, #{clear_content}, #{click_on_it}) error in 'element.click' error: #{e}")
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
                    sleep 0.2
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                  element.send_keys text_to_send
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                def send_keys(xpath_name, text_to_send, by_action = true)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  element = get_element(xpath_name)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  @driver.action.click(element).perform if @browser == :firefox
         
     | 
| 
      
 71 
     | 
    
         
            +
                  if by_action
         
     | 
| 
      
 72 
     | 
    
         
            +
                    @driver.action.send_keys(element, text_to_send).perform
         
     | 
| 
      
 73 
     | 
    
         
            +
                  else
         
     | 
| 
      
 74 
     | 
    
         
            +
                    element.send_keys text_to_send
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                def send_keys_to_focused_elements(keys, count_of_times = 1)
         
     | 
| 
      
 79 
     | 
    
         
            +
                  command = @driver.action.send_keys(keys)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  (count_of_times - 1).times { command = command.send_keys(keys) }
         
     | 
| 
      
 81 
     | 
    
         
            +
                  command.perform
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                def press_key(key)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  @driver.action.send_keys(key).perform
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                def key_down(xpath, key)
         
     | 
| 
      
 89 
     | 
    
         
            +
                  @driver.action.key_down(get_element(xpath), key).perform
         
     | 
| 
      
 90 
     | 
    
         
            +
                  sleep(1) # for some reason quick key_down select text in control
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                def key_up(xpath, key)
         
     | 
| 
      
 94 
     | 
    
         
            +
                  @driver.action.key_up(get_element(xpath), key).perform
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                private
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                # Workaround for bug with typing with :control
         
     | 
| 
      
 100 
     | 
    
         
            +
                # See https://github.com/SeleniumHQ/selenium/issues/8179
         
     | 
| 
      
 101 
     | 
    
         
            +
                # for more details
         
     | 
| 
      
 102 
     | 
    
         
            +
                def webdriver_bug_8179_workaround(text_to_send)
         
     | 
| 
      
 103 
     | 
    
         
            +
                  text_to_send = [text_to_send].flatten
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  key_modifiers = text_to_send.select { |i| i.is_a?(Symbol) }
         
     | 
| 
      
 106 
     | 
    
         
            +
                  letters = text_to_send - key_modifiers
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                  key_modifiers.each do |modifier|
         
     | 
| 
      
 109 
     | 
    
         
            +
                    @driver.action.key_down(modifier).perform
         
     | 
| 
      
 110 
     | 
    
         
            +
                  end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                  letters.each do |letter|
         
     | 
| 
      
 113 
     | 
    
         
            +
                    @driver.action.send_keys(letter.to_s).perform
         
     | 
| 
      
 114 
     | 
    
         
            +
                  end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                  key_modifiers.each do |modifier|
         
     | 
| 
      
 117 
     | 
    
         
            +
                    @driver.action.key_up(modifier).perform
         
     | 
| 
      
 118 
     | 
    
         
            +
                  end
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
              end
         
     | 
| 
      
 121 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module OnlyofficeWebdriverWrapper
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Module for wokring with webdriver useragent
         
     | 
| 
      
 5 
     | 
    
         
            +
              module WebdriverUserAgentHelper
         
     | 
| 
      
 6 
     | 
    
         
            +
                USERAGENT_ANDROID_PHONE = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MDB08M) '\
         
     | 
| 
      
 7 
     | 
    
         
            +
                                          'AppleWebKit/537.36 (KHTML, like Gecko) '\
         
     | 
| 
      
 8 
     | 
    
         
            +
                                          'Chrome/51.0.2704.81 Mobile Safari/537.36'
         
     | 
| 
      
 9 
     | 
    
         
            +
                USERAGENT_IPHONE = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) '\
         
     | 
| 
      
 10 
     | 
    
         
            +
                                   'AppleWebKit/601.1.46 (KHTML, like Gecko) '\
         
     | 
| 
      
 11 
     | 
    
         
            +
                                   'Version/9.0 Mobile/13F69 Safari/601.1'
         
     | 
| 
      
 12 
     | 
    
         
            +
                USERAGENT_IPAD_AIR_2_SAFARI = 'Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) '\
         
     | 
| 
      
 13 
     | 
    
         
            +
                                              'AppleWebKit/602.1.50 (KHTML, like Gecko) '\
         
     | 
| 
      
 14 
     | 
    
         
            +
                                              'Version/10.0 Mobile/14A5346a Safari/602.1'
         
     | 
| 
      
 15 
     | 
    
         
            +
                USERAGENT_NEXUS_10_CHROME = 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) '\
         
     | 
| 
      
 16 
     | 
    
         
            +
                                            'AppleWebKit/537.36 (KHTML, like Gecko) '\
         
     | 
| 
      
 17 
     | 
    
         
            +
                                            'Chrome/48.0.2564.23 Safari/537.36'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                # @return [String] user agent string for current device
         
     | 
| 
      
 20 
     | 
    
         
            +
                def user_agent_for_device
         
     | 
| 
      
 21 
     | 
    
         
            +
                  case @device
         
     | 
| 
      
 22 
     | 
    
         
            +
                  when :desktop_linux
         
     | 
| 
      
 23 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 24 
     | 
    
         
            +
                  when :android_phone
         
     | 
| 
      
 25 
     | 
    
         
            +
                    USERAGENT_ANDROID_PHONE
         
     | 
| 
      
 26 
     | 
    
         
            +
                  when :iphone
         
     | 
| 
      
 27 
     | 
    
         
            +
                    USERAGENT_IPHONE
         
     | 
| 
      
 28 
     | 
    
         
            +
                  when :ipad_air_2_safari
         
     | 
| 
      
 29 
     | 
    
         
            +
                    USERAGENT_IPAD_AIR_2_SAFARI
         
     | 
| 
      
 30 
     | 
    
         
            +
                  when :nexus_10_chrome
         
     | 
| 
      
 31 
     | 
    
         
            +
                    USERAGENT_NEXUS_10_CHROME
         
     | 
| 
      
 32 
     | 
    
         
            +
                  else
         
     | 
| 
      
 33 
     | 
    
         
            +
                    webdriver_error("Unknown user device for starting browser: #{@device}")
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                # @param switches [Array, String] current switches of browser
         
     | 
| 
      
 38 
     | 
    
         
            +
                # @return [String] user agent switch for browser
         
     | 
| 
      
 39 
     | 
    
         
            +
                def add_useragent_to_switches(switches)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  user_agent = user_agent_for_device
         
     | 
| 
      
 41 
     | 
    
         
            +
                  return switches.dup if user_agent.nil?
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  switches.dup << "--user-agent=#{user_agent}"
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                # @return [String] current user agent
         
     | 
| 
      
 47 
     | 
    
         
            +
                def current_user_agent
         
     | 
| 
      
 48 
     | 
    
         
            +
                  execute_javascript('return navigator.userAgent;')
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,193 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: onlyoffice_webdriver_wrapper
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.4
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - ONLYOFFICE
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Pavel Lobashov
         
     | 
| 
      
 9 
     | 
    
         
            +
            - Oleg Nazarov
         
     | 
| 
      
 10 
     | 
    
         
            +
            - Dmitry Rotaty
         
     | 
| 
      
 11 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 12 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 13 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 14 
     | 
    
         
            +
            date: 2020-07-06 00:00:00.000000000 Z
         
     | 
| 
      
 15 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 16 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 17 
     | 
    
         
            +
              name: headless
         
     | 
| 
      
 18 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 19 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 20 
     | 
    
         
            +
                - - '='
         
     | 
| 
      
 21 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 22 
     | 
    
         
            +
                    version: 2.3.1
         
     | 
| 
      
 23 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 24 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 25 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - '='
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 29 
     | 
    
         
            +
                    version: 2.3.1
         
     | 
| 
      
 30 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 31 
     | 
    
         
            +
              name: onlyoffice_file_helper
         
     | 
| 
      
 32 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 33 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 34 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 35 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 36 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
      
 37 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 38 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 39 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 40 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 41 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 42 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 43 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
      
 44 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 45 
     | 
    
         
            +
              name: onlyoffice_logger_helper
         
     | 
| 
      
 46 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 47 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 48 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 49 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 50 
     | 
    
         
            +
                    version: '1'
         
     | 
| 
      
 51 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 52 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 53 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 54 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 55 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 56 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 57 
     | 
    
         
            +
                    version: '1'
         
     | 
| 
      
 58 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 59 
     | 
    
         
            +
              name: onlyoffice_s3_wrapper
         
     | 
| 
      
 60 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 61 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 62 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 63 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 64 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
      
 65 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 66 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 67 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 68 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 69 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 70 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 71 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
      
 72 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 73 
     | 
    
         
            +
              name: page-object
         
     | 
| 
      
 74 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 75 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 76 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 77 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 78 
     | 
    
         
            +
                    version: '2'
         
     | 
| 
      
 79 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 80 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 81 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 82 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 83 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 84 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 85 
     | 
    
         
            +
                    version: '2'
         
     | 
| 
      
 86 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 87 
     | 
    
         
            +
              name: selenium-webdriver
         
     | 
| 
      
 88 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 89 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 90 
     | 
    
         
            +
                - - '='
         
     | 
| 
      
 91 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 92 
     | 
    
         
            +
                    version: 3.142.7
         
     | 
| 
      
 93 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 94 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 95 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 96 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 97 
     | 
    
         
            +
                - - '='
         
     | 
| 
      
 98 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 99 
     | 
    
         
            +
                    version: 3.142.7
         
     | 
| 
      
 100 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 101 
     | 
    
         
            +
              name: watir
         
     | 
| 
      
 102 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 103 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 104 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 105 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 106 
     | 
    
         
            +
                    version: '6'
         
     | 
| 
      
 107 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 108 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 109 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 110 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 111 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 112 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 113 
     | 
    
         
            +
                    version: '6'
         
     | 
| 
      
 114 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 115 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 116 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 117 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 118 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 119 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 120 
     | 
    
         
            +
                    version: '13.0'
         
     | 
| 
      
 121 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 122 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 123 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 124 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 125 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 126 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 127 
     | 
    
         
            +
                    version: '13.0'
         
     | 
| 
      
 128 
     | 
    
         
            +
            description: ONLYOFFICE Webdriver Wrapper Gem. Used in QA
         
     | 
| 
      
 129 
     | 
    
         
            +
            email:
         
     | 
| 
      
 130 
     | 
    
         
            +
            - shockwavenn@gmail.com
         
     | 
| 
      
 131 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 132 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 133 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 134 
     | 
    
         
            +
            files:
         
     | 
| 
      
 135 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper.rb
         
     | 
| 
      
 136 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/dimensions.rb
         
     | 
| 
      
 137 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver
         
     | 
| 
      
 138 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver_mac
         
     | 
| 
      
 139 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/bin/geckodriver
         
     | 
| 
      
 140 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb
         
     | 
| 
      
 141 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb
         
     | 
| 
      
 142 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list
         
     | 
| 
      
 143 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb
         
     | 
| 
      
 144 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_screenshot_patch.rb
         
     | 
| 
      
 145 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/real_display_tools.rb
         
     | 
| 
      
 146 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/ruby_helper.rb
         
     | 
| 
      
 147 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/os_helper.rb
         
     | 
| 
      
 148 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/name.rb
         
     | 
| 
      
 149 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/version.rb
         
     | 
| 
      
 150 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver.rb
         
     | 
| 
      
 151 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb
         
     | 
| 
      
 152 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/wait_until_methods.rb
         
     | 
| 
      
 153 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_alert_helper.rb
         
     | 
| 
      
 154 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_attributes_helper.rb
         
     | 
| 
      
 155 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_info_helper.rb
         
     | 
| 
      
 156 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_log_helper.rb
         
     | 
| 
      
 157 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb
         
     | 
| 
      
 158 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_helper.rb
         
     | 
| 
      
 159 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb
         
     | 
| 
      
 160 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb
         
     | 
| 
      
 161 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_style_helper.rb
         
     | 
| 
      
 162 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_tab_helper.rb
         
     | 
| 
      
 163 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_type_helper.rb
         
     | 
| 
      
 164 
     | 
    
         
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_user_agent_helper.rb
         
     | 
| 
      
 165 
     | 
    
         
            +
            homepage: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper
         
     | 
| 
      
 166 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 167 
     | 
    
         
            +
            - AGPL-3.0
         
     | 
| 
      
 168 
     | 
    
         
            +
            metadata:
         
     | 
| 
      
 169 
     | 
    
         
            +
              bug_tracker_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper/issues
         
     | 
| 
      
 170 
     | 
    
         
            +
              changelog_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper/blob/master/CHANGELOG.md
         
     | 
| 
      
 171 
     | 
    
         
            +
              documentation_uri: https://www.rubydoc.info/gems/onlyoffice_webdriver_wrapper
         
     | 
| 
      
 172 
     | 
    
         
            +
              homepage_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper
         
     | 
| 
      
 173 
     | 
    
         
            +
              source_code_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper
         
     | 
| 
      
 174 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 175 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 176 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 177 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 178 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 179 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 180 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 181 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 182 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 183 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 184 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 185 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 186 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 187 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 188 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 189 
     | 
    
         
            +
            rubygems_version: 3.1.4
         
     | 
| 
      
 190 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 191 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 192 
     | 
    
         
            +
            summary: ONLYOFFICE Webdriver Wrapper Gem
         
     | 
| 
      
 193 
     | 
    
         
            +
            test_files: []
         
     |