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.
- checksums.yaml +7 -0
- data/lib/onlyoffice_webdriver_wrapper.rb +7 -0
- data/lib/onlyoffice_webdriver_wrapper/dimensions.rb +22 -0
- 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/bin/geckodriver +0 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/chrome_helper.rb +66 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper.rb +37 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/firefox_helper/save_to_disk_files.list +35 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper.rb +86 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_screenshot_patch.rb +18 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/headless_video_recorder.rb +36 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/real_display_tools.rb +21 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/headless_helper/ruby_helper.rb +16 -0
- data/lib/onlyoffice_webdriver_wrapper/helpers/os_helper.rb +11 -0
- data/lib/onlyoffice_webdriver_wrapper/name.rb +7 -0
- data/lib/onlyoffice_webdriver_wrapper/version.rb +7 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver.rb +424 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/click_methods.rb +125 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/wait_until_methods.rb +71 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_alert_helper.rb +25 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_attributes_helper.rb +63 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_info_helper.rb +22 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_browser_log_helper.rb +12 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_exceptions.rb +5 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_helper.rb +37 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_js_methods.rb +100 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_screenshot_helper.rb +68 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_style_helper.rb +32 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_tab_helper.rb +70 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_type_helper.rb +121 -0
- data/lib/onlyoffice_webdriver_wrapper/webdriver/webdriver_user_agent_helper.rb +51 -0
- 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: []
|