onlyoffice_webdriver_wrapper 0.16.1 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 463293b09305f4239661d7a2b5ede7401f2413727901404f62803b7039de8eb6
4
- data.tar.gz: 64d8ba2953c044d3e16027788b5422acbe908d8e6c01a3e4777c101ceaf8268c
3
+ metadata.gz: fa55ec4ecf7da6b705cf7e5f61e561c7a70e319b7e1b17ce33eb2aa29a93e6ef
4
+ data.tar.gz: f517118579f4efe962a5a81818e7f95a60be4c1fa6b02844f93c0b79a5c3cb28
5
5
  SHA512:
6
- metadata.gz: 5889b7d26d11ca03c1f2b20241c17bcae0f20e63745d1426f3f64e24aee9288716c2ea0e3faa4220aff813d36b70b14f9d745a434c669f872bb134be7bce4818
7
- data.tar.gz: 504842e409da31df07eb312d420d8a39caff748b52d6ade7611b6a3a5304e244a9561b6cffe19ce47ee3e62951a1995092a79e955d46f99c052e0c3988a7f6fa
6
+ metadata.gz: b6771021256d643efe30cb7ef4d039f7964e384784841f9d41f93d581a9263bc7bc70c10b335bf06c3f748bc3f8298fe00bbed7c91de3c4f875fba273c8c0747
7
+ data.tar.gz: 7c3e5b157d9ecbad1688e59877ff49fdc17aa28074377d2bc974cb1868c94204855ba0a0bf2272cdac7be0500413f344ba8b9fa1c4e64e499e15948581aae72c
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OnlyofficeWebdriverWrapper
4
4
  module Version
5
- STRING = '0.16.1'
5
+ STRING = '0.17.0'
6
6
  end
7
7
  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]
@@ -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
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.1
4
+ version: 0.17.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-08-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: headless
@@ -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