selenium_webdriver_helper 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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