onlyoffice_webdriver_wrapper 1.7.0 → 1.9.0
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 +4 -4
- data/lib/onlyoffice_webdriver_wrapper/dimensions.rb +14 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/{chromedriver_linux_101 → chromedriver_linux_104} +0 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_mac +0 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb +1 -1
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_patch.rb +1 -1
- data/lib/onlyoffice_webdriver_wrapper/version.rb +1 -1
- data/lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb +5 -9
- data/lib/onlyoffice_webdriver_wrapper/webdriver/element_getters.rb +46 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/get_text_methods.rb +46 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/select_list_methods.rb +52 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/wait_until_methods.rb +4 -4
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb +2 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_helper.rb +1 -1
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb +2 -11
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_move_cursor_methods.rb +19 -11
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb +2 -1
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_type_helper.rb +4 -4
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_user_agent_helper.rb +8 -8
- data/lib/onlyoffice_webdriver_wrapper/webdriver.rb +9 -127
- metadata +7 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fdfe224abc7b1f2c7e69e8830ec5cc388d3b8fa165a969f8860a832e1ab51319
         | 
| 4 | 
            +
              data.tar.gz: cf61e06fce72afbb30398cdd62693544107059701316698705da602231eb7d9a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: '061282552a87103e53e3d94f4ce3be7d8a811378ad6d64c1620089b7f259ce231c8d7de931d8a60c83a7b601c31f599b7ccf3e92a4d86ae22efae2f5d8f5b6c6'
         | 
| 7 | 
            +
              data.tar.gz: 7d0d8e1528f07f2a8bca61a972acf872075870ffd2dba37b088e9969c4b2f8d9ed91baee62df2a2b732930a77c9e0b0760541b743496d333cdc464c61ce08d5e
         | 
| @@ -10,6 +10,15 @@ module OnlyofficeWebdriverWrapper | |
| 10 10 | 
             
                  @top = top
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 | 
            +
                # Compare two dimensions object
         | 
| 14 | 
            +
                # @param [Object] other object
         | 
| 15 | 
            +
                # @return [Boolean] result of comparison
         | 
| 16 | 
            +
                def ==(other)
         | 
| 17 | 
            +
                  return false unless other.respond_to?(:left) && other.respond_to?(:top)
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  @left == other.left && @top == other.top
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 13 22 | 
             
                alias width left
         | 
| 14 23 | 
             
                alias height top
         | 
| 15 24 | 
             
                alias x left
         | 
| @@ -19,5 +28,10 @@ module OnlyofficeWebdriverWrapper | |
| 19 28 | 
             
                def to_s
         | 
| 20 29 | 
             
                  "Dimensions(left: #{@left}, top: #{@top})"
         | 
| 21 30 | 
             
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                # @return [Dimensions] Center point of current dimension
         | 
| 33 | 
            +
                def center
         | 
| 34 | 
            +
                  Dimensions.new(@left / 2, @top / 2)
         | 
| 35 | 
            +
                end
         | 
| 22 36 | 
             
              end
         | 
| 23 37 | 
             
            end
         | 
| Binary file | 
    
        data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_mac
    CHANGED
    
    | Binary file | 
| @@ -29,7 +29,7 @@ module OnlyofficeWebdriverWrapper | |
| 29 29 |  | 
| 30 30 | 
             
                # @return [Array<String>] list of formats to save
         | 
| 31 31 | 
             
                def read_firefox_files_to_save
         | 
| 32 | 
            -
                  path_to_file = "#{Dir.pwd}/lib/onlyoffice_webdriver_wrapper/"\
         | 
| 32 | 
            +
                  path_to_file = "#{Dir.pwd}/lib/onlyoffice_webdriver_wrapper/" \
         | 
| 33 33 | 
             
                                 'helpers/firefox_helper/save_to_disk_files.list'
         | 
| 34 34 | 
             
                  OnlyofficeFileHelper::FileHelper.read_array_from_file(path_to_file)
         | 
| 35 35 | 
             
                                                  .join(', ')
         | 
| @@ -29,7 +29,7 @@ class Headless | |
| 29 29 | 
             
              class VideoRecorder
         | 
| 30 30 | 
             
                # Stop recording and save it
         | 
| 31 31 | 
             
                # @param [String] path to save
         | 
| 32 | 
            -
                # @ | 
| 32 | 
            +
                # @return [nil, String] path to result file or nil if error
         | 
| 33 33 | 
             
                def stop_and_save(path)
         | 
| 34 34 | 
             
                  CliUtil.kill_process(@pid_file_path, :wait => true)
         | 
| 35 35 | 
             
                  if File.exist? @tmp_file_path
         | 
| @@ -50,10 +50,8 @@ module OnlyofficeWebdriverWrapper | |
| 50 50 | 
             
                # @return [nil]
         | 
| 51 51 | 
             
                def click_on_locator_coordinates(xpath_name, right_by, down_by)
         | 
| 52 52 | 
             
                  wait_until_element_visible(xpath_name)
         | 
| 53 | 
            -
                   | 
| 54 | 
            -
                   | 
| 55 | 
            -
                  @driver.action.move_to(element, right_by.to_i - shift_to_zero.x, down_by.to_i - shift_to_zero.y).perform
         | 
| 56 | 
            -
                  @driver.action.move_to(element, right_by.to_i - shift_to_zero.x, down_by.to_i - shift_to_zero.y).click.perform
         | 
| 53 | 
            +
                  move_to_driver_action(xpath_name, right_by, down_by).perform
         | 
| 54 | 
            +
                  move_to_driver_action(xpath_name, right_by, down_by).click.perform
         | 
| 57 55 | 
             
                end
         | 
| 58 56 |  | 
| 59 57 | 
             
                # Click on one of several which displayed
         | 
