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 +4 -4
- data/lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver +0 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver_mac +0 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb +0 -1
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb +14 -3
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_video_recorder.rb +36 -0
- data/lib/onlyoffice_webdriver_wrapper/version.rb +1 -1
- data/lib/onlyoffice_webdriver_wrapper/webdriver.rb +23 -26
- metadata +112 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1091729c1613f10ddb9f8e29712a3c02f3c372a968e6816b0e7997b8b65272d9
|
4
|
+
data.tar.gz: 87948dfceaa1a636ff147562784410c817a8bda2f162ef79e3415ec1a5eaa16c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 523d1d318880090cf52cc67709ace53175aa2c26f739072de0b14d3adf77e580e089b0a6e037f734dd85fa65848f52b49f1a3a27c5a861e2f3e13c9c899025b6
|
7
|
+
data.tar.gz: 3ae8b0de1d7d3e2e79ad874cc6d9ea1765bbd7d38fae496ac805c4ca22273490c9f7eb4cd07478db00a08be56c5318ba29730701d428ceee583a94aa5d7a0235
|
Binary file
|
Binary file
|
@@ -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
|
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
|
@@ -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
|
-
@
|
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
|
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 =
|
85
|
+
url = "http://#{url}" unless url.include?('http') || url.include?('file://')
|
86
86
|
loop do
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
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
|
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
|
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
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
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
|
+
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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: '
|
267
|
+
version: '2.5'
|
183
268
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
269
|
requirements:
|
185
270
|
- - ">="
|