onlyoffice_webdriver_wrapper 0.4.0 → 0.6.3

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: 198918d5a397566f6099da61229da418520359f28a8eae58c554291303319ccb
4
- data.tar.gz: a4f7e7764c1a49456b5eed0d8a851a20eb6a3fc38890b222c66540927b03fa11
3
+ metadata.gz: 1091729c1613f10ddb9f8e29712a3c02f3c372a968e6816b0e7997b8b65272d9
4
+ data.tar.gz: 87948dfceaa1a636ff147562784410c817a8bda2f162ef79e3415ec1a5eaa16c
5
5
  SHA512:
6
- metadata.gz: 6c7bbf7385332599f38140a7457db436d79ffb298ba63d0895d8582f8092049962b69b6b819ff27b2700e42d6a0ed272776714ef6fc4a4ddc523549e746cde17
7
- data.tar.gz: 4776a813a596cbb702e4b1a9664ca22b92f65b5eeebe1523adc5ff29b012abee0a698451eab7802cc8c4933f85d8c808244ef29e487693f6d668a0260340cd34
6
+ metadata.gz: 523d1d318880090cf52cc67709ace53175aa2c26f739072de0b14d3adf77e580e089b0a6e037f734dd85fa65848f52b49f1a3a27c5a861e2f3e13c9c899025b6
7
+ data.tar.gz: 3ae8b0de1d7d3e2e79ad874cc6d9ea1765bbd7d38fae496ac805c4ca22273490c9f7eb4cd07478db00a08be56c5318ba29730701d428ceee583a94aa5d7a0235
@@ -37,7 +37,6 @@ module OnlyofficeWebdriverWrapper
37
37
  caps = Selenium::WebDriver::Remote::Capabilities.chrome
38
38
  caps[:logging_prefs] = { browser: 'ALL' }
39
39
  caps[:proxy] = Selenium::WebDriver::Proxy.new(ssl: "#{@proxy.proxy_address}:#{@proxy.proxy_port}") if @proxy
40
- caps['chromeOptions'] = { w3c: false }
41
40
  switches = add_useragent_to_switches(DEFAULT_CHROME_SWITCHES)
42
41
  options = Selenium::WebDriver::Chrome::Options.new(args: switches,
43
42
  prefs: prefs)
@@ -4,10 +4,12 @@ require_relative 'headless_helper/real_display_tools'
4
4
  require_relative 'headless_helper/ruby_helper'
5
5
  require 'headless'
6
6
  require_relative 'headless_helper/headless_screenshot_patch'
7
+ require_relative 'headless_helper/headless_video_recorder'
7
8
 
8
9
  module OnlyofficeWebdriverWrapper
9
10
  # Class for using headless gem
10
11
  class HeadlessHelper
12
+ include HeadlessVideoRecorder
11
13
  include RealDisplayTools
12
14
  include RubyHelper
13
15
  # @return [Headless] instance of headless object
@@ -16,10 +18,15 @@ module OnlyofficeWebdriverWrapper
16
18
  attr_accessor :resolution_x
17
19
  # @return [Integer] y resolution of virtual screen
18
20
  attr_accessor :resolution_y
21
+ # @return [True, False] is video should be recorded
22
+ attr_reader :record_video
19
23
 
20
- def initialize(resolution_x = 1680, resolution_y = 1050)
24
+ def initialize(resolution_x: 1680,
25
+ resolution_y: 1050,
26
+ record_video: true)
21
27
  @resolution_x = resolution_x
22
28
  @resolution_y = resolution_y
29
+ @record_video = record_video
23
30
  end
24
31
 
25
32
  # Check if should start headless
@@ -43,21 +50,25 @@ module OnlyofficeWebdriverWrapper
43
50
  begin
44
51
  @headless_instance = Headless.new(reuse: false,
45
52
  destroy_at_exit: true,
46
- dimensions: "#{@resolution_x + 1}x#{@resolution_y + 1}x24")
53
+ dimensions: "#{@resolution_x + 1}x#{@resolution_y + 1}x24",
54
+ video: { provider: :ffmpeg })
47
55
  rescue Exception => e
48
56
  OnlyofficeLoggerHelper.log("xvfb not started with problem #{e}")
49
57
  WebDriver.clean_up(true)
50
58
  @headless_instance = Headless.new(reuse: false,
51
59
  destroy_at_exit: true,
52
- dimensions: "#{@resolution_x + 1}x#{@resolution_y + 1}x24")
60
+ dimensions: "#{@resolution_x + 1}x#{@resolution_y + 1}x24",
61
+ video: { provider: :ffmpeg })
53
62
  end
54
63
  headless_instance.start
64
+ start_capture
55
65
  end
56
66
 
57
67
  def stop
58
68
  return unless running?
59
69
 
60
70
  OnlyofficeLoggerHelper.log('Stopping Headless Session')
71
+ stop_capture
61
72
  headless_instance.destroy
62
73
  end
