onlyoffice_webdriver_wrapper 0.16.0 → 0.19.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1dfd0b95b8343e5c1362a65f0b4703f7230a7435d04ab21ede88bb6829fd51f
4
- data.tar.gz: 528ca617de3d3b94d2d5c5e5efb3ad60114630cc896dd38f7608974081346708
3
+ metadata.gz: 9c2c0b6a752ec508710b4642c516b0d33ae43660cc6b0c8918528541cef29d74
4
+ data.tar.gz: bb62666d6e3285139c0ec3c283408b8418ab3475d85a902b5c46e2d6e74e0e3a
5
5
  SHA512:
6
- metadata.gz: 149f3f9c31fb65c0f87969967ee52162037746ba67c795c603b0e846e7713e0cb5ef91f9a1e50289f77d3729ac6ce03a79be60e82ba637c8c4dd5a8f86d8ef04
7
- data.tar.gz: fd83bcb90c2f1b242287bc569e58597ea89185c291394d532efccf41bdd742c9bb071cc4fffb5d319cff572cc5f2cac2bf7358b669111b203768b714dd73dc43
6
+ metadata.gz: e5b9aeae0da9acb8f6cfd7d45cf374df888365001e5afee68f6fec5bf86e8cc6afb27c02a62411b01b2cf83175f779fda3f7a58c126d6c85ddb7b8a0d749d484
7
+ data.tar.gz: 3796e30526b01c3f96104ba418828d93e96adfd33f95862c9958941141068cc802e6f73951071869cb020061308075d4781dda5f1113a92a8d97b1b86454c207
@@ -8,6 +8,7 @@ module OnlyofficeWebdriverWrapper
8
8
  include ChromeVersionHelper
9
9
 
