onlyoffice_webdriver_wrapper 1.8.1 → 1.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (21) hide show
  1. checksums.yaml +4 -4
  2. data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/{chromedriver_linux_101 → chromedriver_linux_104} +0 -0
  3. data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_mac +0 -0
  4. data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb +4 -1
  5. data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_patch.rb +1 -1
  6. data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb +1 -1
  7. data/lib/onlyoffice_webdriver_wrapper/version.rb +1 -1
  8. data/lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb +5 -3
  9. data/lib/onlyoffice_webdriver_wrapper/webdriver/element_getters.rb +46 -0
  10. data/lib/onlyoffice_webdriver_wrapper/webdriver/get_text_methods.rb +48 -0
  11. data/lib/onlyoffice_webdriver_wrapper/webdriver/select_list_methods.rb +52 -0
  12. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_attributes_helper.rb +1 -1
  13. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb +2 -0
  14. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_frame_methods.rb +2 -2
  15. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb +2 -11
  16. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_navigation_methods.rb +7 -3
  17. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb +5 -4
  18. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_tab_helper.rb +6 -1
  19. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_type_helper.rb +12 -4
  20. data/lib/onlyoffice_webdriver_wrapper/webdriver.rb +15 -126
  21. metadata +15 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 776391f3667781696f5c73f6b3839fa17ed3965deaaaa53e4c0717b4915f2ced
4
- data.tar.gz: 5d9c932257c2e35e99464657ac3c00f8069a90d40bfc7ffc0d1e1c599ab3aee2
3
+ metadata.gz: 38bd65e16f39df65c2513cf77d215d9df3e35511260a505f894b524cac93f7fa
4
+ data.tar.gz: 4ae69daf079c905eef591f76376feea072eb13e500ef257b0d07f1b696f0ef8f
5
5
  SHA512:
6
- metadata.gz: 15a1d5affae01a3e6857ec9b7b592e89f9007e841f7a4d9c83043c1fc020b1086f6d9b59594f94239a47469d727db095d83187a3e2f9e25fd2caba632d958dbc
7
- data.tar.gz: d313861c4bda34d5452b95e9caaf29a53c13899f53d16fb95d699c98ead637311ff28b67b8533a7718f746c6eeb576f078a8dd6df211f48f6f88d62a97288326
6
+ metadata.gz: fbd8f193fdb5e43da1ef26d14572d3f915d9152098c51673d141fa86236af37f5a547d0fa9a001d5a638a0a96fd72773b9616ac58a86802c3ef148de05d12bbd
7
+ data.tar.gz: ea78ca635fdb7c87397962a2aa727295d9dfc37798bd5deaad338b463967fb95bbd3e83d5b4cd190062823fb52499ecf2795ca42f9891c9b2d393ebc566f8e89
@@ -21,7 +21,10 @@ module OnlyofficeWebdriverWrapper
21
21
  caps = Selenium::WebDriver::Remote::Capabilities.firefox
22
22
  caps[:proxy] = Selenium::WebDriver::Proxy.new(ssl: "#{@proxy.proxy_address}:#{@proxy.proxy_port}") if @proxy
23
23
  driver = Selenium::WebDriver.for :firefox, service: firefox_service, capabilities: [caps, options]
24
- driver.manage.window.size = Selenium::WebDriver::Dimension.new(headless.resolution_x, headless.resolution_y) if headless.running?
24
+ if headless.running?
25
+ driver.manage.window.size = Selenium::WebDriver::Dimension.new(headless.resolution_x,
26
+ headless.resolution_y)
27
+ end
25
28
  driver
26
29
  end
27
30
 
@@ -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
- # @retunr [nil, String] path to result file or nil if error
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
@@ -54,7 +54,7 @@ module OnlyofficeWebdriverWrapper
54
54
  destroy_at_exit: true,
55
55
  dimensions: "#{@resolution_x + 1}x#{@resolution_y + 1}x24",
56
56
  video: { provider: :ffmpeg })
57
- rescue Exception => e
57
+ rescue StandardError => e
58
58
  OnlyofficeLoggerHelper.log("xvfb not started with problem #{e}")
59
59
  WebDriver.clean_up(true)