| @@ -100,10 +98,8 @@ module OnlyofficeWebdriverWrapper | |
| 100 98 | 
             
                # @return [nil]
         | 
| 101 99 | 
             
                def right_click_on_locator_coordinates(xpath_name, right_by = nil, down_by = nil)
         | 
| 102 100 | 
             
                  wait_until_element_visible(xpath_name)
         | 
| 103 | 
            -
                   | 
| 104 | 
            -
                   | 
| 105 | 
            -
                  @driver.action.move_to(element, right_by.to_i - shift_to_zero.x, down_by.to_i - shift_to_zero.y).perform
         | 
| 106 | 
            -
                  @driver.action.move_to(element, right_by.to_i - shift_to_zero.x, down_by.to_i - shift_to_zero.y).context_click.perform
         | 
| 101 | 
            +
                  move_to_driver_action(xpath_name, right_by, down_by).perform
         | 
| 102 | 
            +
                  move_to_driver_action(xpath_name, right_by, down_by).context_click.perform
         | 
| 107 103 | 
             
                end
         | 
| 108 104 |  | 
| 109 105 | 
             
                # Perform double_click on element
         | 
| @@ -121,7 +117,7 @@ module OnlyofficeWebdriverWrapper | |
| 121 117 | 
             
                # @return [nil]
         | 
| 122 118 | 
             
                def double_click_on_locator_coordinates(xpath_name, right_by, down_by)
         | 
| 123 119 | 
             
                  wait_until_element_visible(xpath_name)
         | 
| 124 | 
            -
                   | 
| 120 | 
            +
                  move_to_driver_action(xpath_name, right_by, down_by).double_click.perform
         | 
| 125 121 | 
             
                end
         | 
| 126 122 | 
             
              end
         | 
| 127 123 | 
             
            end
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module OnlyofficeWebdriverWrapper
         | 
| 4 | 
            +
              # Methods to get elements
         | 
| 5 | 
            +
              module ClickMethods
         | 
| 6 | 
            +
                # Get element by it's xpath
         | 
| 7 | 
            +
                # @param [String] object_identification xpath of object to find
         | 
| 8 | 
            +
                # @return [Object, nil] nil if nothing found
         | 
| 9 | 
            +
                def get_element(object_identification)
         | 
| 10 | 
            +
                  return object_identification unless object_identification.is_a?(String)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  @driver.find_element(:xpath, object_identification)
         | 
| 13 | 
            +
                rescue StandardError
         | 
| 14 | 
            +
                  nil
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                # Get first visible element from several
         | 
| 18 | 
            +
                # @param [String] xpath_name to find several objects
         | 
| 19 | 
            +
                # @raise [Selenium::WebDriver::Error::InvalidSelectorError] if selector is invalid
         | 
| 20 | 
            +
                # @return [Object] first visible element
         | 
| 21 | 
            +
                def get_element_by_display(xpath_name)
         | 
| 22 | 
            +
                  @driver.find_elements(:xpath, xpath_name).each do |element|
         | 
| 23 | 
            +
                    return element if element.displayed?
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                rescue Selenium::WebDriver::Error::InvalidSelectorError
         | 
| 26 | 
            +
                  webdriver_error(Selenium::WebDriver::Error::InvalidSelectorError,
         | 
| 27 | 
            +
                                  "Invalid Selector: get_element_by_display('#{xpath_name}')")
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                # Get array of webdriver object by xpath
         | 
| 31 | 
            +
                # @param [String] objects_identification object to find
         | 
| 32 | 
            +
                # @param [Boolean] only_visible return invisible if true
         | 
| 33 | 
            +
                # @return [Array, Object] list of objects
         | 
| 34 | 
            +
                def get_elements(objects_identification, only_visible = true)
         | 
| 35 | 
            +
                  return objects_identification if objects_identification.is_a?(Array)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  elements = @driver.find_elements(:xpath, objects_identification)
         | 
| 38 | 
            +
                  if only_visible
         | 
| 39 | 
            +
                    elements.each do |current|
         | 
| 40 | 
            +
                      elements.delete(current) unless @browser == :firefox || current.displayed?
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                  elements
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module OnlyofficeWebdriverWrapper
         | 
| 4 | 
            +
              # Method to get text
         | 
| 5 | 
            +
              module GetTextMethods
         | 
| 6 | 
            +
                # Get text of current element
         | 
| 7 | 
            +
                # @param [String] xpath_name name of xpath
         | 
| 8 | 
            +
                # @param [Boolean] wait_until_visible wait until element visible
         | 
| 9 | 
            +
                # @return [String] result string
         | 
| 10 | 
            +
                def get_text(xpath_name, wait_until_visible = true)
         | 
| 11 | 
            +
                  wait_until_element_visible(xpath_name) if wait_until_visible
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  element = get_element(xpath_name)
         | 
| 14 | 
            +
                  webdriver_error("get_text(#{xpath_name}, #{wait_until_visible}) not found element by xpath") if element.nil?
         | 
| 15 | 
            +
                  if element.tag_name == 'input' || element.tag_name == 'textarea'
         | 
| 16 | 
            +
                    element.attribute('value')
         | 
| 17 | 
            +
                  else
         | 
| 18 | 
            +
                    element.text
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                # Get text in object by xpath
         | 
| 23 | 
            +
                # @param xpath [String] xpath to get text
         | 
| 24 | 
            +
                # @return [String] text in xpath
         | 
| 25 | 
            +
                def get_text_by_js(xpath)
         | 
| 26 | 
            +
                  text = execute_javascript("return #{dom_element_by_xpath(xpath)}.textContent")
         | 
| 27 | 
            +
                  text = execute_javascript("return #{dom_element_by_xpath(xpath)}.value") if text.empty?
         | 