63
74
 
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Methods to record video
5
+ module HeadlessVideoRecorder
6
+ # @return [String] uniq file path to recorded file
7
+ def recorded_video_file
8
+ return @recorded_video_file if @recorded_video_file
9
+
10
+ file_pattern = 'onlyoffice_webdriver_wrapper_video_file'
11
+ temp_file = Tempfile.new([file_pattern, '.mp4'])
12
+ @recorded_video_file = temp_file.path
13
+ temp_file.unlink
14
+ @recorded_video_file
15
+ end
16
+
17
+ # @return [nil] start capture of file
18
+ def start_capture
19
+ headless_instance.video.start_capture if record_video
20
+ rescue Headless::Exception => e
21
+ OnlyofficeLoggerHelper.log("Cannot start video capture: #{e}")
22
+ @record_video = false
23
+ end
24
+
25
+ # @return [nil] stop catpure of file
26
+ def stop_capture
27
+ return unless record_video
28
+
29
+ headless_instance.video.stop_and_save(recorded_video_file)
30
+ OnlyofficeLoggerHelper.log("Video is saved to #{recorded_video_file}")
31
+ rescue Headless::Exception => e
32
+ OnlyofficeLoggerHelper.log("Saving recorded video failed: #{e}")
33
+ @record_video = false
34
+ end
35
+ end
36
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OnlyofficeWebdriverWrapper
4
4
  module Version
5
- STRING = '0.4.0'
5
+ STRING = '0.6.3'
6
6
  end
7
7
  end
@@ -56,41 +56,40 @@ module OnlyofficeWebdriverWrapper
56
56
  attr_accessor :headless
57
57
  # @return [Net::HTTP::Proxy] connection proxy
58
58
  attr_accessor :proxy
59
+ # @return [True, False] should video be recorded
60
+ attr_reader :record_video
59
61
 
60
- def initialize(browser = :firefox,
61
- _remote_server = nil,
62
- device: :desktop_linux,
63
- proxy: nil)
62
+ def initialize(browser = :firefox, params = {})
64
63
  raise WebdriverSystemNotSupported, 'Your OS is not 64 bit. It is not supported' unless os_64_bit?
65
64
 
66
- @device = device
67
- @headless = HeadlessHelper.new
65
+ @device = params.fetch(:device, :desktop_linux)
66
+ @record_video = params.fetch(:record_video, true)
67
+ @headless = HeadlessHelper.new(record_video: record_video)
68
68
  @headless.start
69
69
 
70
70
  @download_directory = Dir.mktmpdir('webdriver-download')
71
- @browser = browser
72
- @proxy = proxy
71
+ @browser = params.fetch(:browser, browser)
72
+ @proxy = params[:proxy]
73
73
  case browser
74
74
  when :firefox
75
75
  @driver = start_firefox_driver
76
76
  when :chrome
77
77
  @driver = start_chrome_driver
78
78
  else
79
- raise 'Unknown Browser: ' + browser.to_s
79
+ raise("Unknown Browser: #{browser}")
80
80
  end
81
81
  @browser_running = true
82
82
  end
83
83
 
84
84
  def open(url)
85
- url = 'http://' + url unless url.include?('http') || url.include?('file://')
85
+ url = "http://#{url}" unless url.include?('http') || url.include?('file://')
86
86
  loop do
87
- begin
88
- @driver.navigate.to url
89
- break
90
- rescue Timeout::Error
91
- @driver.navigate.refresh
92
- end
87
+ @driver.navigate.to url
88
+ break
89
+ rescue Timeout::Error
90
+ @driver.navigate.refresh
93
91
  end
92
+ sleep(1) # Correct wait for Page to init focus
94
93
  OnlyofficeLoggerHelper.log("Opened page: #{url}")
95
94
  end
96
95
 
@@ -210,10 +209,10 @@ module OnlyofficeWebdriverWrapper
210
209
  def open_dropdown_selector(xpath_name, horizontal_shift = 30, vertical_shift = 0)
211
210
  element = get_element(xpath_name)
212
211
  if @browser == :firefox || @browser == :safari
213
- set_style_attribute(xpath_name + '/button', 'display', 'none')
212
+ set_style_attribute("#{xpath_name}/button", 'display', 'none')
214
213
  set_style_attribute(xpath_name, 'display', 'inline')
215
214
  element.click
216
- set_style_attribute(xpath_name + '/button', 'display', 'inline-block')
215
+ set_style_attribute("#{xpath_name}/button", 'display', 'inline-block')
217
216
  set_style_attribute(xpath_name, 'display', 'block')
218
217
  else
219
218
  @driver.action.move_to(element, horizontal_shift, vertical_shift).click.perform
@@ -333,14 +332,12 @@ module OnlyofficeWebdriverWrapper
333
332
  # @param [String] xpath_name name of current xpath
334
333
  def select_frame(xpath_name = '//iframe', count_of_frames = 1)
335
334
  (0...count_of_frames).each do
