rudra 1.0.13 → 1.1.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 +4 -4
- data/lib/rudra.rb +74 -32
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b59cfa6497e4560d80369dc076df45638ec043abe069b5f6665e5749aefdef87
|
4
|
+
data.tar.gz: 51e97a957330ffce97411d9f3ad40e01a4be439cc677306d5507ae0136577beb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7984dccb05ea056c716dd533c5d4662e83ea8711c62a2fc3f02f95d0d7a795914d16c2ceacd2ef2cf1eff26374ae9c8ed795a14797186f696356f3c02c687bf
|
7
|
+
data.tar.gz: 4bfb07ee8abe3ce212c85ca19ab052fb134b47c42e225e7160ea6463795e425e22a594998d2e89365709a3d2b1495a2c5cbbb0894b64bd1bfc073a190519ef8f
|
data/lib/rudra.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
require 'selenium-webdriver'
|
2
|
-
require 'webdrivers
|
3
|
-
require 'webdrivers/geckodriver'
|
4
|
-
|
5
|
-
# Selenium::WebDriver::Chrome::Service.driver_path = './webdrivers/chromedriver'
|
6
|
-
# Selenium::WebDriver::Firefox::Service.driver_path = './webdrivers/geckodriver'
|
2
|
+
require 'webdrivers'
|
7
3
|
|
8
4
|
# Selenium IDE-like WebDriver based upon Ruby binding
|
9
5
|
# @author Aaron Chen
|
@@ -12,11 +8,16 @@ require 'webdrivers/geckodriver'
|
|
12
8
|
# of the chosen browser
|
13
9
|
# @attr_reader [String] install_dir The install directory of WebDrivers
|
14
10
|
# @attr_reader [String] locale The browser locale
|
11
|
+
# @attr_reader [Boolean] headless Headless mode for Google Chrome
|
12
|
+
# @attr_reader [String] window_size Chrome window size when headless
|
13
|
+
# @attr_reader [String] screen_dir The screenshot directory of save_screenshot
|
14
|
+
# @attr_reader [String] log_prefix Prefix for logging descriptions and methods
|
15
15
|
# @attr_reader [Integer] timeout The driver timeout
|
16
|
-
# @attr_reader [Boolean] verbose Verbose mode
|
16
|
+
# @attr_reader [Boolean] verbose Turn on/off Verbose mode
|
17
|
+
# @attr_reader [Boolean] silent Turn off Turn on/off descriptions
|
17
18
|
class Rudra
|
18
19
|
# Supported Browsers
|
19
|
-
BROWSERS = %i[chrome firefox safari].freeze
|
20
|
+
BROWSERS = %i[chrome firefox ie safari].freeze
|
20
21
|
|
21
22
|
# Element Finder Methods
|
22
23
|
HOWS = %i[
|
@@ -27,11 +28,13 @@ class Rudra
|
|
27
28
|
# Attributes
|
28
29
|
ATTRIBUTES = %i[
|
29
30
|
browser driver install_dir locale
|
30
|
-
headless
|
31
|
+
headless window_size screen_dir
|
32
|
+
log_prefix timeout verbose silent
|
31
33
|
].freeze
|
32
34
|
|
33
35
|
attr_reader :browser, :driver, :install_dir, :locale,
|
34
|
-
:headless, :
|
36
|
+
:headless, :window_size, :screen_dir,
|
37
|
+
:log_prefix, :timeout, :verbose, :silent
|
35
38
|
|
36
39
|
# Initialize an instance of Rudra
|
37
40
|
# @param [Hash] options the options to initialize Rudra
|
@@ -41,29 +44,27 @@ class Rudra
|
|
41
44
|
# directory of WebDrivers
|
42
45
|
# @option options [Symbol] :locale (:en) the browser locale
|
43
46
|
# @option options [Boolean] :headless (false) headless mode
|
44
|
-
# @option options [String] :
|
47
|
+
# @option options [String] :window_size ('1280,720') window size when headless
|
48
|
+
# @option options [String] :screen_dir ('./screens/') the location of screenshots
|
49
|
+
# @option options [String] :log_prefix (' - ') prefix for logging descriptions and methods
|
45
50
|
# @option options [Integer] :timeout (30) implicit_wait timeout
|
46
|
-
# @option options [Boolean] :verbose (
|
51
|
+
# @option options [Boolean] :verbose (false) Turn on/off verbose mode
|
52
|
+
# @option options [Boolean] :silent (false) Turn on/off descriptions
|
47
53
|
def initialize(options = {})
|
48
54
|
self.browser = options.fetch(:browser, :chrome)
|
49
55
|
self.install_dir = options.fetch(:install_dir, './webdrivers/')
|
50
56
|
self.locale = options.fetch(:locale, :en)
|
51
57
|
self.headless = options.fetch(:headless, false)
|
58
|
+
self.window_size = options.fetch(:window_size, '1280,720')
|
59
|
+
self.screen_dir = options.fetch(:screen_dir, './screens/')
|
52
60
|
self.log_prefix = options.fetch(:log_prefix, ' - ')
|
53
|
-
self.verbose = options.fetch(:verbose,
|
61
|
+
self.verbose = options.fetch(:verbose, false)
|
62
|
+
self.silent = options.fetch(:silent, false)
|
63
|
+
self.main_label = caller_locations(2, 1).first.label
|
54
64
|
|
55
65
|
initialize_driver
|
56
66
|
|
57
67
|
self.timeout = options.fetch(:timeout, 30)
|
58
|
-
|
59
|
-
@main_label = caller_locations(2, 1).first.label
|
60
|
-
@verbose && (
|
61
|
-
puts %(
|
62
|
-
============ Rudra ============
|
63
|
-
Browser: #{@browser}, Locale: #{@locale}
|
64
|
-
============ Log ============
|
65
|
-
).lines.map(&:strip).reject(&:empty?).join("\n")
|
66
|
-
)
|
67
68
|
end
|
68
69
|
|
69
70
|
#
|
@@ -104,6 +105,7 @@ class Rudra
|
|
104
105
|
end
|
105
106
|
|
106
107
|
# Send keys to an alert
|
108
|
+
# @param [String] keys keystrokes to send
|
107
109
|
def alert_send_keys(keys)
|
108
110
|
switch_to_alert.send_keys(keys)
|
109
111
|
end
|
@@ -208,7 +210,7 @@ class Rudra
|
|
208
210
|
|
209
211
|
# Maximize the current window
|
210
212
|
def maximize
|
211
|
-
driver.manage.window.maximize
|
213
|
+
driver.manage.window.maximize unless headless
|
212
214
|
end
|
213
215
|
|
214
216
|
# Maximize the current window to the size of the screen
|
@@ -266,6 +268,12 @@ class Rudra
|
|
266
268
|
driver.page_source
|
267
269
|
end
|
268
270
|
|
271
|
+
# Print description in the console
|
272
|
+
# @param [String] description description to show
|
273
|
+
def puts(description)
|
274
|
+
$stdout.puts "#{log_prefix}#{description.chomp}" unless silent
|
275
|
+
end
|
276
|
+
|
269
277
|
# Refresh the current pagef
|
270
278
|
def refresh
|
271
279
|
driver.navigate.refresh
|
@@ -278,11 +286,15 @@ class Rudra
|
|
278
286
|
driver.manage.window.resize_to(width, height)
|
279
287
|
end
|
280
288
|
|
281
|
-
# Save a PNG screenshot to
|
282
|
-
# @param [String]
|
283
|
-
def save_screenshot(
|
289
|
+
# Save a PNG screenshot to file
|
290
|
+
# @param [String] filename the filename of PNG screenshot
|
291
|
+
def save_screenshot(filename)
|
292
|
+
mkdir(@screen_dir) unless Dir.exist?(@screen_dir)
|
284
293
|
driver.save_screenshot(
|
285
|
-
|
294
|
+
File.join(
|
295
|
+
@screen_dir,
|
296
|
+
filename.end_with?('.png') ? filename : "#{filename}.png"
|
297
|
+
)
|
286
298
|
)
|
287
299
|
end
|
288
300
|
|
@@ -1066,9 +1078,7 @@ class Rudra
|
|
1066
1078
|
end
|
1067
1079
|
|
1068
1080
|
(instance_methods - superclass.instance_methods).map do |method_name|
|
1069
|
-
if private_method_defined?(method_name) || ATTRIBUTES.include?(method_name)
|
1070
|
-
next
|
1071
|
-
end
|
1081
|
+
next if private_method_defined?(method_name) || ATTRIBUTES.include?(method_name) || method_name == :puts
|
1072
1082
|
|
1073
1083
|
original_method = instance_method(method_name)
|
1074
1084
|
|
@@ -1080,6 +1090,9 @@ class Rudra
|
|
1080
1090
|
|
1081
1091
|
private
|
1082
1092
|
|
1093
|
+
attr_accessor :main_label
|
1094
|
+
attr_writer :silent, :window_size
|
1095
|
+
|
1083
1096
|
def browser=(brw)
|
1084
1097
|
unless BROWSERS.include?(brw)
|
1085
1098
|
browsers = BROWSERS.map { |b| ":#{b}" }.join(', ')
|
@@ -1105,6 +1118,10 @@ class Rudra
|
|
1105
1118
|
@headless = true?(mode)
|
1106
1119
|
end
|
1107
1120
|
|
1121
|
+
def screen_dir=(path)
|
1122
|
+
@screen_dir = File.join(path, @locale.to_s)
|
1123
|
+
end
|
1124
|
+
|
1108
1125
|
def log_prefix=(prefix)
|
1109
1126
|
@log_prefix = prefix.chomp
|
1110
1127
|
end
|
@@ -1127,8 +1144,12 @@ class Rudra
|
|
1127
1144
|
def initialize_driver
|
1128
1145
|
@driver = if browser == :chrome
|
1129
1146
|
Selenium::WebDriver.for(:chrome, options: chrome_options)
|
1147
|
+
# elsif browser == :edge
|
1148
|
+
# Selenium::WebDriver.for(:edge, options: edge_options)
|
1130
1149
|
elsif browser == :firefox
|
1131
1150
|
Selenium::WebDriver.for(:firefox, options: firefox_options)
|
1151
|
+
elsif browser == :ie
|
1152
|
+
Selenium::WebDriver.for(:ie, options: ie_options)
|
1132
1153
|
else
|
1133
1154
|
Selenium::WebDriver.for(:safari)
|
1134
1155
|
end
|
@@ -1137,11 +1158,22 @@ class Rudra
|
|
1137
1158
|
def chrome_options
|
1138
1159
|
options = Selenium::WebDriver::Chrome::Options.new
|
1139
1160
|
options.add_argument('--disable-notifications')
|
1140
|
-
|
1161
|
+
if headless
|
1162
|
+
options.add_argument('--headless')
|
1163
|
+
options.add_argument("--window-size=#{window_size}")
|
1164
|
+
end
|
1165
|
+
options.add_option(
|
1166
|
+
'excludeSwitches',
|
1167
|
+
%w[enable-automation enable-logging]
|
1168
|
+
)
|
1141
1169
|
options.add_preference('intl.accept_languages', locale)
|
1142
1170
|
options
|
1143
1171
|
end
|
1144
1172
|
|
1173
|
+
# def edge_options
|
1174
|
+
# Selenium::WebDriver::Edge::Options.new
|
1175
|
+
# end
|
1176
|
+
|
1145
1177
|
def firefox_options
|
1146
1178
|
options = Selenium::WebDriver::Firefox::Options.new
|
1147
1179
|
options.add_preference('intl.accept_languages', locale)
|
@@ -1149,6 +1181,16 @@ class Rudra
|
|
1149
1181
|
options
|
1150
1182
|
end
|
1151
1183
|
|
1184
|
+
def ie_options
|
1185
|
+
options = Selenium::WebDriver::IE::Options.new
|
1186
|
+
options.ensure_clean_session = true
|
1187
|
+
options.full_page_screenshot = true
|
1188
|
+
options.ignore_protected_mode_settings = true
|
1189
|
+
options.ignore_zoom_level = true
|
1190
|
+
options.native_events = false
|
1191
|
+
options
|
1192
|
+
end
|
1193
|
+
|
1152
1194
|
def parse_locator(locator)
|
1153
1195
|
unmatched, how, what = locator.split(/^([A-Za-z]+)=(.+)/)
|
1154
1196
|
|
@@ -1170,11 +1212,11 @@ class Rudra
|
|
1170
1212
|
end
|
1171
1213
|
|
1172
1214
|
def log(method_name, *args)
|
1173
|
-
return unless
|
1215
|
+
return unless verbose && caller_locations(2, 1).first.label == main_label
|
1174
1216
|
|
1175
1217
|
arguments = args.map(&:to_s).join(', ')
|
1176
1218
|
|
1177
|
-
puts
|
1219
|
+
puts log_prefix + (
|
1178
1220
|
arguments.empty? ? method_name.to_s : "#{method_name}(#{arguments})"
|
1179
1221
|
)
|
1180
1222
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rudra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Chen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.9.
|
19
|
+
version: 0.9.25
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.9.
|
26
|
+
version: 0.9.25
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: selenium-webdriver
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -48,24 +48,24 @@ dependencies:
|
|
48
48
|
name: webdrivers
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 4.3.0
|
54
51
|
- - "~>"
|
55
52
|
- !ruby/object:Gem::Version
|
56
|
-
version: '4.
|
53
|
+
version: '4.4'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 4.4.1
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: 4.3.0
|
64
61
|
- - "~>"
|
65
62
|
- !ruby/object:Gem::Version
|
66
|
-
version: '4.
|
63
|
+
version: '4.4'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 4.4.1
|
67
67
|
description: Selenium IDE alternative using selenium-webdriver
|
68
|
-
email: aaron@
|
68
|
+
email: aaron@611b.com
|
69
69
|
executables: []
|
70
70
|
extensions: []
|
71
71
|
extra_rdoc_files: []
|