| 28 | 
            +
                  text
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                # Get text from all elements with specified xpath
         | 
| 32 | 
            +
                # @param array_elements [String] xpath of elements
         | 
| 33 | 
            +
                # @return [Array<String>] values of elements
         | 
| 34 | 
            +
                def get_text_array(array_elements)
         | 
| 35 | 
            +
                  get_elements(array_elements).map { |current_element| get_text(current_element) }
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                # Get text from several elements
         | 
| 39 | 
            +
                # This method filter out all elements with empty text
         | 
| 40 | 
            +
                # @param [String] xpath_several_elements to find objects
         | 
| 41 | 
            +
                # @return [Array<String>] text of those elements
         | 
| 42 | 
            +
                def get_text_of_several_elements(xpath_several_elements)
         | 
| 43 | 
            +
                  @driver.find_elements(:xpath, xpath_several_elements).filter_map { |element| element.text unless element.text == '' }
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module OnlyofficeWebdriverWrapper
         | 
| 4 | 
            +
              # Method to work with select list
         | 
| 5 | 
            +
              module SelectListMethods
         | 
| 6 | 
            +
                # Select from list elements
         | 
| 7 | 
            +
                # @param [String] value value to find object
         | 
| 8 | 
            +
                # @param [Array<PageObject::Elements::Element>] elements_value `elements` page object to select from
         | 
| 9 | 
            +
                # @raise [SelectEntryNotFound] if value not found in select list
         | 
| 10 | 
            +
                # @return [void]
         | 
| 11 | 
            +
                def select_from_list_elements(value, elements_value)
         | 
| 12 | 
            +
                  index = get_element_index(value, elements_value)
         | 
| 13 | 
            +
                  webdriver_error(SelectEntryNotFound, "Select entry `#{value}` not found in #{elements_value}") if index.nil?
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  elements_value[index].click
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                # Get index of element by it's text
         | 
| 19 | 
            +
                # @param [String] text to compare text
         | 
| 20 | 
            +
                # @param [Array<PageObject::Elements::Element>] list_elements array with
         | 
| 21 | 
            +
                #   PageObject elements to find in
         | 
| 22 | 
            +
                # @return [Integer, nil] nil if nothing found, index if found
         | 
| 23 | 
            +
                def get_element_index(text, list_elements)
         | 
| 24 | 
            +
                  list_elements.each_with_index do |current, i|
         | 
| 25 | 
            +
                    return i if get_text(current) == text
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                  nil
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                # Get all options for combobox or select
         | 
| 31 | 
            +
                # @param [String] xpath_name to find element
         | 
| 32 | 
            +
                # @return [Array<String>] values
         | 
| 33 | 
            +
                def get_all_combo_box_values(xpath_name)
         | 
| 34 | 
            +
                  @driver.find_element(:xpath, xpath_name).find_elements(tag_name: 'option').map { |el| el.attribute('value') }
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                # Select value of combo box
         | 
| 38 | 
            +
                # @param [String] xpath_name to find combobox
         | 
| 39 | 
            +
                # @param [String] select_value to select
         | 
| 40 | 
            +
                # @param [Symbol] select_by select type, can be `:value` or `:text`
         | 
| 41 | 
            +
                # @return [void]
         | 
| 42 | 
            +
                def select_combo_box(xpath_name, select_value, select_by = :value)
         | 
| 43 | 
            +
                  wait_until_element_visible(xpath_name)
         | 
| 44 | 
            +
                  option = Selenium::WebDriver::Support::Select.new(get_element(xpath_name))
         | 
| 45 | 
            +
                  begin
         | 
| 46 | 
            +
                    option.select_by(select_by, select_value)
         | 
| 47 | 
            +
                  rescue StandardError
         | 
| 48 | 
            +
                    option.select_by(:text, select_value)
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
| @@ -71,8 +71,8 @@ module OnlyofficeWebdriverWrapper | |
| 71 71 | 
             
                  begin
         | 
| 72 72 | 
             
                    wait.until { get_element(xpath_name) }
         | 
| 73 73 | 
             
                  rescue Selenium::WebDriver::Error::TimeoutError => e
         | 
| 74 | 
            -
                    timeout_message = "wait_until_element_present(#{xpath_name}) "\
         | 
| 75 | 
            -
                                      'Selenium::WebDriver::Error::TimeoutError: '\
         | 
| 74 | 
            +
                    timeout_message = "wait_until_element_present(#{xpath_name}) " \
         | 
| 75 | 
            +
                                      'Selenium::WebDriver::Error::TimeoutError: ' \
         | 
| 76 76 | 
             
                                      "timed out after #{timeout} seconds"
         | 
| 77 77 | 
             
                    webdriver_error(e.class, timeout_message)
         | 
| 78 78 | 
             
                  end
         | 
| @@ -88,8 +88,8 @@ module OnlyofficeWebdriverWrapper | |
| 88 88 | 
             
                  begin
         | 
| 89 89 | 
             
                    wait.until { get_element(xpath_name) ? false : true }
         | 
| 90 90 | 
             
                  rescue Selenium::WebDriver::Error::TimeoutError => e
         | 
| 91 | 
            -
                    timeout_message = "wait_until_element_present(#{xpath_name}) "\
         | 
| 92 | 
            -
                                      'Selenium::WebDriver::Error::TimeoutError: '\
         | 
| 91 | 
            +
                    timeout_message = "wait_until_element_present(#{xpath_name}) " \
         | 
| 92 | 
            +
                                      'Selenium::WebDriver::Error::TimeoutError: ' \
         | 
| 93 93 | 
             
                                      "timed out after #{timeout} seconds"
         | 
| 94 94 | 
             
                    webdriver_error(e.class, timeout_message)
         | 
| 95 95 | 
             
                  end
         | 