60
60
  @headless_instance = Headless.new(reuse: false,
@@ -4,6 +4,6 @@ module OnlyofficeWebdriverWrapper
4
4
  # Module for storing version data
5
5
  module Version
6
6
  # @return [String] Current stable version of gem
7
- STRING = '1.8.1'
7
+ STRING = '1.10.1'
8
8
  end
9
9
  end
@@ -24,8 +24,10 @@ module OnlyofficeWebdriverWrapper
24
24
  begin
25
25
  count.times { element.click }
26
26
  rescue Selenium::WebDriver::Error::ElementNotInteractableError => e
27
- webdriver_error(e.class, "Selenium::WebDriver::Error::ElementNotInteractableError: element not visible for xpath: #{xpath_name}")
28
- rescue Exception => e
27
+ webdriver_error(e.class,
28
+ 'Selenium::WebDriver::Error::ElementNotInteractableError: ' \
29
+ "element not visible for xpath: #{xpath_name}")
30
+ rescue StandardError => e
29
31
  webdriver_error(e.class, "UnknownError #{e.message} #{xpath_name}")
30
32
  end
31
33
  end
@@ -38,7 +40,7 @@ module OnlyofficeWebdriverWrapper
38
40
  element = get_element_by_display(xpath_name)
39
41
  begin
40
42
  element.is_a?(Array) ? element.first.click : element.click
41
- rescue Exception => e
43
+ rescue StandardError => e
42
44
  webdriver_error(e.class, "Exception #{e} in click_on_displayed(#{xpath_name})")
43
45
  end
44
46
  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,48 @@
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 do |element|
44
+ element.text unless element.text == ''
45
+ end
46
+ end
47
+ end
48
+ 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
@@ -12,7 +12,7 @@ module OnlyofficeWebdriverWrapper
12
12
  begin
13
13
  attribute_value = element.attribute(attribute)
14
14
  exist = !(attribute_value.empty? || attribute_value.nil?)
15
- rescue Exception
15
+ rescue StandardError
16
16
  exist = false
17
17
  end
18
18
  exist
@@ -3,4 +3,6 @@
3
3
  module OnlyofficeWebdriverWrapper
4
4
  # Exception class if system is not supported
5
5
  class WebdriverSystemNotSupported < StandardError; end
6
+ # If entry needed to be selected not found in select
7
+ class SelectEntryNotFound < StandardError; end
6
8
  end
@@ -13,7 +13,7 @@ module OnlyofficeWebdriverWrapper
13
13
  @driver.switch_to.frame frame
14
14
  rescue Selenium::WebDriver::Error::NoSuchElementError
15
15
  OnlyofficeLoggerHelper.log('Raise NoSuchElementError in the select_frame method')
16
- rescue Exception => e
16
+ rescue StandardError => e
17
17
  webdriver_error("Raise unknown exception: #{e}")
18
18
  end
19
19
  end
@@ -24,7 +24,7 @@ module OnlyofficeWebdriverWrapper
24
24
  @driver.switch_to.default_content
25
25
  rescue Timeout::Error
26
26
  OnlyofficeLoggerHelper.log('Raise TimeoutError in the select_top_frame method')
27
- rescue Exception => e
27
+ rescue StandardError => e
28
28
  raise "Browser is crushed or hangup with error: #{e}"
29
29
  end
30
30
  end
@@ -18,7 +18,7 @@ module OnlyofficeWebdriverWrapper
18
18
  # in that case performing `webdriver_error` only cause forever loop
19
19
  # since webdriver_error trying to get_url or make screenshots
20
20
  raise(e.class, "Timeout Error #{e} happened while executing #{script}")
21
- rescue Exception => e
21
+ rescue StandardError => e
22
22
  webdriver_error(e, "Exception #{e} in execute_javascript: #{script}")
23
23
  end
24
24
 
@@ -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
@@ -93,7 +84,7 @@ module OnlyofficeWebdriverWrapper
93
84
  # @param property [String] property to get
94
85
  # @return [String] value of property
95
86
  def computed_style(xpath, pseudo_element = 'null', property = nil)
96
- element_by_xpath = "document.evaluate(\"#{xpath.tr('"', "'")}\",document, null, XPathResult.ANY_TYPE, null ).iterateNext()"
87
+ element_by_xpath = dom_element_by_xpath(xpath)
97
88
  style = "window.getComputedStyle(#{element_by_xpath}, '#{pseudo_element}')"
98
89
  full_command = "#{style}.getPropertyValue('#{property}')"
99
90
  result = execute_javascript("return #{full_command}")
@@ -20,12 +20,16 @@ module OnlyofficeWebdriverWrapper
20
20
 
21
21
  # @return [String] url of current frame, or browser url if
22
22
  # it is a root frame
23
- def get_url
23
+ def current_url
24
24
  execute_javascript('return window.location.href')
25
25
  rescue Selenium::WebDriver::Error::NoSuchFrameError, Timeout::Error => e
26
26
  raise(e.class, "Browser is crushed or hangup with #{e}")
27
27
  end
28
28
 
29
+ alias get_url current_url
30
+ extend Gem::Deprecate
31
+ deprecate :get_url, 'current_url', 2069, 1
32
+
29
33
  # Refresh current page
30
34
  # @return [nil]
31
35
  def refresh
@@ -48,11 +52,11 @@ module OnlyofficeWebdriverWrapper
48
52
  begin
49
53
  @driver.execute_script('window.onbeforeunload = null') # off popup window
50
54
  rescue StandardError
51
- Exception
55
+ StandardError
52
56
  end
53
57
  begin
54
58
  @driver.quit
55
- rescue Exception => e
59
+ rescue StandardError => e
56
60
  OnlyofficeLoggerHelper.log("Some error happened on webdriver.quit #{e.backtrace}")
57
61
  end
58
62
  alert_confirm
@@ -22,7 +22,8 @@ module OnlyofficeWebdriverWrapper
22
22
  # Get screenshot of current windows and upload it to cloud storage
23
23
  # @param [String] path_to_screenshot place to store local screenshot
24
24
  # @return [String] url of public screenshot
25
- def get_screenshot_and_upload(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png")
25
+ def get_screenshot_and_upload(path_to_screenshot = nil)
26
+ path_to_screenshot ||= "#{screenshot_folder}/#{StringHelper.generate_random_string}.png"
26
27
  begin
27
28
  get_screenshot(path_to_screenshot)
28
29
  cloud_screenshot = publish_screenshot(path_to_screenshot)
@@ -57,20 +58,20 @@ module OnlyofficeWebdriverWrapper
57
58
  def webdriver_screenshot(screenshot_name = SecureRandom.uuid)
58
59
  begin
59
60
  link = get_screenshot_and_upload("#{screenshot_folder}/#{screenshot_name}.png")
60
- rescue Exception => e
61
+ rescue StandardError => e
61
62
  OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Trying to get headless screenshot")
62
63
  if @headless.headless_instance.nil?
63
64
  system_screenshot("/tmp/#{screenshot_name}.png")
64
65
  begin
65
66
  link = publish_screenshot("/tmp/#{screenshot_name}.png")
66
- rescue Exception => e
67
+ rescue StandardError => e
67
68
  OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. System screenshot #{link}")
68
69
  end
69
70
  else
70
71
  @headless.take_screenshot("/tmp/#{screenshot_name}.png")
71
72
  begin
72
73
  link = publish_screenshot("/tmp/#{screenshot_name}.png")
73
- rescue Exception => e
74
+ rescue StandardError => e
74
75
  OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Headless screenshot #{link}")
75
76
  end
76
77
  end
@@ -85,8 +85,13 @@ module OnlyofficeWebdriverWrapper
85
85
  end
86
86
 
87
87
  # @return [String] title of current tab
88
- def get_title_of_current_tab
88
+ def title_of_current_tab
89
89
  @driver.title
90
90
  end
91
+
92
+ alias get_title_of_current_tab title_of_current_tab
93
+
94
+ extend Gem::Deprecate
95
+ deprecate :get_title_of_current_tab, 'title_of_current_tab', 2069, 1
91
96
  end
92
97
  end
@@ -32,12 +32,17 @@ module OnlyofficeWebdriverWrapper
32
32
  # @param [Boolean] by_action type by `@driver.action` if true
33
33
  # @param [Boolean] by_element_send_key use `element.send_keys` if true
34
34
  # @return [void]
35
- def type_to_locator(xpath_name, text_to_send, clear_content = true, click_on_it = false, by_action = false, by_element_send_key = false)
35
+ def type_to_locator(xpath_name,
36
+ text_to_send,
37
+ clear_content = true,
38
+ click_on_it = false,
39
+ by_action = false,
40
+ by_element_send_key = false)
36
41
  element = get_element(xpath_name)
37
42
  if clear_content
38
43
  begin
39
44
  element.clear
40
- rescue Exception => e
45
+ rescue StandardError => e
41
46
  webdriver_error(e.class, "Error in element.clear #{e} for " \
42
47
  "type_to_locator(#{xpath_name}, #{text_to_send}, " \
43
48
  "#{clear_content}, #{click_on_it}, " \
@@ -81,8 +86,11 @@ module OnlyofficeWebdriverWrapper
81
86
  if click_on_it
82
87
  begin
83
88
  element.click
84
- rescue Exception => e
85
- webdriver_error(e.class, "type_to_input(#{xpath_name}, #{text_to_send}, #{clear_content}, #{click_on_it}) error in 'element.click' error: #{e}")
89
+ rescue StandardError => e
90
+ webdriver_error(e.class,
91
+ "type_to_input(#{xpath_name}, #{text_to_send}, " \
92
+ "#{clear_content}, #{click_on_it}) " \
93
+ "error in 'element.click' error: #{e}")
86
94
  end
87
95
  sleep 0.2
88
96
  end
@@ -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,68 +96,12 @@ 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] text to compare text
123
- # @param [Array<PageObject::Elements::Element>] list_elements array with
124
- # PageObject elements to find in
125
- # @return [Integer, nil] nil if nothing found, index if found
126
- def get_element_index(text, list_elements)
127
- list_elements.each_with_index do |current, i|
128
- return i if get_text(current) == text
129
- end
130
- nil
131
- end
132
-
133
- # Get all options for combo box
134
- # @param [String] xpath_name to find combobox
135
- # @return [Array<String>] values
136
- def get_all_combo_box_values(xpath_name)
137
- @driver.find_element(:xpath, xpath_name).find_elements(tag_name: 'option').map { |el| el.attribute('value') }
138
- end
139
-
140
- # Scroll list to specific element
141
- # @param [String] list_xpath how to find this list
142
- # @param [String] element_xpath to which we should scrolled
143
- # @return [void]
144
- def scroll_list_to_element(list_xpath, element_xpath)
145
- execute_javascript("$(document.evaluate(\"#{list_xpath}\", document, null, XPathResult.ANY_TYPE, null).
146
- iterateNext()).jScrollPane().data('jsp').scrollToElement(document.evaluate(\"#{element_xpath}\",
147
- document, null, XPathResult.ANY_TYPE, null).iterateNext());")
148
- end
149
-
150
99
  # Scroll list by pixel count
151
100
  # @param [String] list_xpath how to detect this list
152
101
  # @param [Integer] pixels how much to scroll
153
102
  # @return [void]
154
103
  def scroll_list_by_pixels(list_xpath, pixels)
155
- execute_javascript("$(document.evaluate(\"#{list_xpath.tr('"', "'")}\", document, null, XPathResult.ANY_TYPE, null).iterateNext()).scrollTop(#{pixels})")
104
+ execute_javascript("$(#{dom_element_by_xpath(list_xpath)}).scrollTop(#{pixels})")
156
105
  end
157
106
 
158
107
  # Open dropdown selector, like 'Color Selector', which has no element id
@@ -199,21 +148,10 @@ module OnlyofficeWebdriverWrapper
199
148
  @driver.find_element(:xpath, xpath_name)
200
149
  true
201
150
  end
202
- rescue Exception
151
+ rescue StandardError
203
152
  false
204
153
  end
205
154
 
206
- # Get first visible element from several
207
- # @param [String] xpath_name to find several objects
208
- # @return [Object] first visible element
209
- def get_element_by_display(xpath_name)
210
- @driver.find_elements(:xpath, xpath_name).each do |element|
211
- return element if element.displayed?
212
- end
213
- rescue Selenium::WebDriver::Error::InvalidSelectorError
214
- webdriver_error("get_element_by_display(#{xpath_name}): invalid selector: Unable to locate an element with the xpath expression")
215
- end
216
-
217
155
  # Return count of elements (visible and not visible)
218
156
  # @param xpath_name [String] xpath to find
219
157
  # @param only_visible [True, False] count only visible elements?
@@ -227,22 +165,6 @@ module OnlyofficeWebdriverWrapper
227
165
  end
228
166
  end
229
167
 
230
- # Get array of webdriver object by xpath
231
- # @param [String] objects_identification object to find
232
- # @param [Boolean] only_visible return invisible if true
233
- # @return [Array, Object] list of objects
234
- def get_elements(objects_identification, only_visible = true)
235
- return objects_identification if objects_identification.is_a?(Array)
236
-
237
- elements = @driver.find_elements(:xpath, objects_identification)
238
- if only_visible
239
- elements.each do |current|
240
- elements.delete(current) unless @browser == :firefox || current.displayed?
241
- end
242
- end
243
- elements
244
- end
245
-
246
168
  # Check if element visible on page
247
169
  # It should be part of DOM and should be visible on current visible part of page
248
170
  # @param [String] xpath_name element to find
@@ -256,7 +178,7 @@ module OnlyofficeWebdriverWrapper
256
178
 
257
179
  begin
258
180
  visible = element.displayed?
259
- rescue Exception => e
181
+ rescue StandardError => e
260
182
  OnlyofficeLoggerHelper.log("Element #{xpath_name} is not visible because of: #{e.message}")
261
183
  visible = false
262
184
  end
@@ -274,54 +196,21 @@ module OnlyofficeWebdriverWrapper
274
196
  return true if current_element.displayed?
275
197
  end
276
198
  false
277
- rescue Exception => e
199
+ rescue StandardError => e
278
200
  webdriver_error("Raise unknown exception: #{e}")
279
201
  end
280
202
 
281
- # Get text of current element
282
- # @param [String] xpath_name name of xpath
283
- # @param [Boolean] wait_until_visible wait until element visible
284
- # @return [String] result string
285
- def get_text(xpath_name, wait_until_visible = true)
286
- wait_until_element_visible(xpath_name) if wait_until_visible
287
-
288
- element = get_element(xpath_name)
289
- webdriver_error("get_text(#{xpath_name}, #{wait_until_visible}) not found element by xpath") if element.nil?
290
- if element.tag_name == 'input' || element.tag_name == 'textarea'
291
- element.attribute('value')
292
- else
293
- element.text
294
- end
295
- end
296
-
297
- # Get text from several elements
298
- # @param [String] xpath_several_elements to find objects
299
- # @return [Array<String>] text of those elements
300
- def get_text_of_several_elements(xpath_several_elements)
301
- @driver.find_elements(:xpath, xpath_several_elements).filter_map { |element| element.text unless element.text == '' }
302
- end
303
-
304
- # Select value of combo box
305
- # @param [String] xpath_name to find combobox
306
- # @param [String] select_value to select
307
- # @param [Symbol] select_by select type
308
- # @return [void]
309
- def select_combo_box(xpath_name, select_value, select_by = :value)
310
- wait_until_element_visible(xpath_name)
311
- option = Selenium::WebDriver::Support::Select.new(get_element(xpath_name))
312
- begin
313
- option.select_by(select_by, select_value)
314
- rescue StandardError
315
- option.select_by(:text, select_value)
316
- end
317
- end
318
-
319
203
  # Get page source
320
204
  # @return [String] all page source
321
- def get_page_source
205
+ def page_source
322
206
  @driver.execute_script('return document.documentElement.innerHTML;')
323
207
  end
324
208
 
209
+ alias get_page_source page_source
210
+
211
+ extend Gem::Deprecate
212
+ deprecate :get_page_source, 'page_source', 2069, 1
213
+
325
214
  # Raise an error, making a screenshot before it
326
215
  # @param [String, Object] exception class to raise
327
216
  # @param [String] error_message to raise
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.8.1
4
+ version: 1.10.1
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-07-08 00:00:00.000000000 Z
14
+ date: 2022-08-10 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: headless
@@ -31,16 +31,16 @@ dependencies:
31
31
  name: onlyoffice_file_helper
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - "~>"
34
+ - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '0'
36
+ version: '2'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - "~>"
41
+ - - "<"
42
42
  - !ruby/object:Gem::Version
43
- version: '0'
43
+ version: '2'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: onlyoffice_logger_helper
46
46
  requirement: !ruby/object:Gem::Requirement
@@ -59,9 +59,9 @@ dependencies:
59
59
  name: onlyoffice_s3_wrapper
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - "~>"
62
+ - - "<"
63
63
  - !ruby/object:Gem::Version
64
- version: '0'
64
+ version: '2'
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: 0.5.0
@@ -69,9 +69,9 @@ dependencies:
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: '0'
74
+ version: '2'
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: 0.5.0
@@ -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.17
338
+ rubygems_version: 3.3.20
336
339
  signing_key:
337
340
  specification_version: 4
338
341
  summary: ONLYOFFICE Webdriver Wrapper Gem