selenium_webdriver_helper 0.2.0 → 0.4.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 +88 -36
- metadata +3 -5
- 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: 7dac605b82639fae12f3a0a8518170bef43aea5d0968f94ce302c13fd61a1a81
|
|
4
|
+
data.tar.gz: 1fa20578ca8933a45ec8f4923f19215041f9581b85de87c7c0cda4ca99470e90
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0667f442549dd8cbb0bd16ce7e214bd42634c062902c4b95a76dbf90f08ff4f4c08d7190f06e94098a20fdce077b8c001c28e509790a09cc369b4dc00440c4e5
|
|
7
|
+
data.tar.gz: c07a52ca2b7667ca7992b7d189fccb53390fe6b541a0b70d8186861dddc970b0ad2ca37075dc4b966403132bee2f118002f22b9fdc7579e7cdf3e4de84831d60
|
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,9 @@
|
|
|
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/constants'
|
|
27
28
|
|
|
28
29
|
# below is the code to make life easier as it already has selenium webdriver methods defined
|
|
29
30
|
module SeleniumWebdriverHelper
|
|
@@ -32,16 +33,19 @@ module SeleniumWebdriverHelper
|
|
|
32
33
|
|
|
33
34
|
attr_accessor :driver
|
|
34
35
|
|
|
35
|
-
def
|
|
36
|
-
|
|
36
|
+
def log_info(message)
|
|
37
|
+
logger = Logger.new('selenium.log')
|
|
38
|
+
logger.info(message)
|
|
37
39
|
end
|
|
38
40
|
|
|
39
|
-
def
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
def log_debug(message)
|
|
42
|
+
logger = Logger.new('selenium.log')
|
|
43
|
+
logger.debug(message)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def log_error(message)
|
|
47
|
+
logger = Logger.new('selenium.log')
|
|
48
|
+
logger.error(message)
|
|
45
49
|
end
|
|
46
50
|
|
|
47
51
|
def selectors_from_page_objects(page_object, value = nil)
|
|
@@ -57,53 +61,101 @@ module SeleniumWebdriverHelper
|
|
|
57
61
|
output
|
|
58
62
|
end
|
|
59
63
|
|
|
60
|
-
def
|
|
64
|
+
def block_execution(retry_count = 3, &block)
|
|
65
|
+
block.call
|
|
66
|
+
rescue Selenium::WebDriver::Error => e
|
|
67
|
+
logger.info "#{e.message} \n #{e.backtrace}"
|
|
68
|
+
retry_count -= 1
|
|
69
|
+
retry if retry_count.positive?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def initialize_driver(driver, implicit_wait = LONGER_WAIT)
|
|
73
|
+
$driver = driver
|
|
74
|
+
$driver.manage.timeouts.implicit_wait = implicit_wait
|
|
75
|
+
$wait = Selenium::WebDriver::Wait.new(timeout: implicit_wait) # seconds
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def execute_script(js, *args)
|
|
79
|
+
$driver.execute_script(js, *args)
|
|
80
|
+
rescue Selenium::WebDriver::Error::UnsupportedOperationError => e
|
|
81
|
+
log_error("[Exception] underlying webdriver instance does not support javascript #{e.message}")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def wait_for_page_load(custom_timeout = SHORTER_WAIT)
|
|
85
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
|
86
|
+
wait.until { execute_script('return document.readyState;') == 'complete' }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def get_url(url, driver = $driver)
|
|
90
|
+
driver.get(url)
|
|
91
|
+
# wait_for_page_load
|
|
92
|
+
log_info("visited #{url}")
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def maximize_window(driver = $driver)
|
|
96
|
+
driver.manage.window.maximize
|
|
97
|
+
log_info('window maximized')
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def save_screenshot(path, driver = $driver)
|
|
101
|
+
driver.save_screenshot(path)
|
|
102
|
+
log_info("screenshot captured and saved at path #{path}")
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def get_element(selector, custom_timeout = LONGER_WAIT, driver = $driver)
|
|
61
106
|
how, what = selectors_from_page_objects(selector)
|
|
62
107
|
block_execution(3) do
|
|
63
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
|
108
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
|
64
109
|
begin
|
|
65
|
-
wait.until {
|
|
66
|
-
|
|
110
|
+
wait.until { driver.find_element(how, what).displayed? }
|
|
111
|
+
driver.find_element(how, what)
|
|
67
112
|
rescue Selenium::WebDriver::Error::NoSuchElementError => e
|
|
68
113
|
raise "Exception #{e.message} \n #{e.backtrace}"
|
|
69
114
|
end
|
|
70
115
|
end
|
|
71
116
|
end
|
|
72
117
|
|
|
73
|
-
def get_elements(selector, custom_timeout
|
|
118
|
+
def get_elements(selector, custom_timeout = LONGER_WAIT, driver = $driver)
|
|
74
119
|
how, what = selectors_from_page_objects(selector)
|
|
75
120
|
block_execution(3) do
|
|
76
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
|
121
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
|
77
122
|
begin
|
|
78
|
-
wait.until {
|
|
79
|
-
|
|
123
|
+
wait.until { driver.find_elements(how, what)[0].displayed? }
|
|
124
|
+
driver.find_elements(how, what)
|
|
80
125
|
rescue Selenium::WebDriver::Error::NoSuchElementError => e
|
|
81
126
|
raise "Exception #{e.message} \n #{e.backtrace}"
|
|
82
127
|
end
|
|
83
128
|
end
|
|
84
129
|
end
|
|
85
130
|
|
|
86
|
-
def
|
|
131
|
+
def element_text(selector, custom_timeout = LONGER_WAIT, driver = $driver)
|
|
132
|
+
block_execution(3) do
|
|
133
|
+
get_element(selector, custom_timeout, driver).text
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def find_element_and_send_keys(selector, value, driver = $driver)
|
|
87
138
|
block_execution(3) do
|
|
88
139
|
get_element(selector).send_keys(value)
|
|
89
140
|
end
|
|
90
141
|
end
|
|
91
142
|
|
|
92
|
-
def
|
|
93
|
-
|
|
94
|
-
|
|
143
|
+
def element_click(selector, custom_timeout = LONGER_WAIT, driver = $driver)
|
|
144
|
+
block_execution(3) do
|
|
145
|
+
get_element(selector, custom_timeout, driver).click
|
|
146
|
+
end
|
|
95
147
|
end
|
|
96
148
|
|
|
97
|
-
def
|
|
98
|
-
element_list = get_elements(selector
|
|
149
|
+
def element_displayed?(selector)
|
|
150
|
+
element_list = get_elements(selector)
|
|
99
151
|
element_list.each do |element|
|
|
100
152
|
return element if element.displayed?
|
|
101
153
|
end
|
|
102
154
|
raise "No visible element found for selector - #{selector}"
|
|
103
155
|
end
|
|
104
156
|
|
|
105
|
-
def wait_for_element_visibility(selector_or_element, visibility
|
|
106
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
|
157
|
+
def wait_for_element_visibility(selector_or_element, visibility = true, custom_timeout = LONG_WAIT)
|
|
158
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
|
107
159
|
if !(selector_or_element.is_a?(Array) || selector_or_element.is_a?(Hash))
|
|
108
160
|
wait.until { selector_or_element.displayed? == visibility }
|
|
109
161
|
else
|
|
@@ -111,40 +163,40 @@ module SeleniumWebdriverHelper
|
|
|
111
163
|
end
|
|
112
164
|
end
|
|
113
165
|
|
|
114
|
-
def wait_for_element(selector,
|
|
166
|
+
def wait_for_element(selector, driver = $driver)
|
|
115
167
|
how, what = selectors_from_page_objects(selector)
|
|
116
168
|
5.times do
|
|
117
|
-
|
|
169
|
+
driver.find_element(how, what)
|
|
118
170
|
break
|
|
119
171
|
rescue Selenium::WebDriver::Error::NoSuchElementError => e
|
|
120
172
|
logger.info "[Exception] Retrying to find element due to exception #{e.message}"
|
|
121
173
|
end
|
|
122
174
|
end
|
|
123
175
|
|
|
124
|
-
def get_child_element(parent_element, selector, custom_timeout
|
|
176
|
+
def get_child_element(parent_element, selector, custom_timeout = LONG_WAIT)
|
|
125
177
|
how, what = selectors_from_page_objects(selector)
|
|
126
178
|
block_execution(3) do
|
|
127
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
|
179
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
|
128
180
|
wait.until { parent_element.find_element(how, what).displayed? }
|
|
129
181
|
parent_element.find_element(how, what)
|
|
130
182
|
end
|
|
131
183
|
end
|
|
132
184
|
|
|
133
|
-
def get_child_elements(parent_element, selector, custom_timeout
|
|
185
|
+
def get_child_elements(parent_element, selector, custom_timeout = LONG_WAIT)
|
|
134
186
|
how, what = selectors_from_page_objects(selector)
|
|
135
187
|
block_execution(3) do
|
|
136
|
-
wait = Selenium::WebDriver::Wait.new(timeout:
|
|
188
|
+
wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
|
|
137
189
|
wait.until { parent_element.find_elements(how, what)[0].displayed? }
|
|
138
190
|
parent_element.find_elements(how, what)
|
|
139
191
|
end
|
|
140
192
|
end
|
|
141
193
|
|
|
142
|
-
def page_refresh(
|
|
143
|
-
|
|
194
|
+
def page_refresh(driver = $driver)
|
|
195
|
+
driver.navigate.refresh
|
|
144
196
|
end
|
|
145
197
|
|
|
146
|
-
def page_refresh_js
|
|
147
|
-
|
|
198
|
+
def page_refresh_js
|
|
199
|
+
execute_script('location.reload(true);')
|
|
148
200
|
end
|
|
149
201
|
|
|
150
202
|
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.4.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
|
|
@@ -49,7 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
49
47
|
- !ruby/object:Gem::Version
|
|
50
48
|
version: '0'
|
|
51
49
|
requirements: []
|
|
52
|
-
rubygems_version: 3.
|
|
50
|
+
rubygems_version: 3.2.3
|
|
53
51
|
signing_key:
|
|
54
52
|
specification_version: 4
|
|
55
53
|
summary: Write a short summary, because RubyGems requires one.
|
data/.rubocop.yml
DELETED