| @@ -33,7 +33,7 @@ module OnlyofficeWebdriverWrapper | |
| 33 33 | 
             
                  if @download_directory.start_with?(Dir.tmpdir)
         | 
| 34 34 | 
             
                    FileUtils.remove_dir(@download_directory)
         | 
| 35 35 | 
             
                  else
         | 
| 36 | 
            -
                    OnlyofficeLoggerHelper.log("Download directory #{@download_directory} is not at tmp dir. "\
         | 
| 36 | 
            +
                    OnlyofficeLoggerHelper.log("Download directory #{@download_directory} is not at tmp dir. " \
         | 
| 37 37 | 
             
                                               'It will be not deleted')
         | 
| 38 38 | 
             
                  end
         | 
| 39 39 | 
             
                end
         | 
| @@ -40,15 +40,6 @@ module OnlyofficeWebdriverWrapper | |
| 40 40 | 
             
                  execute_javascript("#{dom_element_by_xpath(xpath)}.value=\"#{escaped_text}\";")
         | 
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| 43 | 
            -
                # Get text in object by xpath
         | 
| 44 | 
            -
                # @param xpath [String] xpath to get text
         | 
| 45 | 
            -
                # @return [String] text in xpath
         | 
| 46 | 
            -
                def get_text_by_js(xpath)
         | 
| 47 | 
            -
                  text = execute_javascript("return #{dom_element_by_xpath(xpath)}.textContent")
         | 
| 48 | 
            -
                  text = execute_javascript("return #{dom_element_by_xpath(xpath)}.value") if text.empty?
         | 
| 49 | 
            -
                  text
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
             | 
| 52 43 | 
             
                # Calculate object size using Javascript
         | 
| 53 44 | 
             
                # @param xpath [Sting] xpath of object
         | 
| 54 45 | 
             
                # @return [Dimensions] size of element
         | 
| @@ -104,8 +95,8 @@ module OnlyofficeWebdriverWrapper | |
| 104 95 | 
             
                # @param [String] xpath of element to remove
         | 
| 105 96 | 
             
                # @return [String] result of javascript execution
         | 
| 106 97 | 
             
                def remove_element(xpath)
         | 
| 107 | 
            -
                  script = "element = #{dom_element_by_xpath(xpath)};"\
         | 
| 108 | 
            -
                           'if (element !== null) '\
         | 
| 98 | 
            +
                  script = "element = #{dom_element_by_xpath(xpath)};" \
         | 
| 99 | 
            +
                           'if (element !== null) ' \
         | 
| 109 100 | 
             
                           '{element.parentNode.removeChild(element);};'
         | 
| 110 101 | 
             
                  execute_javascript(script)
         | 
| 111 102 | 
             
                end
         | 
| @@ -14,13 +14,9 @@ module OnlyofficeWebdriverWrapper | |
| 14 14 | 
             
                # * +y2+ - shift vector y coordinate
         | 
| 15 15 | 
             
                # * +mouse_release+ - release mouse after move
         | 
| 16 16 | 
             
                def drag_and_drop(xpath, x1, y1, x2, y2, mouse_release: true)
         | 
| 17 | 
            -
                   | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
                                       .move_to(canvas, x1.to_i - shift_to_zero.x,
         | 
| 21 | 
            -
                                                y1.to_i - shift_to_zero.y)
         | 
| 22 | 
            -
                                       .click_and_hold
         | 
| 23 | 
            -
                                       .move_by(x2, y2)
         | 
| 17 | 
            +
                  move_action = move_to_driver_action(xpath, x1, y1)
         | 
| 18 | 
            +
                                .click_and_hold
         | 
| 19 | 
            +
                                .move_by(x2, y2)
         | 
| 24 20 | 
             
                  move_action = move_action.release if mouse_release
         | 
| 25 21 |  | 
| 26 22 | 
             
                  move_action.perform
         | 
| @@ -56,12 +52,11 @@ module OnlyofficeWebdriverWrapper | |
| 56 52 | 
             
                # @return [nil]
         | 
| 57 53 | 
             
                def mouse_over(xpath_name, x_coordinate = 0, y_coordinate = 0)
         | 
| 58 54 | 
             
                  wait_until_element_present(xpath_name)
         | 
| 59 | 
            -
                   | 
| 60 | 
            -
                  @driver.action.move_to(@driver.find_element(:xpath, xpath_name),
         | 
| 61 | 
            -
                                         x_coordinate.to_i - shift_to_zero.x,
         | 
| 62 | 
            -
                                         y_coordinate.to_i - shift_to_zero.y).perform
         | 
| 55 | 
            +
                  move_to_driver_action(xpath_name, x_coordinate, y_coordinate).perform
         | 
| 63 56 | 
             
                end
         | 
| 64 57 |  | 
| 58 | 
            +
                private
         | 
| 59 | 
            +
             | 
| 65 60 | 
             
                # Since v4.3.0 of `webdriver` gem `move_to` method is moving
         | 
| 66 61 | 
             
                # from the center of the element
         | 
| 67 62 | 
             
                # Add additional negative shift if this version is used
         | 
| @@ -73,5 +68,18 @@ module OnlyofficeWebdriverWrapper | |
| 73 68 | 
             
                    Dimensions.new(0, 0)
         | 
| 74 69 | 
             
                  end
         | 
| 75 70 | 
             
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                # Generate action to move cursor to element
         | 
| 73 | 
            +
                # @param [String] xpath xpath to move
         | 
| 74 | 
            +
                # @param [Integer] right_by shift vector x coordinate
         | 
| 75 | 
            +
                # @param [Integer] down_by shift vector y coordinate
         | 
| 76 | 
            +
                # @return [Selenium::WebDriver::ActionBuilder] object to perform actions
         | 
| 77 | 
            +
                def move_to_driver_action(xpath, right_by, down_by)
         | 
| 78 | 
            +
                  element = @driver.find_element(:xpath, xpath)
         | 
| 79 | 
            +
                  shift_to_zero = move_to_shift_to_top_left(xpath)
         | 
| 80 | 
            +
                  @driver.action.move_to(element,
         | 
| 81 | 
            +
                                         right_by.to_i - shift_to_zero.x,
         | 
| 82 | 
            +
                                         down_by.to_i - shift_to_zero.y)
         | 
| 83 | 
            +
                end
         | 
| 76 84 | 
             
              end
         | 
| 77 85 | 
             
            end
         | 
| @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'fileutils'
         | 
| 3 4 | 
             
            require 'onlyoffice_s3_wrapper'
         | 
| 4 5 | 
             
            module OnlyofficeWebdriverWrapper
         | 
| 5 6 | 
             
              # Working with screenshots
         | 
| @@ -25,7 +26,7 @@ module OnlyofficeWebdriverWrapper | |
| 25 26 | 
             
                  begin
         | 
| 26 27 | 
             
                    get_screenshot(path_to_screenshot)
         | 
| 27 28 | 
             
                    cloud_screenshot = publish_screenshot(path_to_screenshot)
         | 
| 28 | 
            -
                     | 
| 29 | 
            +
                    FileUtils.rm_rf(path_to_screenshot)
         | 
| 29 30 | 
             
                    OnlyofficeLoggerHelper.log("upload screenshot: #{cloud_screenshot}")
         | 
| 30 31 | 
             
                    return cloud_screenshot
         | 
| 31 32 | 
             
                  rescue Errno::ENOENT => e
         | 
| @@ -38,9 +38,9 @@ module OnlyofficeWebdriverWrapper | |
| 38 38 | 
             
                    begin
         | 
| 39 39 | 
             
                      element.clear
         | 
| 40 40 | 
             
                    rescue Exception => e
         | 
| 41 | 
            -
                      webdriver_error(e.class, "Error in element.clear #{e} for "\
         | 
| 42 | 
            -
                                               "type_to_locator(#{xpath_name}, #{text_to_send}, "\
         | 
| 43 | 
            -
                                               "#{clear_content}, #{click_on_it}, "\
         | 
| 41 | 
            +
                      webdriver_error(e.class, "Error in element.clear #{e} for " \
         | 
| 42 | 
            +
                                               "type_to_locator(#{xpath_name}, #{text_to_send}, " \
         | 
| 43 | 
            +
                                               "#{clear_content}, #{click_on_it}, " \
         | 
| 44 44 | 
             
                                               "#{by_action}, #{by_element_send_key})")
         | 
| 45 45 | 
             
                    end
         | 
| 46 46 | 
             
                  end
         | 
| @@ -73,7 +73,7 @@ module OnlyofficeWebdriverWrapper | |
| 73 73 | 
             
                  element = get_element(xpath_name)
         | 
| 74 74 | 
             
                  if element.nil?
         | 
| 75 75 | 
             
                    webdriver_error(Selenium::WebDriver::Error::NoSuchElementError,
         | 
| 76 | 
            -
                                    "type_to_input(#{xpath_name}, #{text_to_send}, "\
         | 
| 76 | 
            +
                                    "type_to_input(#{xpath_name}, #{text_to_send}, " \
         | 
| 77 77 | 
             
                                    "#{clear_content}, #{click_on_it}): element not found")
         | 
| 78 78 | 
             
                  end
         | 
| 79 79 | 
             
                  element.clear if clear_content
         | 
| @@ -4,20 +4,20 @@ module OnlyofficeWebdriverWrapper | |
| 4 4 | 
             
              # Module for working with webdriver useragent
         | 
| 5 5 | 
             
              module WebdriverUserAgentHelper
         | 
| 6 6 | 
             
                # @return [String] useragent for Android phone browser
         | 
| 7 | 
            -
                USERAGENT_ANDROID_PHONE = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MDB08M) '\
         | 
| 8 | 
            -
                                          'AppleWebKit/537.36 (KHTML, like Gecko) '\
         | 
| 7 | 
            +
                USERAGENT_ANDROID_PHONE = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MDB08M) ' \
         | 
