selenium_webdriver_helper 0.2.0 → 0.3.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/Gemfile +5 -4
- data/lib/selenium_webdriver_helper/version.rb +1 -1
- data/lib/selenium_webdriver_helper.rb +87 -34
- metadata +2 -4
- data/.rubocop.yml +0 -13
- data/sig/selenium_webdriver_helper.rbs +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d124968bcf54480e5dc80cc2e9c609b743e7777ba38e0638d28d264766ea2110
|
4
|
+
data.tar.gz: 3e2a846de538ccc648bc2128c2a966fe163aa86ee72829b745942192e8bf7a2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60e09a27671c024c9c27fee727d3caddfaba6496247041017ae34d1066c122c33cec38b4732b079aba6207c928f341f1a8cf662924abdeb2d14722498cfa3e0d
|
7
|
+
data.tar.gz: dd62e3d4632a50fb3f17d2587da02d1c42c911f82b0490de9ec7501aab1ab5af325b19e666a161286a4267551caecaea6a85813e0f70631ade259f17de055f27
|
data/Gemfile
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
source
|
3
|
+
source 'https://rubygems.org'
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in selenium_webdriver_helper.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem
|
8
|
+
gem 'logger'
|
9
|
+
gem 'rake', '~> 13.0'
|
10
|
+
gem 'rubocop', '~> 1.21'
|
11
|
+
gem 'selenium-webdriver'
|
@@ -22,8 +22,10 @@
|
|
22
22
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
23
|
# THE SOFTWARE.
|
24
24
|
|
25
|
-
require
|
26
|
-
|
25
|
+
require 'selenium-webdriver'
|
26
|
+
require 'logger'
|
27
|
+
require_relative 'selenium_webdriver_helper/version'
|
28
|
+
require_relative 'selenium_webdriver_helper/constants'
|
27
29
|
|
28
30
|
# below is the code to make life easier as it already has selenium webdriver methods defined
|
29
31
|
module SeleniumWebdriverHelper
|
@@ -32,16 +34,19 @@ module SeleniumWebdriverHelper
|
|
32
34
|
|
33
35
|
attr_accessor :driver
|
34
36
|
|
35
|
-
def
|
36
|
-
|
37
|
+
def log_info(message)
|
38
|
+
logger = Logger.new('selenium.log')
|
39
|
+
logger.info(message)
|
37
40
|
end
|
38
41
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
def log_debug(message)
|
43
|
+
logger = Logger.new('selenium.log')
|
44
|
+
logger.debug(message)
|
45
|
+
end
|
46
|
+
|
47
|
+
def log_error(message)
|
48
|
+
logger = Logger.new('selenium.log')
|
49
|
+
logger.error(message)
|
45
50
|
end
|
46
51
|
|
47
52
|
def selectors_from_page_objects(page_object, value = nil)
|
@@ -57,41 +62,89 @@ module SeleniumWebdriverHelper
|
|
57
62
|
output
|
58
63
|
end
|
59
64
|
|
60
|
-
def
|
65
|
+
def block_execution(retry_count = 3, &block)
|
66
|
+
block.call
|
67
|
+
rescue Selenium::WebDriver::Error => e
|
68
|
+
logger.info "#{e.message} \n #{e.backtrace}"
|
69
|
+
retry_count -= 1
|
70
|
+
retry if retry_count.positive?
|
71
|
+
end
|
72
|
+
|
73
|
+
def initialize_driver(driver, implicit_wait = LONGER_WAIT)
|
74
|
+
$driver = driver
|
75
|
+
$driver.manage.timeouts.implicit_wait = implicit_wait
|
76
|
+
$wait = Selenium::WebDriver::Wait.new(timeout: implicit_wait) # seconds
|
77
|
+
end
|
78
|
+
|
79
|
+
def execute_script(js, *args)
|
80
|
+
$driver.execute_script(js, *args)
|
81
|
+
rescue Selenium::WebDriver::Error::UnsupportedOperationError => e
|
82
|
+
log_error("[Exception] underlying webdriver instance does not support javascript #{e.message}")
|
83
|
+
end
|
84
|
+
|
85
|
+
def wait_for_page_load(custom_timeout = SHORTER_WAIT)
|
86
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
87
|
+
wait.until { execute_script('return document.readyState;') == 'complete' }
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_url(url, driver = $driver)
|
91
|
+
driver.get(url)
|
92
|
+
wait_for_page_load
|
93
|
+
log_info("visited #{url}")
|
94
|
+
end
|
95
|
+
|
96
|
+
def maximize_window(driver = $driver)
|
97
|
+
driver.manage.window.maximize
|
98
|
+
log_info('window maximized')
|
99
|
+
end
|
100
|
+
|
101
|
+
def save_screenshot(path, driver = $driver)
|
102
|
+
driver.save_screenshot(path)
|
103
|
+
log_info("screenshot captured and saved at path #{path}")
|
104
|
+
end
|
105
|
+
|
106
|
+
def get_element(selector, custom_timeout = LONGER_WAIT, driver = $driver)
|
61
107
|
how, what = selectors_from_page_objects(selector)
|
62
108
|
block_execution(3) do
|
63
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
109
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
64
110
|
begin
|
65
|
-
wait.until {
|
66
|
-
|
111
|
+
wait.until { driver.find_element(how, what).displayed? }
|
112
|
+
driver.find_element(how, what)
|
67
113
|
rescue Selenium::WebDriver::Error::NoSuchElementError => e
|
68
114
|
raise "Exception #{e.message} \n #{e.backtrace}"
|
69
115
|
end
|
70
116
|
end
|
71
117
|
end
|
72
118
|
|
73
|
-
def get_elements(selector, custom_timeout:
|
119
|
+
def get_elements(selector, custom_timeout: LONGER_WAIT, driver: $driver)
|
74
120
|
how, what = selectors_from_page_objects(selector)
|
75
121
|
block_execution(3) do
|
76
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
122
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
77
123
|
begin
|
78
|
-
wait.until {
|
79
|
-
|
124
|
+
wait.until { driver.find_elements(how, what)[0].displayed? }
|
125
|
+
driver.find_elements(how, what)
|
80
126
|
rescue Selenium::WebDriver::Error::NoSuchElementError => e
|
81
127
|
raise "Exception #{e.message} \n #{e.backtrace}"
|
82
128
|
end
|
83
129
|
end
|
84
130
|
end
|
85
131
|
|
86
|
-
def
|
132
|
+
def element_text(selector, custom_timeout = LONGER_WAIT, driver = $driver)
|
133
|
+
block_execution(3) do
|
134
|
+
get_element(selector, custom_timeout, driver).text
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def find_element_and_send_keys(selector, value, driver = $driver)
|
87
139
|
block_execution(3) do
|
88
140
|
get_element(selector).send_keys(value)
|
89
141
|
end
|
90
142
|
end
|
91
143
|
|
92
|
-
def
|
93
|
-
|
94
|
-
|
144
|
+
def element_click(selector, custom_timeout = LONGER_WAIT, driver = $driver)
|
145
|
+
block_execution(3) do
|
146
|
+
get_element(selector, custom_timeout, driver).click
|
147
|
+
end
|
95
148
|
end
|
96
149
|
|
97
150
|
def visible_element(selector)
|
@@ -102,8 +155,8 @@ module SeleniumWebdriverHelper
|
|
102
155
|
raise "No visible element found for selector - #{selector}"
|
103
156
|
end
|
104
157
|
|
105
|
-
def wait_for_element_visibility(selector_or_element, visibility
|
106
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
158
|
+
def wait_for_element_visibility(selector_or_element, visibility = true, custom_timeout = LONG_WAIT)
|
159
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
107
160
|
if !(selector_or_element.is_a?(Array) || selector_or_element.is_a?(Hash))
|
108
161
|
wait.until { selector_or_element.displayed? == visibility }
|
109
162
|
else
|
@@ -111,40 +164,40 @@ module SeleniumWebdriverHelper
|
|
111
164
|
end
|
112
165
|
end
|
113
166
|
|
114
|
-
def wait_for_element(selector,
|
167
|
+
def wait_for_element(selector, driver = $driver)
|
115
168
|
how, what = selectors_from_page_objects(selector)
|
116
169
|
5.times do
|
117
|
-
|
170
|
+
driver.find_element(how, what)
|
118
171
|
break
|
119
172
|
rescue Selenium::WebDriver::Error::NoSuchElementError => e
|
120
173
|
logger.info "[Exception] Retrying to find element due to exception #{e.message}"
|
121
174
|
end
|
122
175
|
end
|
123
176
|
|
124
|
-
def get_child_element(parent_element, selector, custom_timeout
|
177
|
+
def get_child_element(parent_element, selector, custom_timeout = LONG_WAIT)
|
125
178
|
how, what = selectors_from_page_objects(selector)
|
126
179
|
block_execution(3) do
|
127
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
180
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
128
181
|
wait.until { parent_element.find_element(how, what).displayed? }
|
129
182
|
parent_element.find_element(how, what)
|
130
183
|
end
|
131
184
|
end
|
132
185
|
|
133
|
-
def get_child_elements(parent_element, selector, custom_timeout
|
186
|
+
def get_child_elements(parent_element, selector, custom_timeout = LONG_WAIT)
|
134
187
|
how, what = selectors_from_page_objects(selector)
|
135
188
|
block_execution(3) do
|
136
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
189
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
137
190
|
wait.until { parent_element.find_elements(how, what)[0].displayed? }
|
138
191
|
parent_element.find_elements(how, what)
|
139
192
|
end
|
140
193
|
end
|
141
194
|
|
142
|
-
def page_refresh(
|
143
|
-
|
195
|
+
def page_refresh(driver = $driver)
|
196
|
+
driver.navigate.refresh
|
144
197
|
end
|
145
198
|
|
146
|
-
def page_refresh_js
|
147
|
-
|
199
|
+
def page_refresh_js
|
200
|
+
execute_script('location.reload(true);')
|
148
201
|
end
|
149
202
|
|
150
203
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium_webdriver_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- amit-singh-bisht
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Write a longer description or delete this line.
|
14
14
|
email:
|
@@ -17,7 +17,6 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
-
- ".rubocop.yml"
|
21
20
|
- Gemfile
|
22
21
|
- LICENSE.txt
|
23
22
|
- README.md
|
@@ -25,7 +24,6 @@ files:
|
|
25
24
|
- lib/selenium_webdriver_helper.rb
|
26
25
|
- lib/selenium_webdriver_helper/constants.rb
|
27
26
|
- lib/selenium_webdriver_helper/version.rb
|
28
|
-
- sig/selenium_webdriver_helper.rbs
|
29
27
|
homepage: https://github.com/amit-singh-bisht/selenium_webdriver_helper_ruby
|
30
28
|
licenses:
|
31
29
|
- MIT
|
data/.rubocop.yml
DELETED