onlyoffice_webdriver_wrapper 0.6.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.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/lib/onlyoffice_webdriver_wrapper.rb +7 -0
  3. data/lib/onlyoffice_webdriver_wrapper/dimensions.rb +22 -0
  4. data/lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver +0 -0
  5. data/lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver_mac +0 -0
  6. data/lib/onlyoffice_webdriver_wrapper/helpers/bin/geckodriver +0 -0
  7. data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb +66 -0
  8. data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb +37 -0
  9. data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list +35 -0
  10. data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb +86 -0
  11. data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_screenshot_patch.rb +18 -0
  12. data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_video_recorder.rb +36 -0
  13. data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/real_display_tools.rb +21 -0
  14. data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/ruby_helper.rb +16 -0
  15. data/lib/onlyoffice_webdriver_wrapper/helpers/os_helper.rb +11 -0
  16. data/lib/onlyoffice_webdriver_wrapper/name.rb +7 -0
  17. data/lib/onlyoffice_webdriver_wrapper/version.rb +7 -0
  18. data/lib/onlyoffice_webdriver_wrapper/webdriver.rb +424 -0
  19. data/lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb +125 -0
  20. data/lib/onlyoffice_webdriver_wrapper/webdriver/wait_until_methods.rb +71 -0
  21. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_alert_helper.rb +25 -0
  22. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_attributes_helper.rb +63 -0
  23. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_info_helper.rb +22 -0
  24. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_log_helper.rb +12 -0
  25. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb +5 -0
  26. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_helper.rb +37 -0
  27. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb +100 -0
  28. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb +68 -0
  29. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_style_helper.rb +32 -0
  30. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_tab_helper.rb +70 -0
  31. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_type_helper.rb +121 -0
  32. data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_user_agent_helper.rb +51 -0
  33. metadata +278 -0
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onlyoffice_s3_wrapper'
4
+ module OnlyofficeWebdriverWrapper
5
+ # Working with screenshots
6
+ module WebdriverScreenshotHelper
7
+ # @return [OnlyofficeS3Wrapper::AmazonS3Wrapper] s3 wrapper
8
+ def amazon_s3_wrapper
9
+ @amazon_s3_wrapper ||= OnlyofficeS3Wrapper::AmazonS3Wrapper.new(bucket_name: 'webdriver-wrapper-screenshots',
10
+ region: 'us-east-1')
11
+ end
12
+
13
+ # @return [String] location of screenshot to take
14
+ def screenshot_folder
15
+ '/tmp/screenshot/WebdriverError'
16
+ end
17
+
18
+ def get_screenshot_and_upload(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png")
19
+ begin
20
+ get_screenshot(path_to_screenshot)
21
+ cloud_screenshot = amazon_s3_wrapper.upload_file_and_make_public(path_to_screenshot)
22
+ File.delete(path_to_screenshot) if File.exist?(path_to_screenshot)
23
+ OnlyofficeLoggerHelper.log("upload screenshot: #{cloud_screenshot}")
24
+ return cloud_screenshot
25
+ rescue Errno::ENOENT => e
26
+ begin
27
+ @driver.save_screenshot(path_to_screenshot)
28
+ OnlyofficeLoggerHelper.log("Cant upload screenshot #{path_to_screenshot}. Error: #{e}")
29
+ rescue Errno::ENOENT => e
30
+ @driver.save_screenshot("tmp/#{File.basename(path_to_screenshot)}")
31
+ OnlyofficeLoggerHelper.log("Upload screenshot to tmp/#{File.basename(path_to_screenshot)}. Error: #{e}")
32
+ end
33
+ end
34
+ path_to_screenshot
35
+ end
36
+
37
+ def get_screenshot(path_to_screenshot = "#{screenshot_folder}/#{StringHelper.generate_random_string}.png")
38
+ screenshot_folder = File.dirname(path_to_screenshot)
39
+ FileUtils.mkdir_p(screenshot_folder) unless File.directory?(screenshot_folder)
40
+ @driver.save_screenshot(path_to_screenshot)
41
+ OnlyofficeLoggerHelper.log("get_screenshot(#{path_to_screenshot})")
42
+ end
43
+
44
+ def webdriver_screenshot(screenshot_name = SecureRandom.uuid)
45
+ begin
46
+ link = get_screenshot_and_upload("#{screenshot_folder}/#{screenshot_name}.png")
47
+ rescue Exception => e
48
+ OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Trying to get headless screenshot")
49
+ if @headless.headless_instance.nil?
50
+ system_screenshot("/tmp/#{screenshot_name}.png")
51
+ begin
52
+ link = amazon_s3_wrapper.upload_file_and_make_public("/tmp/#{screenshot_name}.png")
53
+ rescue Exception => e
54
+ OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. System screenshot #{link}")
55
+ end
56
+ else
57
+ @headless.take_screenshot("/tmp/#{screenshot_name}.png")
58
+ begin
59
+ link = amazon_s3_wrapper.upload_file_and_make_public("/tmp/#{screenshot_name}.png")
60
+ rescue Exception => e
61
+ OnlyofficeLoggerHelper.log("Error in get screenshot: #{e}. Headless screenshot #{link}")
62
+ end
63
+ end
64
+ end
65
+ "screenshot: #{link}"
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Webdriver style helper
5
+ module WebdriverStyleHelper
6
+ def get_style_parameter(xpath, parameter_name)
7
+ get_attribute(xpath, 'style').split(';').each do |current_param|
8
+ return /:\s(.*);?$/.match(current_param)[1] if current_param.include?(parameter_name)
9
+ end
10
+ nil
11
+ end
12
+
13
+ # Set style attribute value of element
14
+ # @param xpath [String] xpath to set
15
+ # @param attribute [String] style param to set
16
+ # @param attribute_value [String] attribute value to set
17
+ # @return [String] result of execution
18
+ def set_style_attribute(xpath, attribute, attribute_value)
19
+ execute_javascript("#{dom_element_by_xpath(xpath)}.style.#{attribute}=\"#{attribute_value}\"")
20
+ end
21
+
22
+ alias set_style_parameter set_style_attribute
23
+
24
+ def set_style_show_by_xpath(xpath, move_to_center = false)
25
+ execute_javascript("#{dom_element_by_xpath(xpath)}.style.display = 'block';")
26
+ return unless move_to_center
27
+
28
+ execute_javascript("#{dom_element_by_xpath(xpath)}.style.left = '410px';")
29
+ execute_javascript("#{dom_element_by_xpath(xpath)}.style.top = '260px';")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Module for work with tabs
5
+ module WebdriverTabHelper
6
+ TIMEOUT_WAIT_ELEMENT = 15
7
+
8
+ def new_tab
9
+ execute_javascript('window.open()')
10
+ end
11
+
12
+ def resize_tab(width, height)
13
+ @driver.manage.window.resize_to(width, height)
14
+ OnlyofficeLoggerHelper.log("Resize current window to #{width}x#{height}")
15
+ end
16
+
17
+ # @param after_switch_timeout [Integer] wait after switch to window
18
+ # non-zero to workaround bug with page load hanging up after switch
19
+ def switch_to_popup(after_switch_timeout: 3)
20
+ counter = 0
21
+ while tab_count < 2 && counter < 30
22
+ sleep 1
23
+ counter += 1
24
+ end
25
+ webdriver_error('switch_to_popup: Popup window not found') if counter >= 30
26
+ list_of_handlers = @driver.window_handles
27
+ last_window_handler = list_of_handlers.last
28
+ @driver.switch_to.window(last_window_handler)
29
+ sleep(after_switch_timeout) # Do not remove until problem with page loading stop resolved
30
+ end
31
+
32
+ # Get tab count
33
+ # @return [Integer] count of tabs in opened session
34
+ def tab_count
35
+ tab_count = @driver.window_handles.length
36
+ OnlyofficeLoggerHelper.log("tab_count: #{tab_count}")
37
+ tab_count
38
+ end
39
+
40
+ def choose_tab(tab_number)
41
+ counter = 0
42
+ while tab_count < 2 && counter < TIMEOUT_WAIT_ELEMENT
43
+ sleep 1
44
+ counter += 1
45
+ end
46
+ webdriver_error("choose_tab: Tab number = #{tab_number} not found") if counter >= TIMEOUT_WAIT_ELEMENT
47
+ @driver.switch_to.window(@driver.window_handles[tab_number - 1])
48
+ end
49
+
50
+ def switch_to_main_tab
51
+ @driver.switch_to.window(@driver.window_handles.first)
52
+ end
53
+
54
+ def close_tab
55
+ @driver.close
56
+ sleep 1
57
+ switch_to_main_tab
58
+ end
59
+
60
+ def close_popup_and_switch_to_main_tab
61
+ switch_to_popup
62
+ close_tab
63
+ switch_to_main_tab
64
+ end
65
+
66
+ def get_title_of_current_tab
67
+ @driver.title
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Class for helping with type stuff
5
+ module WebdriverTypeHelper
6
+ def type_text(element, text_to_send, clear_area = false)
7
+ element = get_element(element)
8
+ element.clear if clear_area
9
+ element.send_keys(text_to_send)
10
+ end
11
+
12
+ def type_text_and_select_it(element, text_to_send, clear_area = false)
13
+ type_text(element, text_to_send, clear_area)
14
+ text_to_send.length.times { element.send_keys %i[shift left] }
15
+ end
16
+
17
+ def type_to_locator(xpath_name, text_to_send, clear_content = true, click_on_it = false, by_action = false, by_element_send_key = false)
18
+ element = get_element(xpath_name)
19
+ if clear_content
20
+ begin
21
+ element.clear
22
+ rescue Exception => e
23
+ webdriver_error(e.class, "Error in element.clear #{e} for "\
24
+ "type_to_locator(#{xpath_name}, #{text_to_send}, "\
25
+ "#{clear_content}, #{click_on_it}, "\
26
+ "#{by_action}, #{by_element_send_key})")
27
+ end
28
+ end
29
+
30
+ if click_on_it
31
+ click_on_locator(xpath_name)
32
+ sleep 0.2
33
+ end
34
+
35
+ if (@browser != :chrome && !by_action) || by_element_send_key
36
+ element.send_keys text_to_send
37
+ elsif text_to_send != ''
38
+ if text_to_send.is_a?(String)
39
+ text_to_send.split(//).each do |symbol|
40
+ @driver.action.send_keys(symbol).perform
41
+ end
42
+ else
43
+ webdriver_bug_8179_workaround(text_to_send)
44
+ end
45
+ end
46
+ end
47
+
48
+ def type_to_input(xpath_name, text_to_send, clear_content = false, click_on_it = true)
49
+ element = get_element(xpath_name)
50
+ if element.nil?
51
+ webdriver_error(Selenium::WebDriver::Error::NoSuchElementError,
52
+ "type_to_input(#{xpath_name}, #{text_to_send}, "\
53
+ "#{clear_content}, #{click_on_it}): element not found")
54
+ end
55
+ element.clear if clear_content
56
+ sleep 0.2
57
+ if click_on_it
58
+ begin
59
+ element.click
60
+ rescue Exception => e
61
+ webdriver_error(e.class, "type_to_input(#{xpath_name}, #{text_to_send}, #{clear_content}, #{click_on_it}) error in 'element.click' error: #{e}")
62
+ end
63
+ sleep 0.2
64
+ end
65
+ element.send_keys text_to_send
66
+ end
67
+
68
+ def send_keys(xpath_name, text_to_send, by_action = true)
69
+ element = get_element(xpath_name)
70
+ @driver.action.click(element).perform if @browser == :firefox
71
+ if by_action
72
+ @driver.action.send_keys(element, text_to_send).perform
73
+ else
74
+ element.send_keys text_to_send
75
+ end
76
+ end
77
+
78
+ def send_keys_to_focused_elements(keys, count_of_times = 1)
79
+ command = @driver.action.send_keys(keys)
80
+ (count_of_times - 1).times { command = command.send_keys(keys) }
81
+ command.perform
82
+ end
83
+
84
+ def press_key(key)
85
+ @driver.action.send_keys(key).perform
86
+ end
87
+
88
+ def key_down(xpath, key)
89
+ @driver.action.key_down(get_element(xpath), key).perform
90
+ sleep(1) # for some reason quick key_down select text in control
91
+ end
92
+
93
+ def key_up(xpath, key)
94
+ @driver.action.key_up(get_element(xpath), key).perform
95
+ end
96
+
97
+ private
98
+
99
+ # Workaround for bug with typing with :control
100
+ # See https://github.com/SeleniumHQ/selenium/issues/8179
101
+ # for more details
102
+ def webdriver_bug_8179_workaround(text_to_send)
103
+ text_to_send = [text_to_send].flatten
104
+
105
+ key_modifiers = text_to_send.select { |i| i.is_a?(Symbol) }
106
+ letters = text_to_send - key_modifiers
107
+
108
+ key_modifiers.each do |modifier|
109
+ @driver.action.key_down(modifier).perform
110
+ end
111
+
112
+ letters.each do |letter|
113
+ @driver.action.send_keys(letter.to_s).perform
114
+ end
115
+
116
+ key_modifiers.each do |modifier|
117
+ @driver.action.key_up(modifier).perform
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeWebdriverWrapper
4
+ # Module for wokring with webdriver useragent
5
+ module WebdriverUserAgentHelper
6
+ USERAGENT_ANDROID_PHONE = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MDB08M) '\
7
+ 'AppleWebKit/537.36 (KHTML, like Gecko) '\
8
+ 'Chrome/51.0.2704.81 Mobile Safari/537.36'
9
+ USERAGENT_IPHONE = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) '\
10
+ 'AppleWebKit/601.1.46 (KHTML, like Gecko) '\
11
+ 'Version/9.0 Mobile/13F69 Safari/601.1'
12
+ USERAGENT_IPAD_AIR_2_SAFARI = 'Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) '\
13
+ 'AppleWebKit/602.1.50 (KHTML, like Gecko) '\
14
+ 'Version/10.0 Mobile/14A5346a Safari/602.1'
15
+ USERAGENT_NEXUS_10_CHROME = 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) '\
16
+ 'AppleWebKit/537.36 (KHTML, like Gecko) '\
17
+ 'Chrome/48.0.2564.23 Safari/537.36'
18
+
19
+ # @return [String] user agent string for current device
20
+ def user_agent_for_device
21
+ case @device
22
+ when :desktop_linux
23
+ nil
24
+ when :android_phone
25
+ USERAGENT_ANDROID_PHONE
26
+ when :iphone
27
+ USERAGENT_IPHONE
28
+ when :ipad_air_2_safari
29
+ USERAGENT_IPAD_AIR_2_SAFARI
30
+ when :nexus_10_chrome
31
+ USERAGENT_NEXUS_10_CHROME
32
+ else
33
+ webdriver_error("Unknown user device for starting browser: #{@device}")
34
+ end
35
+ end
36
+
37
+ # @param switches [Array, String] current switches of browser
38
+ # @return [String] user agent switch for browser
39
+ def add_useragent_to_switches(switches)
40
+ user_agent = user_agent_for_device
41
+ return switches.dup if user_agent.nil?
42
+
43
+ switches.dup << "--user-agent=#{user_agent}"
44
+ end
45
+
46
+ # @return [String] current user agent
47
+ def current_user_agent
48
+ execute_javascript('return navigator.userAgent;')
49
+ end
50
+ end
51
+ end
metadata ADDED
@@ -0,0 +1,278 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: onlyoffice_webdriver_wrapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
5
+ platform: ruby
6
+ authors:
7
+ - ONLYOFFICE
8
+ - Pavel Lobashov
9
+ - Oleg Nazarov
10
+ - Dmitry Rotaty
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2020-09-03 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: headless
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - '='
21
+ - !ruby/object:Gem::Version
22
+ version: 2.3.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.3.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: onlyoffice_file_helper
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - '='
35
+ - !ruby/object:Gem::Version
36
+ version: 0.3.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.3.0
44
+ - !ruby/object:Gem::Dependency
45
+ name: onlyoffice_logger_helper
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - '='
49
+ - !ruby/object:Gem::Version
50
+ version: 1.0.3
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - '='
56
+ - !ruby/object:Gem::Version
57
+ version: 1.0.3
58
+ - !ruby/object:Gem::Dependency
59
+ name: onlyoffice_s3_wrapper
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - '='
63
+ - !ruby/object:Gem::Version
64
+ version: 0.1.2
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - '='
70
+ - !ruby/object:Gem::Version
71
+ version: 0.1.2
72
+ - !ruby/object:Gem::Dependency
73
+ name: page-object
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '='
77
+ - !ruby/object:Gem::Version
78
+ version: 2.2.6
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 2.2.6
86
+ - !ruby/object:Gem::Dependency
87
+ name: selenium-webdriver
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - '='
91
+ - !ruby/object:Gem::Version
92
+ version: 3.142.7
93
+ type: :runtime
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '='
98
+ - !ruby/object:Gem::Version
99
+ version: 3.142.7
100
+ - !ruby/object:Gem::Dependency
101
+ name: watir
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '='
105
+ - !ruby/object:Gem::Version
106
+ version: 6.17.0
107
+ type: :runtime
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
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.9
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.9
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
+ - - '='
140
+ - !ruby/object:Gem::Version
141
+ version: 0.55.0
142
+ - !ruby/object:Gem::Dependency
143
+ name: rake
144
+ requirement: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - '='
147
+ - !ruby/object:Gem::Version
148
+ version: 13.0.1
149
+ type: :development
150
+ prerelease: false
151
+ version_requirements: !ruby/object:Gem::Requirement
152
+ requirements:
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
+ - - '='
161
+ - !ruby/object:Gem::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.7.1
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - '='
196
+ - !ruby/object:Gem::Version
197
+ version: 1.7.1
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
212
+ description: ONLYOFFICE Webdriver Wrapper Gem. Used in QA
213
+ email:
214
+ - shockwavenn@gmail.com
215
+ executables: []
216
+ extensions: []
217
+ extra_rdoc_files: []
218
+ files:
219
+ - lib/onlyoffice_webdriver_wrapper.rb
220
+ - lib/onlyoffice_webdriver_wrapper/dimensions.rb
221
+ - lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver
222
+ - lib/onlyoffice_webdriver_wrapper/helpers/bin/chromedriver_mac
223
+ - lib/onlyoffice_webdriver_wrapper/helpers/bin/geckodriver
224
+ - lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb
225
+ - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb
226
+ - lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list
227
+ - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb
228
+ - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_screenshot_patch.rb
229
+ - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_video_recorder.rb
230
+ - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/real_display_tools.rb
231
+ - lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/ruby_helper.rb
232
+ - lib/onlyoffice_webdriver_wrapper/helpers/os_helper.rb
233
+ - lib/onlyoffice_webdriver_wrapper/name.rb
234
+ - lib/onlyoffice_webdriver_wrapper/version.rb
235
+ - lib/onlyoffice_webdriver_wrapper/webdriver.rb
236
+ - lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb
237
+ - lib/onlyoffice_webdriver_wrapper/webdriver/wait_until_methods.rb
238
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_alert_helper.rb
239
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_attributes_helper.rb
240
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_info_helper.rb
241
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_log_helper.rb
242
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb
243
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_helper.rb
244
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb
245
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb
246
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_style_helper.rb
247
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_tab_helper.rb
248
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_type_helper.rb
249
+ - lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_user_agent_helper.rb
250
+ homepage: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper
251
+ licenses:
252
+ - AGPL-3.0
253
+ metadata:
254
+ bug_tracker_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper/issues
255
+ changelog_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper/blob/master/CHANGELOG.md
256
+ documentation_uri: https://www.rubydoc.info/gems/onlyoffice_webdriver_wrapper
257
+ homepage_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper
258
+ source_code_uri: https://github.com/onlyoffice-testing-robot/onlyoffice_webdriver_wrapper
259
+ post_install_message:
260
+ rdoc_options: []
261
+ require_paths:
262
+ - lib
263
+ required_ruby_version: !ruby/object:Gem::Requirement
264
+ requirements:
265
+ - - ">="
266
+ - !ruby/object:Gem::Version
267
+ version: '2.5'
268
+ required_rubygems_version: !ruby/object:Gem::Requirement
269
+ requirements:
270
+ - - ">="
271
+ - !ruby/object:Gem::Version
272
+ version: '0'
273
+ requirements: []
274
+ rubygems_version: 3.1.4
275
+ signing_key:
276
+ specification_version: 4
277
+ summary: ONLYOFFICE Webdriver Wrapper Gem
278
+ test_files: []