| 8 | 
            +
                                          'AppleWebKit/537.36 (KHTML, like Gecko) ' \
         | 
| 9 9 | 
             
                                          'Chrome/51.0.2704.81 Mobile Safari/537.36'
         | 
| 10 10 | 
             
                # @return [String] useragent for iPhone browser
         | 
| 11 | 
            -
                USERAGENT_IPHONE = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) '\
         | 
| 12 | 
            -
                                   'AppleWebKit/601.1.46 (KHTML, like Gecko) '\
         | 
| 11 | 
            +
                USERAGENT_IPHONE = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) ' \
         | 
| 12 | 
            +
                                   'AppleWebKit/601.1.46 (KHTML, like Gecko) ' \
         | 
| 13 13 | 
             
                                   'Version/9.0 Mobile/13F69 Safari/601.1'
         | 
| 14 14 | 
             
                # @return [String] useragent for iPad Air 2 Safari browser
         | 
| 15 | 
            -
                USERAGENT_IPAD_AIR_2_SAFARI = 'Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) '\
         | 
| 16 | 
            -
                                              'AppleWebKit/602.1.50 (KHTML, like Gecko) '\
         | 
| 15 | 
            +
                USERAGENT_IPAD_AIR_2_SAFARI = 'Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) ' \
         | 
| 16 | 
            +
                                              'AppleWebKit/602.1.50 (KHTML, like Gecko) ' \
         | 
| 17 17 | 
             
                                              'Version/10.0 Mobile/14A5346a Safari/602.1'
         | 
