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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7349efe2787f5c5a2234be89e0a933b9250a879b8b93eb9dba2de373a3c8a1b6
4
- data.tar.gz: 7ae2eaf291e8d58aa460b7ddc7099217c5a6fe5dddab0944b9624e0a27643c75
3
+ metadata.gz: 7dac605b82639fae12f3a0a8518170bef43aea5d0968f94ce302c13fd61a1a81
4
+ data.tar.gz: 1fa20578ca8933a45ec8f4923f19215041f9581b85de87c7c0cda4ca99470e90
5
5
  SHA512:
6
- metadata.gz: d1e0a0a2b688e941bc9867b2aad62d0c5f88316cb891217ff91093a90cea2ce114b1fd54b4c16f5a470626c1bd437f49d54bfef7b0653de3413c1e7c787f545e
7
- data.tar.gz: 77663ef3f73c5ed9ee489331aa94e28400ea051f84b7bc3b6a28e72503f2d61d95f07da3705d06addea6f69152f3b971dbf76ad65664c6e330f961e03628add3
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 "https://rubygems.org"
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 "rake", "~> 13.0"
9
- gem "rubocop", "~> 1.21"
10
- gem "selenium-webdriver"
8
+ gem 'logger'
9
+ gem 'rake', '~> 13.0'
10
+ gem 'rubocop', '~> 1.21'
11
+ gem 'selenium-webdriver'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SeleniumWebdriverHelper
4
- VERSION = "0.2.0"
4
+ VERSION = '0.4.0'
5
5
  end
@@ -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 "selenium-webdriver"
26
- require_relative "selenium_webdriver_helper/version"
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 initialize(driver)
36
- @driver = driver
36
+ def log_info(message)
37
+ logger = Logger.new('selenium.log')
38
+ logger.info(message)
37
39
  end
38
40
 
39
- def block_execution(retry_count = 3, &block)
40
- block.call
41
- rescue Selenium::WebDriver::Error => e
42
- logger.info "#{e.message} \n #{e.backtrace}"
43
- retry_count -= 1
44
- retry if retry_count.positive?
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 get_element(selector, custom_timeout: nil, driver2: nil)
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: (custom_timeout.nil? ? LONGER_WAIT : custom_timeout))
108
+ wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
64
109
  begin
65
- wait.until { (driver2.nil? ? @driver : driver2).find_element(how, what).displayed? }
66
- (driver2.nil? ? @driver : driver2).find_element(how, what)
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: nil, driver2: nil)
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: (custom_timeout.nil? ? LONGER_WAIT : custom_timeout))
121
+ wait = Selenium::WebDriver::Wait.new(timeout: custom_timeout)
77
122
  begin
78
- wait.until { (driver2.nil? ? @driver : driver2).find_elements(how, what)[0].displayed? }
79
- (driver2.nil? ? @driver : driver2).find_elements(how, what)
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 find_element_and_send_keys(selector, value)
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 wait_for_page_load
93
- wait = Selenium::WebDriver::Wait.new(LONG_WAIT)
94
- wait.until { execute_script("return document.readyState;") == "complete" }
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 visible_element(selector)
98
- element_list = get_elements(selector, false)
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: true, timeout: LONG_WAIT)
106
- wait = Selenium::WebDriver::Wait.new(timeout: 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, driver2: nil)
166
+ def wait_for_element(selector, driver = $driver)
115
167
  how, what = selectors_from_page_objects(selector)
116
168
  5.times do
117
- (driver2.nil? ? @driver : driver2).find_element(how, what)
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: LONG_WAIT)
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: (custom_timeout.nil? ? LONGER_WAIT : custom_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: LONG_WAIT)
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: (custom_timeout.nil? ? LONGER_WAIT : custom_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(driver2: nil)
143
- (driver2.nil? ? @driver : driver2).navigate.refresh
194
+ def page_refresh(driver = $driver)
195
+ driver.navigate.refresh
144
196
  end
145
197
 
146
- def page_refresh_js(driver2: nil)
147
- (driver2.nil? ? @driver : driver2).execute_script("location.reload(true);")
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.2.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-15 00:00:00.000000000 Z
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.0.9
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
@@ -1,13 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.5
3
-
4
- Style/StringLiterals:
5
- Enabled: true
6
- EnforcedStyle: double_quotes
7
-
8
- Style/StringLiteralsInInterpolation:
9
- Enabled: true
10
- EnforcedStyle: double_quotes
11
-
12
- Layout/LineLength:
13
- Max: 120
@@ -1,4 +0,0 @@
1
- module SeleniumWebdriverHelper
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end