336
- begin
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
335
+ frame = @driver.find_element(:xpath, xpath_name)
336
+ @driver.switch_to.frame frame
337
+ rescue Selenium::WebDriver::Error::NoSuchElementError
338
+ OnlyofficeLoggerHelper.log('Raise NoSuchElementError in the select_frame method')
339
+ rescue Exception => e
340
+ webdriver_error("Raise unkwnown exception: #{e}")
344
341
  end
345
342
  end
346
343
 
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.4.0
4
+ version: 0.6.3
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: 2020-07-30 00:00:00.000000000 Z
14
+ date: 2020-09-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: headless
@@ -31,58 +31,58 @@ 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.1'
36
+ version: 0.3.0
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.1'
43
+ version: 0.3.0
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: onlyoffice_logger_helper
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - "~>"
48
+ - - '='
49
49
  - !ruby/object:Gem::Version
50
- version: '1'
50
+ version: 1.0.3
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - "~>"
55
+ - - '='
56
56
  - !ruby/object:Gem::Version
57
- version: '1'
57
+ version: 1.0.3
58
58
  - !ruby/object:Gem::Dependency
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.1'
64
+ version: 0.3.0
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - "~>"
69
+ - - '='
70
70
  - !ruby/object:Gem::Version
71
- version: '0.1'
71
+ version: 0.3.0
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: page-object
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - "~>"
76
+ - - '='
77
77
  - !ruby/object:Gem::Version
78
- version: '2'
78
+ version: 2.2.6
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - "~>"
83
+ - - '='
84
84
  - !ruby/object:Gem::Version
85
- version: '2'
85
+ version: 2.2.6
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: selenium-webdriver
88
88
  requirement: !ruby/object:Gem::Requirement
@@ -101,30 +101,114 @@ dependencies:
101
101
  name: watir
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - "~>"
104
+ - - '='
105
105
  - !ruby/object:Gem::Version
106
- version: '6'
106
+ version: 6.17.0
107
107
  type: :runtime
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - "~>"
111
+ - - '='
112
+ - !ruby/object:Gem::Version
113
+ version: 6.17.0
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.2.11
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - '='
126
+ - !ruby/object:Gem::Version
127
+ version: 0.2.11
128
+ - !ruby/object:Gem::Dependency
129
+ name: overcommit
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - '='
133
+ - !ruby/object:Gem::Version
134
+ version: 0.55.0
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - '='
112
140
  - !ruby/object:Gem::Version
113
- version: '6'
141
+ version: 0.55.0
114
142
  - !ruby/object:Gem::Dependency
115
143
  name: rake
116
144
  requirement: !ruby/object:Gem::Requirement
117
145
  requirements:
118
- - - "~>"
146
+ - - '='
119
147
  - !ruby/object:Gem::Version
120
- version: '13.0'
148
+ version: 13.0.1
121
149
  type: :development
122
150
  prerelease: false
123
151
  version_requirements: !ruby/object:Gem::Requirement
124
152
  requirements:
125
- - - "~>"
153
+ - - '='
154
+ - !ruby/object:Gem::Version
155
+ version: 13.0.1
156
+ - !ruby/object:Gem::Dependency
157
+ name: rspec
158
+ requirement: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - '='
126
161
  - !ruby/object:Gem::Version
127
- version: '13.0'
162
+ version: 3.9.0
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - '='
168
+ - !ruby/object:Gem::Version
169
+ version: 3.9.0
170
+ - !ruby/object:Gem::Dependency
171
+ name: rubocop
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - '='
175
+ - !ruby/object:Gem::Version
176
+ version: 0.90.0
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - '='
182
+ - !ruby/object:Gem::Version
183
+ version: 0.90.0
184
+ - !ruby/object:Gem::Dependency
185
+ name: rubocop-performance
186
+ requirement: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - '='
189
+ - !ruby/object:Gem::Version
190
+ version: 1.8.0
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - '='
196
+ - !ruby/object:Gem::Version
197
+ version: 1.8.0
198
+ - !ruby/object:Gem::Dependency
199
+ name: rubocop-rspec
200
+ requirement: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - '='
203
+ - !ruby/object:Gem::Version
204
+ version: 1.43.2
205
+ type: :development
206
+ prerelease: false
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - '='
210
+ - !ruby/object:Gem::Version
211
+ version: 1.43.2
128
212
  description: ONLYOFFICE Webdriver Wrapper Gem. Used in QA
129
213
  email:
130
214
  - shockwavenn@gmail.com
@@ -142,6 +226,7 @@ files:
142
226
  - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list
143
227
  - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb
144
228
  - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_screenshot_patch.rb
229
+ - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_video_recorder.rb
145
230
  - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/real_display_tools.rb
146
231
  - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/ruby_helper.rb
147
232
  - lib/onlyoffice_webdriver_wrapper/helpers/os_helper.rb
@@ -179,7 +264,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
179
264
  requirements:
180
265
  - - ">="
181
266
  - !ruby/object:Gem::Version
182
- version: '0'
267
+ version: '2.5'
183
268
  required_rubygems_version: !ruby/object:Gem::Requirement
184
269
  requirements:
185
270
  - - ">="