| 18 18 | 
             
                # @return [String] useragent for Nexus 10 Chrome browser
         | 
| 19 | 
            -
                USERAGENT_NEXUS_10_CHROME = 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) '\
         | 
| 20 | 
            -
                                            'AppleWebKit/537.36 (KHTML, like Gecko) '\
         | 
| 19 | 
            +
                USERAGENT_NEXUS_10_CHROME = 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) ' \
         | 
| 20 | 
            +
                                            'AppleWebKit/537.36 (KHTML, like Gecko) ' \
         | 
| 21 21 | 
             
                                            'Chrome/48.0.2564.23 Safari/537.36'
         | 
| 22 22 |  | 
| 23 23 | 
             
                # @return [String, nil] user agent string for current device
         | 
| @@ -8,6 +8,9 @@ require 'uri' | |
| 8 8 | 
             
            require_relative 'helpers/chrome_helper'
         | 
| 9 9 | 
             
            require_relative 'helpers/firefox_helper'
         | 
| 10 10 | 
             
            require_relative 'webdriver/click_methods'
         | 
| 11 | 
            +
            require_relative 'webdriver/element_getters'
         | 
| 12 | 
            +
            require_relative 'webdriver/get_text_methods'
         | 
| 13 | 
            +
            require_relative 'webdriver/select_list_methods'
         | 
| 11 14 | 
             
            require_relative 'webdriver/wait_until_methods'
         | 
| 12 15 | 
             
            require_relative 'webdriver/webdriver_alert_helper'
         | 
| 13 16 | 
             
            require_relative 'webdriver/webdriver_attributes_helper'
         | 
| @@ -31,6 +34,8 @@ module OnlyofficeWebdriverWrapper | |
| 31 34 | 
             
              class WebDriver
         | 
| 32 35 | 
             
                include ChromeHelper
         | 
| 33 36 | 
             
                include ClickMethods
         | 
| 37 | 
            +
                include GetTextMethods
         | 
| 38 | 
            +
                include SelectListMethods
         | 
| 34 39 | 
             
                include FirefoxHelper
         | 
| 35 40 | 
             
                include RubyHelper
         | 
| 36 41 | 
             
                include WaitUntilMethods
         | 
| @@ -91,61 +96,6 @@ module OnlyofficeWebdriverWrapper | |
| 91 96 | 
             
                  @browser_running = true
         | 
| 92 97 | 
             
                end
         | 
| 93 98 |  | 
| 94 | 
            -
                # Get element by it's xpath
         | 
| 95 | 
            -
                # @param [String] object_identification xpath of object to find
         | 
| 96 | 
            -
                # @return [Object, nil] nil if nothing found
         | 
| 97 | 
            -
                def get_element(object_identification)
         | 
| 98 | 
            -
                  return object_identification unless object_identification.is_a?(String)
         | 
| 99 | 
            -
             | 
| 100 | 
            -
                  @driver.find_element(:xpath, object_identification)
         | 
| 101 | 
            -
                rescue StandardError
         | 
| 102 | 
            -
                  nil
         | 
| 103 | 
            -
                end
         | 
| 104 | 
            -
             | 
| 105 | 
            -
                # Get text from all elements with specified xpath
         | 
| 106 | 
            -
                # @param array_elements [String] xpath of elements
         | 
| 107 | 
            -
                # @return [Array<String>] values of elements
         | 
| 108 | 
            -
                def get_text_array(array_elements)
         | 
| 109 | 
            -
                  get_elements(array_elements).map { |current_element| get_text(current_element) }
         | 
| 110 | 
            -
                end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                # Select from list elements
         | 
| 113 | 
            -
                # @param [String] value value to find object
         | 
| 114 | 
            -
                # @param [Array<Object>] elements_value elements to check
         | 
| 115 | 
            -
                # @return [void]
         | 
| 116 | 
            -
                def select_from_list_elements(value, elements_value)
         | 
| 117 | 
            -
                  index = get_element_index(value, elements_value)
         | 
| 118 | 
            -
                  elements_value[index].click
         | 
| 119 | 
            -
                end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                # Get index of element by it's text
         | 
| 122 | 
            -
                # @param [String] title to compare text
         | 
| 123 | 
            -
                # @param [Array<Objects>] list_elements to find in which
         | 
| 124 | 
            -
                # @return [Object, nil] nil if nothing found
         | 
| 125 | 
            -
                def get_element_index(title, list_elements)
         | 
| 126 | 
            -
                  list_elements.each_with_index do |current, i|
         | 
| 127 | 
            -
                    return i if get_text(current) == title
         | 
| 128 | 
            -
                  end
         | 
| 129 | 
            -
                  nil
         | 
| 130 | 
            -
                end
         | 
| 131 | 
            -
             | 
| 132 | 
            -
                # Get all options for combo box
         | 
| 133 | 
            -
                # @param [String] xpath_name to find combobox
         | 
| 134 | 
            -
                # @return [Array<String>] values
         | 
| 135 | 
            -
                def get_all_combo_box_values(xpath_name)
         | 
| 136 | 
            -
                  @driver.find_element(:xpath, xpath_name).find_elements(tag_name: 'option').map { |el| el.attribute('value') }
         | 
| 137 | 
            -
                end
         | 
| 138 | 
            -
             | 
| 139 | 
            -
                # Scroll list to specific element
         | 
| 140 | 
            -
                # @param [String] list_xpath how to find this list
         | 
| 141 | 
            -
                # @param [String] element_xpath to which we should scrolled
         | 
| 142 | 
            -
                # @return [void]
         | 
| 143 | 
            -
                def scroll_list_to_element(list_xpath, element_xpath)
         | 