10
10
  DEFAULT_CHROME_SWITCHES = %w[--kiosk-printing
11
+ --disable-gpu
11
12
  --disable-popup-blocking
12
13
  --disable-infobars
13
14
  --no-sandbox
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OnlyofficeWebdriverWrapper
4
4
  module Version
5
- STRING = '0.16.0'
5
+ STRING = '0.19.0'
6
6
  end
7
7
  end
@@ -34,6 +34,21 @@ module OnlyofficeWebdriverWrapper
34
34
  webdriver_error("Element #{xpath_name} not visible for #{timeout} seconds")
35
35
  end
36
36
 
37
+ # Wait until element present and visible
38
+ # @param [String] xpath_name xpath of element
39
+ # @param [Integer] period_of_wait how much time sleep each iteration of wait
40
+ # @param [Integer] critical_time maximum time for wait for element
41
+ # @return [nil]
42
+ def wait_element(xpath_name, period_of_wait = 1, critical_time = 3)
43
+ wait_until_element_present(xpath_name)
44
+ time = 0
45
+ until element_visible?(xpath_name)
46
+ sleep(period_of_wait)
47
+ time += 1
48
+ return if time == critical_time
49
+ end
50
+ end
51
+
37
52
  # Wait until some element present
38
53
  # If timeout exceeded - raise an error
39
54
  # @param xpath_name [String] xpath of element
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Methods for webdriver frame operations
5
+ module WebdriverFrameMethods
6
+ # Select frame as current
7
+ # @param [String] xpath_name name of current xpath
8
+ # @param [Integer] count_of_frames how much times select xpath_name
9
+ # @return [nil]
10
+ def select_frame(xpath_name = '//iframe', count_of_frames = 1)
11
+ (0...count_of_frames).each do
12
+ frame = @driver.find_element(:xpath, xpath_name)
13
+ @driver.switch_to.frame frame
14
+ rescue Selenium::WebDriver::Error::NoSuchElementError
15
+ OnlyofficeLoggerHelper.log('Raise NoSuchElementError in the select_frame method')
16
+ rescue Exception => e
17
+ webdriver_error("Raise unkwnown exception: #{e}")
18
+ end
19
+ end
20
+
21
+ # Select top frame of browser (even if several subframes exists)
22
+ # @return [nil]
23
+ def select_top_frame
24
+ @driver.switch_to.default_content
25
+ rescue Timeout::Error
26
+ OnlyofficeLoggerHelper.log('Raise TimeoutError in the select_top_frame method')
27
+ rescue Exception => e
28
+ raise "Browser is crushed or hangup with error: #{e}"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Methods for webdriver to move cursor
5
+ module WebdriverMoveCursorMethods
6
+ # Perform drag'n'drop action in one element (for example on big canvas area)
7
+ # for drag'n'drop one whole element use 'drag_and_drop_by'
8
+ # ==== Attributes
9
+ #
10
+ # * +xpath+ - xpath of element on which drag and drop performed
11
+ # * +x1+ - x coordinate on element to start drag'n'drop
12
+ # * +y1+ - y coordinate on element to start drag'n'drop
13
+ # * +x2+ - shift vector x coordinate
14
+ # * +y2+ - shift vector y coordinate
15
+ # * +mouse_release+ - release mouse after move
16
+ def drag_and_drop(xpath, x1, y1, x2, y2, mouse_release: true)
17
+ canvas = get_element(xpath)
18
+
19
+ move_action = @driver.action
20
+ .move_to(canvas, x1.to_i, y1.to_i)
21
+ .click_and_hold
22
+ .move_by(x2, y2)
23
+ move_action = move_action.release if mouse_release
24
+
25
+ move_action.perform
26
+ end
27
+
28
+ # Perform drag'n'drop one whole element
29
+ # for drag'n'drop inside one element (f.e. canvas) use drag_and_drop
30
+ # ==== Attributes
31
+ #
32
+ # * +source+ - xpath of element on which drag and drop performed
33
+ # * +right_by+ - shift vector x coordinate
34
+ # * +down_by+ - shift vector y coordinate
35
+ def drag_and_drop_by(source, right_by, down_by = 0)
36
+ @driver.action.drag_and_drop_by(get_element(source), right_by, down_by).perform
37
+ end
38
+
39
+ # Move cursor to element
40
+ # @param [String, Selenium::WebDriver::Element] element xpath or webdriver element
41
+ # @return [nil]
42
+ def move_to_element(element)
43
+ element = get_element(element) if element.is_a?(String)
44
+ @driver.action.move_to(element).perform
45
+ end
46
+
47
+ # Move cursor to element
48
+ # @param [String] xpath_name
49
+ # @return [nil]
50
+ def move_to_element_by_locator(xpath_name)
51
+ element = get_element(xpath_name)
52
+ @driver.action.move_to(element).perform
53
+ OnlyofficeLoggerHelper.log("Moved mouse to element: #{xpath_name}")
54
+ end
55
+
56
+ # Move mouse over element
57
+ # @param [String] xpath_name element to move
58
+ # @param [Integer] x_coordinate position relate to center of element
59
+ # @param [Integer] y_coordinate position relate to center of element
60
+ # @return [nil]
61
+ def mouse_over(xpath_name, x_coordinate = 0, y_coordinate = 0)
62
+ wait_until_element_present(xpath_name)
63
+ @driver.action.move_to(@driver.find_element(:xpath, xpath_name), x_coordinate.to_i, y_coordinate.to_i).perform
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Methods for webdriver navigations
5
+ module WebdriverNavigationMethods
6
+ # Open specific url
7
+ # @param [String] url to open
8
+ # @return [nil]
9
+ def open(url)
10
+ url = "http://#{url}" unless url.include?('http') || url.include?('file://')
11
+ @driver.navigate.to url
12
+ sleep(1) # Correct wait for Page to init focus
13
+ OnlyofficeLoggerHelper.log("Opened page: #{url}")
14
+ rescue StandardError => e
15
+ message = "Received error `#{e}` while opening page `#{url}`"
16
+ OnlyofficeLoggerHelper.log(message)
17
+ raise e.class, message, e.backtrace
18
+ end
19
+
20
+ # @return [String] url of current frame, or browser url if
21
+ # it is a root frame
22
+ def get_url
23
+ execute_javascript('return window.location.href')
24
+ rescue Selenium::WebDriver::Error::NoSuchDriverError, TimeoutError => e
25
+ raise(e.class, "Browser is crushed or hangup with #{e}")
26
+ end
27
+
28
+ # Refresh current page
29
+ # @return [nil]
30
+ def refresh
31
+ @driver.navigate.refresh
32
+ OnlyofficeLoggerHelper.log('Refresh page')
33
+ end
34
+
35
+ # Go back like pressing `Back` button in browser
36
+ # @return [nil]
37
+ def go_back
38
+ @driver.navigate.back
39
+ OnlyofficeLoggerHelper.log('Go back to previous page')
40
+ end
41
+
42
+ # Quit current browser session
43
+ # @return [nil]
44
+ def quit
45
+ return unless browser_running
46
+
47
+ begin
48
+ @driver.execute_script('window.onbeforeunload = null') # off popup window
49
+ rescue StandardError
50
+ Exception
51
+ end
52
+ begin
53
+ @driver.quit
54
+ rescue Exception => e
55
+ OnlyofficeLoggerHelper.log("Some error happened on webdriver.quit #{e.backtrace}")
56
+ end
57
+ alert_confirm
58
+ @headless.stop
59
+ cleanup_download_folder
60
+ @browser_running = false
61
+ end
62
+ end
63
+ end
@@ -14,8 +14,11 @@ require_relative 'webdriver/webdriver_attributes_helper'
14
14
  require_relative 'webdriver/webdriver_browser_info_helper'
15
15
  require_relative 'webdriver/webdriver_type_helper'
16
16
  require_relative 'webdriver/webdriver_exceptions'
17
+ require_relative 'webdriver/webdriver_frame_methods'
17
18
  require_relative 'webdriver/webdriver_helper'
18
19
  require_relative 'webdriver/webdriver_js_methods'
20
+ require_relative 'webdriver/webdriver_move_cursor_methods'
21
+ require_relative 'webdriver/webdriver_navigation_methods'
19
22
  require_relative 'webdriver/webdriver_screenshot_helper'
20
23
  require_relative 'webdriver/webdriver_style_helper'
21
24
  require_relative 'webdriver/webdriver_tab_helper'
@@ -34,8 +37,11 @@ module OnlyofficeWebdriverWrapper
34
37
  include WebdriverAttributesHelper
35
38
  include WebdriverBrowserInfo
36
39
  include WebdriverTypeHelper
40
+ include WebdriverFrameMethods
37
41
  include WebdriverHelper
38
42
  include WebdriverJsMethods
43
+ include WebdriverMoveCursorMethods
44
+ include WebdriverNavigationMethods
39
45
  include WebdriverScreenshotHelper
40
46
  include WebdriverStyleHelper
41
47
  include WebdriverTabHelper
@@ -83,37 +89,6 @@ module OnlyofficeWebdriverWrapper
83
89
  @browser_running = true
84
90
  end
85
91
 
86
- def open(url)
87
- url = "http://#{url}" unless url.include?('http') || url.include?('file://')
88
- loop do
89
- @driver.navigate.to url
90
- break
91
- rescue Timeout::Error
92
- @driver.navigate.refresh
93
- end
94
- sleep(1) # Correct wait for Page to init focus
95
- OnlyofficeLoggerHelper.log("Opened page: #{url}")
96
- end
97
-
98
- def quit
99
- return unless browser_running
100
-
101
- begin
102
- @driver.execute_script('window.onbeforeunload = null') # off popup window
103
- rescue StandardError
104
- Exception
105
- end
106
- begin
107
- @driver.quit
108
- rescue Exception => e
109
- OnlyofficeLoggerHelper.log("Some error happened on webdriver.quit #{e.backtrace}")
110
- end
111
- alert_confirm
112
- @headless.stop
113
- cleanup_download_folder
114
- @browser_running = false
115
- end
116
-
117
92
  def get_element(object_identification)
118
93
  return object_identification unless object_identification.is_a?(String)
119
94
 
@@ -145,57 +120,6 @@ module OnlyofficeWebdriverWrapper
145
120
  @driver.find_element(:xpath, xpath_name).find_elements(tag_name: 'option').map { |el| el.attribute('value') }
146
121
  end
147
122
 
148
- # @return [String] url of current frame, or browser url if
149
- # it is a root frame
150
- def get_url
151
- execute_javascript('return window.location.href')
152
- rescue Selenium::WebDriver::Error::NoSuchDriverError, TimeoutError => e
153
- raise(e.class, "Browser is crushed or hangup with #{e}")
154
- end
155
-
156
- def refresh
157
- @driver.navigate.refresh
158
- OnlyofficeLoggerHelper.log('Refresh page')
159
- end
160
-
161
- def go_back
162
- @driver.navigate.back
163
- OnlyofficeLoggerHelper.log('Go back to previous page')
164
- end
165
-
166
- # Perform drag'n'drop action in one element (for example on big canvas area)
167
- # for drag'n'drop one whole element use 'drag_and_drop_by'
168
- # ==== Attributes
169
- #
170
- # * +xpath+ - xpath of element on which drag and drop performed
171
- # * +x1+ - x coordinate on element to start drag'n'drop
172
- # * +y1+ - y coordinate on element to start drag'n'drop
173
- # * +x2+ - shift vector x coordinate
174
- # * +y2+ - shift vector y coordinate
175
- # * +mouse_release+ - release mouse after move
176
- def drag_and_drop(xpath, x1, y1, x2, y2, mouse_release: true)
177
- canvas = get_element(xpath)
178
-
179
- move_action = @driver.action
180
- .move_to(canvas, x1.to_i, y1.to_i)
181
- .click_and_hold
182
- .move_by(x2, y2)
183
- move_action = move_action.release if mouse_release
184
-
185
- move_action.perform
186
- end
187
-
188
- # Perform drag'n'drop one whole element
189
- # for drag'n'drop inside one element (f.e. canvas) use drag_and_drop
190
- # ==== Attributes
191
- #
192
- # * +source+ - xpath of element on which drag and drop performed
193
- # * +right_by+ - shift vector x coordinate
194
- # * +down_by+ - shift vector y coordinate
195
- def drag_and_drop_by(source, right_by, down_by = 0)
196
- @driver.action.drag_and_drop_by(get_element(source), right_by, down_by).perform
197
- end
198
-
199
123
  def scroll_list_to_element(list_xpath, element_xpath)
200
124
  execute_javascript("$(document.evaluate(\"#{list_xpath}\", document, null, XPathResult.ANY_TYPE, null).
201
125
  iterateNext()).jScrollPane().data('jsp').scrollToElement(document.evaluate(\"#{element_xpath}\",
@@ -227,22 +151,6 @@ module OnlyofficeWebdriverWrapper
227
151
  (0...times).inject(@driver.action.move_to(element, right_by.to_i, down_by.to_i)) { |acc, _elem| acc.send(action) }.perform
228
152
  end
229
153
 
230
- def move_to_element(element)
231
- element = get_element(element) if element.is_a?(String)
232
- @driver.action.move_to(element).perform
233
- end
234
-
235
- def move_to_element_by_locator(xpath_name)
236
- element = get_element(xpath_name)
237
- @driver.action.move_to(element).perform
238
- OnlyofficeLoggerHelper.log("Moved mouse to element: #{xpath_name}")
239
- end
240
-
241
- def mouse_over(xpath_name, x_coordinate = 0, y_coordinate = 0)
242
- wait_until_element_present(xpath_name)
243
- @driver.action.move_to(@driver.find_element(:xpath, xpath_name), x_coordinate.to_i, y_coordinate.to_i).perform
244
- end
245
-
246
154
  def element_present?(xpath_name)
247
155
  case xpath_name
248
156
  when PageObject::Elements::Element
@@ -320,38 +228,6 @@ module OnlyofficeWebdriverWrapper
320
228
  webdriver_error("Raise unkwnown exception: #{e}")
321
229
  end
322
230
 
323
- def wait_element(xpath_name, period_of_wait = 1, critical_time = 3)
324
- wait_until_element_present(xpath_name)
325
- time = 0
326
- until element_visible?(xpath_name)
327
- sleep(period_of_wait)
328
- time += 1
329
- return if time == critical_time
330
- end
331
- end
332
-
333
- # Select frame as current
334
- # @param [String] xpath_name name of current xpath
335
- def select_frame(xpath_name = '//iframe', count_of_frames = 1)
336
- (0...count_of_frames).each do
337
- frame = @driver.find_element(:xpath, xpath_name)
338
- @driver.switch_to.frame frame
339
- rescue Selenium::WebDriver::Error::NoSuchElementError
340
- OnlyofficeLoggerHelper.log('Raise NoSuchElementError in the select_frame method')
341
- rescue Exception => e
342
- webdriver_error("Raise unkwnown exception: #{e}")
343
- end
344
- end
345
-
346
- # Select top frame of browser (even if several subframes exists)
347
- def select_top_frame
348
- @driver.switch_to.default_content
349
- rescue Timeout::Error
350
- OnlyofficeLoggerHelper.log('Raise TimeoutError in the select_top_frame method')
351
- rescue Exception => e
352
- raise "Browser is crushed or hangup with error: #{e}"
353
- end
354
-
355
231
  # Get text of current element
356
232
  # @param [String] xpath_name name of xpath
357
233
  # @param [true, false] wait_until_visible wait until element visible [@default = true]
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: 0.16.0
4
+ version: 0.19.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: 2021-07-26 00:00:00.000000000 Z
14
+ date: 2021-11-15 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: headless
@@ -111,20 +111,6 @@ dependencies:
111
111
  - - "~>"
112
112
  - !ruby/object:Gem::Version
113
113
  version: '6'
114
- - !ruby/object:Gem::Dependency
115
- name: codecov
116
- requirement: !ruby/object:Gem::Requirement
117
- requirements:
118
- - - "~>"
119
- - !ruby/object:Gem::Version
120
- version: '0'
121
- type: :development
122
- prerelease: false
123
- version_requirements: !ruby/object:Gem::Requirement
124
- requirements:
125
- - - "~>"
126
- - !ruby/object:Gem::Version
127
- version: '0'
128
114
  - !ruby/object:Gem::Dependency
129
115
  name: overcommit
130
116
  requirement: !ruby/object:Gem::Requirement
@@ -237,6 +223,20 @@ dependencies:
237
223
  - - "~>"
238
224
  - !ruby/object:Gem::Version
239
225
  version: '2'
226
+ - !ruby/object:Gem::Dependency
227
+ name: simplecov-cobertura
228
+ requirement: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - "~>"
231
+ - !ruby/object:Gem::Version
232
+ version: '1'
233
+ type: :development
234
+ prerelease: false
235
+ version_requirements: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - "~>"
238
+ - !ruby/object:Gem::Version
239
+ version: '1'
240
240
  description: ONLYOFFICE Webdriver Wrapper Gem. Used in QA
241
241
  email:
242
242
  - shockwavenn@gmail.com
@@ -249,9 +249,9 @@ files:
249
249
  - lib/onlyoffice_webdriver_wrapper/helpers/bin/geckodriver
250
250
  - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb
251
251
  - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chrome_version_helper.rb
252
- - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_90
253
- - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_91
254
252
  - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_92
253
+ - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_94
254
+ - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_linux_96
255
255
  - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper/chromedriver_bin/chromedriver_mac
256
256
  - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb
257
257
  - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list
@@ -271,8 +271,11 @@ files:
271
271
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_info_helper.rb
272
272
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_log_helper.rb
273
273
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb
274
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_frame_methods.rb
274
275
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_helper.rb
275
276
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb
277
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_move_cursor_methods.rb
278
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_navigation_methods.rb
276
279
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb
277
280
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_style_helper.rb
278
281
  - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_tab_helper.rb
@@ -287,6 +290,7 @@ metadata:
287
290
  documentation_uri: https://www.rubydoc.info/gems/onlyoffice_webdriver_wrapper
288
291
  homepage_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_webdriver_wrapper
289
292
  source_code_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_webdriver_wrapper
293
+ rubygems_mfa_required: 'true'
290
294
  post_install_message:
291
295
  rdoc_options: []
292
296
  require_paths:
@@ -302,7 +306,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
302
306
  - !ruby/object:Gem::Version
303
307
  version: '0'
304
308
  requirements: []
305
- rubygems_version: 3.2.22
309
+ rubygems_version: 3.2.29
306
310
  signing_key:
307
311
  specification_version: 4
308
312
  summary: ONLYOFFICE Webdriver Wrapper Gem