| 144 | 
            -
                  execute_javascript("$(document.evaluate(\"#{list_xpath}\", document, null, XPathResult.ANY_TYPE, null).
         | 
| 145 | 
            -
                      iterateNext()).jScrollPane().data('jsp').scrollToElement(document.evaluate(\"#{element_xpath}\",
         | 
| 146 | 
            -
                      document, null, XPathResult.ANY_TYPE, null).iterateNext());")
         | 
| 147 | 
            -
                end
         | 
| 148 | 
            -
             | 
| 149 99 | 
             
                # Scroll list by pixel count
         | 
| 150 100 | 
             
                # @param [String] list_xpath how to detect this list
         | 
| 151 101 | 
             
                # @param [Integer] pixels how much to scroll
         | 
| @@ -168,8 +118,7 @@ module OnlyofficeWebdriverWrapper | |
| 168 118 | 
             
                    set_style_attribute("#{xpath_name}/button", 'display', 'inline-block')
         | 
| 169 119 | 
             
                    set_style_attribute(xpath_name, 'display', 'block')
         | 
| 170 120 | 
             
                  else
         | 
| 171 | 
            -
                     | 
| 172 | 
            -
                    @driver.action.move_to(element, horizontal_shift - shift_to_zero.x, vertical_shift - shift_to_zero.y).click.perform
         | 
| 121 | 
            +
                    move_to_driver_action(xpath_name, horizontal_shift, vertical_shift).click.perform
         | 
| 173 122 | 
             
                  end
         | 
| 174 123 | 
             
                end
         | 
| 175 124 |  | 
| @@ -182,14 +131,11 @@ module OnlyofficeWebdriverWrapper | |
| 182 131 | 
             
                # @return [void]
         | 
| 183 132 | 
             
                def action_on_locator_coordinates(xpath_name, right_by, down_by, action = :click, times = 1)
         | 
| 184 133 | 
             
                  wait_until_element_visible(xpath_name)
         | 
| 185 | 
            -
                   | 
| 186 | 
            -
                  shift_to_zero = move_to_shift_to_top_left(xpath_name)
         | 
| 187 | 
            -
                  (0...times).inject(@driver.action.move_to(element,
         | 
| 188 | 
            -
                                                            right_by.to_i - shift_to_zero.x,
         | 
| 189 | 
            -
                                                            down_by.to_i - shift_to_zero.y)) { |acc, _elem| acc.send(action) }.perform
         | 
| 134 | 
            +
                  (0...times).inject(move_to_driver_action(xpath_name, right_by, down_by)) { |acc, _elem| acc.send(action) }.perform
         | 
| 190 135 | 
             
                end
         | 
| 191 136 |  | 
| 192 137 | 
             
                # Check if element present on page
         | 
| 138 | 
            +
                # It may be visible or invisible, but should be present in DOM tree
         | 
| 193 139 | 
             
                # @param [String] xpath_name to find element
         | 
| 194 140 | 
             
                # @return [Boolean] result of check
         | 
| 195 141 | 
             
                def element_present?(xpath_name)
         | 
| @@ -206,17 +152,6 @@ module OnlyofficeWebdriverWrapper | |
| 206 152 | 
             
                  false
         | 
| 207 153 | 
             
                end
         | 
| 208 154 |  | 
| 209 | 
            -
                # Get first visible element from several
         | 
| 210 | 
            -
                # @param [String] xpath_name to find several objects
         | 
| 211 | 
            -
                # @return [Object] first visible element
         | 
| 212 | 
            -
                def get_element_by_display(xpath_name)
         | 
| 213 | 
            -
                  @driver.find_elements(:xpath, xpath_name).each do |element|
         | 
| 214 | 
            -
                    return element if element.displayed?
         | 
| 215 | 
            -
                  end
         | 
| 216 | 
            -
                rescue Selenium::WebDriver::Error::InvalidSelectorError
         | 
| 217 | 
            -
                  webdriver_error("get_element_by_display(#{xpath_name}): invalid selector: Unable to locate an element with the xpath expression")
         | 
| 218 | 
            -
                end
         | 
| 219 | 
            -
             | 
| 220 155 | 
             
                # Return count of elements (visible and not visible)
         | 
| 221 156 | 
             
                # @param xpath_name [String] xpath to find
         | 
| 222 157 | 
             
                # @param only_visible [True, False] count only visible elements?
         | 
| @@ -230,23 +165,8 @@ module OnlyofficeWebdriverWrapper | |
| 230 165 | 
             
                  end
         | 
| 231 166 | 
             
                end
         | 
| 232 167 |  | 
| 233 | 
            -
                # Get array of webdriver object by xpath
         | 
| 234 | 
            -
                # @param [String] objects_identification object to find
         | 
| 235 | 
            -
                # @param [Boolean] only_visible return invisible if true
         | 
| 236 | 
            -
                # @return [Array, Object] list of objects
         | 
| 237 | 
            -
                def get_elements(objects_identification, only_visible = true)
         | 
| 238 | 
            -
                  return objects_identification if objects_identification.is_a?(Array)
         | 
| 239 | 
            -
             | 
| 240 | 
            -
                  elements = @driver.find_elements(:xpath, objects_identification)
         | 
| 241 | 
            -
                  if only_visible
         | 
| 242 | 
            -
                    elements.each do |current|
         | 
| 243 | 
            -
                      elements.delete(current) unless @browser == :firefox || current.displayed?
         | 
| 244 | 
            -
                    end
         | 
| 245 | 
            -
                  end
         | 
| 246 | 
            -
                  elements
         | 
| 247 | 
            -
                end
         | 
| 248 | 
            -
             | 
| 249 168 | 
             
                # Check if element visible on page
         | 
| 169 | 
            +
                # It should be part of DOM and should be visible on current visible part of page
         | 
| 250 170 | 
             
                # @param [String] xpath_name element to find
         | 
| 251 171 | 
             
                # @return [Boolean] result of check
         | 
| 252 172 | 
             
                def element_visible?(xpath_name)
         | 
| @@ -280,44 +200,6 @@ module OnlyofficeWebdriverWrapper | |
| 280 200 | 
             
                  webdriver_error("Raise unknown exception: #{e}")
         | 
| 281 201 | 
             
                end
         | 
| 282 202 |  | 
| 283 | 
            -
                # Get text of current element
         | 
| 284 | 
            -
                # @param [String] xpath_name name of xpath
         | 
| 285 | 
            -
                # @param [Boolean] wait_until_visible wait until element visible
         | 
| 286 | 
            -
                # @return [String] result string
         | 
| 287 | 
            -
                def get_text(xpath_name, wait_until_visible = true)
         | 
| 288 | 
            -
                  wait_until_element_visible(xpath_name) if wait_until_visible
         | 
| 289 | 
            -
             | 
| 290 | 
            -
                  element = get_element(xpath_name)
         | 
| 291 | 
            -
                  webdriver_error("get_text(#{xpath_name}, #{wait_until_visible}) not found element by xpath") if element.nil?
         | 
| 292 | 
            -
                  if element.tag_name == 'input' || element.tag_name == 'textarea'
         | 
| 293 | 
            -
                    element.attribute('value')
         | 
| 294 | 
            -
                  else
         | 
| 295 | 
            -
                    element.text
         | 
| 296 | 
            -
                  end
         | 
| 297 | 
            -
                end
         | 
| 298 | 
            -
             | 
| 299 | 
            -
                # Get text from several elements
         | 
| 300 | 
            -
                # @param [String] xpath_several_elements to find objects
         | 
| 301 | 
            -
                # @return [Array<String>] text of those elements
         | 
| 302 | 
            -
                def get_text_of_several_elements(xpath_several_elements)
         | 
| 303 | 
            -
                  @driver.find_elements(:xpath, xpath_several_elements).filter_map { |element| element.text unless element.text == '' }
         | 
| 304 | 
            -
                end
         | 
| 305 | 
            -
             | 
| 306 | 
            -
                # Select value of combo box
         | 
| 307 | 
            -
                # @param [String] xpath_name to find combobox
         | 
| 308 | 
            -
                # @param [String] select_value to select
         | 
| 309 | 
            -
                # @param [Symbol] select_by select type
         | 
| 310 | 
            -
                # @return [void]
         | 
| 311 | 
            -
                def select_combo_box(xpath_name, select_value, select_by = :value)
         | 
| 312 | 
            -
                  wait_until_element_visible(xpath_name)
         | 
| 313 | 
            -
                  option = Selenium::WebDriver::Support::Select.new(get_element(xpath_name))
         | 
| 314 | 
            -
                  begin
         | 
| 315 | 
            -
                    option.select_by(select_by, select_value)
         | 
| 316 | 
            -
                  rescue StandardError
         | 
| 317 | 
            -
                    option.select_by(:text, select_value)
         | 
| 318 | 
            -
                  end
         | 
| 319 | 
            -
                end
         | 
| 320 | 
            -
             | 
| 321 203 | 
             
                # Get page source
         | 
| 322 204 | 
             
                # @return [String] all page source
         | 
| 323 205 | 
             
                def get_page_source
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: onlyoffice_webdriver_wrapper
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.9.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - ONLYOFFICE
         | 
| @@ -11,7 +11,7 @@ authors: | |
| 11 11 | 
             
            autorequire: 
         | 
| 12 12 | 
             
            bindir: bin
         | 
| 13 13 | 
             
            cert_chain: []
         | 
| 14 | 
            -
            date: 2022- | 
| 14 | 
            +
            date: 2022-08-01 00:00:00.000000000 Z
         | 
| 15 15 | 
             
            dependencies:
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 17 17 | 
             
              name: headless
         | 
| @@ -275,9 +275,9 @@ files: | |
| 275 275 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/bin/geckodriver
         | 
| 276 276 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb
         | 
| 277 277 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chrome_version_helper.rb
         | 
| 278 | 
            -
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_101
         | 
| 279 278 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_102
         | 
| 280 279 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_103
         | 
| 280 | 
            +
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_104
         | 
| 281 281 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_mac
         | 
| 282 282 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb
         | 
| 283 283 | 
             
            - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list
         | 
| @@ -291,6 +291,9 @@ files: | |
| 291 291 | 
             
            - lib/onlyoffice_webdriver_wrapper/version.rb
         | 
| 292 292 | 
             
            - lib/onlyoffice_webdriver_wrapper/webdriver.rb
         | 
| 293 293 | 
             
            - lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb
         | 
| 294 | 
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/element_getters.rb
         | 
| 295 | 
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/get_text_methods.rb
         | 
| 296 | 
            +
            - lib/onlyoffice_webdriver_wrapper/webdriver/select_list_methods.rb
         | 
| 294 297 | 
             
            - lib/onlyoffice_webdriver_wrapper/webdriver/wait_until_methods.rb
         | 
| 295 298 | 
             
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_alert_helper.rb
         | 
| 296 299 | 
             
            - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_attributes_helper.rb
         | 
| @@ -332,7 +335,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 332 335 | 
             
                - !ruby/object:Gem::Version
         | 
| 333 336 | 
             
                  version: '0'
         | 
| 334 337 | 
             
            requirements: []
         | 
| 335 | 
            -
            rubygems_version: 3.3. | 
| 338 | 
            +
            rubygems_version: 3.3.19
         | 
| 336 339 | 
             
            signing_key: 
         | 
| 337 340 | 
             
            specification_version: 4
         | 
| 338 341 | 
             
            summary: ONLYOFFICE Webdriver Wrapper Gem
         |