teber-library 0.1.1
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 +7 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +93 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +35 -0
- data/LICENSE.txt +674 -0
- data/README.md +59 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/teber.rb +9 -0
- data/lib/teber/Teber-Library-Gem.png +0 -0
- data/lib/teber/driver.rb +301 -0
- data/lib/teber/locator.rb +200 -0
- data/lib/teber/version.rb +3 -0
- data/lib/teber/wait.rb +30 -0
- data/teber-library.gemspec +34 -0
- metadata +108 -0
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# Teber
|
2
|
+
|
3
|
+
Teber Library gem is to have all the common methods that will be used in functional UI automation.
|
4
|
+
|
5
|
+
[](LICENSE)
|
6
|
+
[](https://www.ruby-lang.org/en/)
|
7
|
+
[](https://rubygems.org/gems/teber-library)
|
8
|
+
[]( https://stackoverflow.com/users/10505289/naresh-sekar )
|
9
|
+
[](CONTRIBUTING.md)
|
10
|
+
[](nareshnavinash@gmail.com)
|
11
|
+
|
12
|
+
|
13
|
+

|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add this line to your application's Gemfile:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
gem 'teber-library'
|
21
|
+
```
|
22
|
+
|
23
|
+
And then execute:
|
24
|
+
|
25
|
+
$ bundle
|
26
|
+
|
27
|
+
Or install it yourself as:
|
28
|
+
|
29
|
+
$ gem install teber-library
|
30
|
+
|
31
|
+
## Usage
|
32
|
+
|
33
|
+
This gem is to replace the library methods in [Teber-Ruby](https://github.com/nareshnavinash/Teber-Ruby) framework. This allows us to share the methods among different teams and completely ignore the repetitive work. For more details on Page object model for functional UI automation verify [Teber Ruby Documentation](https://nareshnavinash.github.io/Teber-Ruby/) page.
|
34
|
+
|
35
|
+
### Adding new methods
|
36
|
+
|
37
|
+
Add all the new methods inside /lib/teber/ path with the module name as 'Teber'. If added a new file, include the newly added file to the /lib/teber/teber.rb so that those methods will be available when we use the gem.
|
38
|
+
|
39
|
+
## Development
|
40
|
+
|
41
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
42
|
+
|
43
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
44
|
+
|
45
|
+
## Contributing
|
46
|
+
|
47
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/nareshnavinash/Teber-Gem/. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
48
|
+
|
49
|
+
## Authors
|
50
|
+
|
51
|
+
* **[Naresh Sekar](https://github.com/nareshnavinash)**
|
52
|
+
|
53
|
+
## License
|
54
|
+
|
55
|
+
The gem is available as open source under the terms of the [GPL-3.0 License](https://opensource.org/licenses/GPL-3.0).
|
56
|
+
|
57
|
+
## Code of Conduct
|
58
|
+
|
59
|
+
Everyone interacting in the Teber project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/nareshnavinash/Teber-Gem/blob/master/CODE_OF_CONDUCT.md).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "teber"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/lib/teber.rb
ADDED
Binary file
|
data/lib/teber/driver.rb
ADDED
@@ -0,0 +1,301 @@
|
|
1
|
+
module Teber
|
2
|
+
class Driver
|
3
|
+
attr_accessor :driver
|
4
|
+
$focus_driver = nil
|
5
|
+
@driver = nil
|
6
|
+
@main_window = nil
|
7
|
+
@click_exception_count = nil
|
8
|
+
@@drivers = []
|
9
|
+
@@drivers_with_names = {}
|
10
|
+
|
11
|
+
def initialize(driver_name = "Driver", browser = $conf["browser"])
|
12
|
+
begin
|
13
|
+
start(driver_name,browser)
|
14
|
+
puts "#{driver_name} is initialized"
|
15
|
+
rescue Exception => e
|
16
|
+
puts "#{driver_name} is failed to initialize \n\n #{e.backtrace}\n\nRetrying to initialize #{driver_name}"
|
17
|
+
start(driver_name,browser)
|
18
|
+
puts "#{driver_name} is initialized after an exception"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
##############################
|
23
|
+
# Custom methods of driver #
|
24
|
+
##############################
|
25
|
+
|
26
|
+
def start(driver_name, browser)
|
27
|
+
|
28
|
+
case browser
|
29
|
+
|
30
|
+
when 'chrome'
|
31
|
+
options = Selenium::WebDriver::Chrome::Options.new
|
32
|
+
if ENV['MODE'] == "headless" or $conf["mode"] == "headless"
|
33
|
+
switches = ["disable-infobars", "disable-gpu", "disable-dev-shm-usage", "no-sandbox", "headless"]
|
34
|
+
else
|
35
|
+
switches = ["disable-infobars", "disable-gpu", "disable-dev-shm-usage", "no-sandbox"]
|
36
|
+
end
|
37
|
+
switches.map { |k| options.add_argument(k) }
|
38
|
+
@driver = Selenium::WebDriver.for(:chrome, options: options)
|
39
|
+
@driver.manage.timeouts.implicit_wait = $conf["implicit_wait"]
|
40
|
+
|
41
|
+
when 'firefox', 'ff'
|
42
|
+
# to be added
|
43
|
+
|
44
|
+
when 'ie', 'internet_explorer'
|
45
|
+
# to be added
|
46
|
+
|
47
|
+
when 'edge'
|
48
|
+
# to be added
|
49
|
+
|
50
|
+
when 'safari'
|
51
|
+
# to be added
|
52
|
+
|
53
|
+
else
|
54
|
+
raise ArgumentError, "Specify a proper browser while initiating a driver \n \n#{browser.inspect}"
|
55
|
+
end
|
56
|
+
|
57
|
+
target_size = Selenium::WebDriver::Dimension.new(1200, 700)
|
58
|
+
@driver.manage.window.size = target_size
|
59
|
+
@click_exception_count=0
|
60
|
+
@@drivers.push(self)
|
61
|
+
@@drivers_with_names[self] = "#{driver_name}"
|
62
|
+
$focus_driver = self
|
63
|
+
puts "#{driver_name} - #{self}"
|
64
|
+
return self
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_to_allure_env(params)
|
68
|
+
location = File.join("#{Pathname.pwd}","reports/allure/environment.properties")
|
69
|
+
file = File.open(location,"a")
|
70
|
+
file.puts "#{params}\n"
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.direct_add_to_allure_env(params)
|
74
|
+
location = File.join("#{Pathname.pwd}","reports/allure/environment.properties")
|
75
|
+
file = File.open(location,"a")
|
76
|
+
file.puts "#{params}\n"
|
77
|
+
end
|
78
|
+
|
79
|
+
def get(url)
|
80
|
+
$focus_driver = self
|
81
|
+
@driver.get(url)
|
82
|
+
add_to_allure_env("URL = #{url}")
|
83
|
+
puts "#{$focus_driver} loaded with - #{url}"
|
84
|
+
end
|
85
|
+
|
86
|
+
def refresh
|
87
|
+
$focus_driver = self
|
88
|
+
navigate.refresh
|
89
|
+
puts "#{$focus_driver} is refreshed"
|
90
|
+
end
|
91
|
+
|
92
|
+
def find_element(locator)
|
93
|
+
$focus_driver = self
|
94
|
+
TestBdd::Wait.wait_for_element(locator)
|
95
|
+
return @driver.find_element(locator.how,locator.what)
|
96
|
+
end
|
97
|
+
|
98
|
+
def find_elements(locator)
|
99
|
+
$focus_driver = self
|
100
|
+
return @driver.find_elements(locator.how,locator.what)
|
101
|
+
end
|
102
|
+
|
103
|
+
def mouse_over(locator,index=1)
|
104
|
+
$focus_driver = self
|
105
|
+
element=find_elements(locator)[index-1]
|
106
|
+
@driver.action.move_to(element).perform
|
107
|
+
puts "mouse over for the element - #{locator.how} => #{locator.what} is done"
|
108
|
+
end
|
109
|
+
|
110
|
+
def mouse
|
111
|
+
$focus_driver = self
|
112
|
+
return @driver.mouse
|
113
|
+
end
|
114
|
+
|
115
|
+
def action
|
116
|
+
$focus_driver = self
|
117
|
+
return @driver.action
|
118
|
+
end
|
119
|
+
|
120
|
+
def move_and_click(locator)
|
121
|
+
$focus_driver = self
|
122
|
+
ele=find_element(locator)
|
123
|
+
@driver.action.move_to(ele).click.perform
|
124
|
+
puts "Mouse over the locator and then click for - #{locator.how} => #{locator.what} is done"
|
125
|
+
end
|
126
|
+
|
127
|
+
def browser
|
128
|
+
$focus_driver = self
|
129
|
+
@driver.browser
|
130
|
+
end
|
131
|
+
|
132
|
+
def capabilities
|
133
|
+
$focus_driver = self
|
134
|
+
@driver.capabilities
|
135
|
+
end
|
136
|
+
|
137
|
+
def current_url
|
138
|
+
$focus_driver = self
|
139
|
+
@driver.current_url
|
140
|
+
end
|
141
|
+
|
142
|
+
def execute_async_script(script, *args)
|
143
|
+
$focus_driver = self
|
144
|
+
@driver.execute_async_script(script, *args)
|
145
|
+
end
|
146
|
+
|
147
|
+
def execute_script(script, *args)
|
148
|
+
$focus_driver = self
|
149
|
+
@driver.execute_script(script, *args)
|
150
|
+
end
|
151
|
+
|
152
|
+
def inspect
|
153
|
+
$focus_driver = self
|
154
|
+
@driver.inspect
|
155
|
+
end
|
156
|
+
|
157
|
+
def manage
|
158
|
+
$focus_driver = self
|
159
|
+
@driver.manage
|
160
|
+
end
|
161
|
+
|
162
|
+
def navigate
|
163
|
+
$focus_driver = self
|
164
|
+
@driver.navigate
|
165
|
+
end
|
166
|
+
|
167
|
+
def page_source
|
168
|
+
$focus_driver = self
|
169
|
+
@driver.page_source
|
170
|
+
end
|
171
|
+
|
172
|
+
def body_text
|
173
|
+
$focus_driver = self
|
174
|
+
@driver.find_element(:css, 'body').text
|
175
|
+
end
|
176
|
+
|
177
|
+
def save_screenshot(file_name = nil)
|
178
|
+
$focus_driver = self
|
179
|
+
file_name = "#{Pathname.pwd}/#{$conf['screenshot_location']}/#{Time.new.strftime("%Y-%m-%d-%H-%M-%S-%L-%N")}.png" if file_name.nil?
|
180
|
+
puts "#{$focus_driver}'s Screenshot saved in this path => #{file_name}"
|
181
|
+
@driver.save_screenshot(file_name)
|
182
|
+
end
|
183
|
+
|
184
|
+
def switch_to_frame(locator)
|
185
|
+
$focus_driver = self
|
186
|
+
@main_window=@driver.window_handle
|
187
|
+
@driver.switch_to.frame(find_element(locator))
|
188
|
+
puts "Switched to iframe - #{locator.how} => #{locator.what} on #{$focus_driver}"
|
189
|
+
return @main_window
|
190
|
+
end
|
191
|
+
|
192
|
+
def switch_to_window(locator=nil)
|
193
|
+
$focus_driver = self
|
194
|
+
@main_window=@driver.window_handle
|
195
|
+
locator.click if locator != nil
|
196
|
+
windows=@driver.window_handles
|
197
|
+
new_window=nil;
|
198
|
+
windows.length.times do |i|
|
199
|
+
if windows[i] != @main_window
|
200
|
+
new_window=windows[i]
|
201
|
+
end
|
202
|
+
end
|
203
|
+
@driver.switch_to.window(new_window)
|
204
|
+
puts "Switched to new window on #{$focus_driver}"
|
205
|
+
return @main_window
|
206
|
+
end
|
207
|
+
|
208
|
+
def scroll_to_locator(locator)
|
209
|
+
$focus_driver = self
|
210
|
+
element = find_element(locator)
|
211
|
+
@driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center', inline: 'nearest'});",element)
|
212
|
+
puts "Scroll to this locator - #{locator.how} => #{locator.what} on #{$focus_driver}"
|
213
|
+
sleep 1
|
214
|
+
end
|
215
|
+
|
216
|
+
def revert_to(window=nil)
|
217
|
+
$focus_driver = self
|
218
|
+
if window != nil
|
219
|
+
@driver.switch_to.window(window)
|
220
|
+
puts "Switched back to another window - #{window} in #{$focus_driver}"
|
221
|
+
else
|
222
|
+
@driver.switch_to.window(@main_window)
|
223
|
+
puts "Switched back to main window in #{focus_driver}"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def close
|
228
|
+
$focus_driver = self
|
229
|
+
@driver.close
|
230
|
+
puts "Closed the browser - #{$focus_driver}"
|
231
|
+
end
|
232
|
+
|
233
|
+
def quit
|
234
|
+
@driver.quit
|
235
|
+
@@drivers.delete(self)
|
236
|
+
$focus_driver = @@drivers[0]
|
237
|
+
puts "Quit the browser - #{$focus_driver}"
|
238
|
+
end
|
239
|
+
|
240
|
+
def quit_all
|
241
|
+
@@drivers.each do |driver|
|
242
|
+
driver.quit if driver != self
|
243
|
+
end
|
244
|
+
self.quit
|
245
|
+
puts "deleted all the browsers"
|
246
|
+
end
|
247
|
+
|
248
|
+
def self.quit_all_drivers
|
249
|
+
@@drivers.each do |driver|
|
250
|
+
driver.quit if driver != self
|
251
|
+
end
|
252
|
+
puts "deleted all the browsers"
|
253
|
+
end
|
254
|
+
|
255
|
+
def self.get_all_drivers
|
256
|
+
return @@drivers_with_names
|
257
|
+
end
|
258
|
+
|
259
|
+
def self.get_current_driver
|
260
|
+
return $focus_driver
|
261
|
+
end
|
262
|
+
|
263
|
+
def alert(ok_cancel)
|
264
|
+
sleep 2
|
265
|
+
alert = @driver.switch_to.alert
|
266
|
+
alertMsg=alert.text
|
267
|
+
if ok_cancel
|
268
|
+
alert.accept
|
269
|
+
puts "The alert was accepted in #{$focus_driver} with alert message #{alertMsg}"
|
270
|
+
else
|
271
|
+
alert.dismiss
|
272
|
+
puts "The alert was dismissed in #{$focus_driver} with alert message #{alertMsg}"
|
273
|
+
end
|
274
|
+
return alertMsg
|
275
|
+
end
|
276
|
+
|
277
|
+
def is_alert_present?
|
278
|
+
begin
|
279
|
+
alert = @driver.switch_to.alert
|
280
|
+
alertMsg=alert.text
|
281
|
+
return true
|
282
|
+
rescue Exception => e
|
283
|
+
return false
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
def self.switch_to(driver)
|
288
|
+
$focus_driver = driver
|
289
|
+
end
|
290
|
+
|
291
|
+
def drag_and_drop(source_locator, target_locator)
|
292
|
+
source = find_element(source_locator)
|
293
|
+
target = find_element(target_locator)
|
294
|
+
@driver.action.click_and_hold(source).perform
|
295
|
+
@driver.action.move_to(target).release.perform
|
296
|
+
sleep 3
|
297
|
+
puts "In driver #{$focus_driver} - #{source_locator.how} => source_locator.what locator was dragged and moved to this locator #{target_locator.how} => #{target_locator.what}"
|
298
|
+
end
|
299
|
+
|
300
|
+
end
|
301
|
+
end
|
@@ -0,0 +1,200 @@
|
|
1
|
+
module Teber
|
2
|
+
class Locator
|
3
|
+
attr_accessor :how
|
4
|
+
attr_accessor :what
|
5
|
+
attr_accessor :options
|
6
|
+
|
7
|
+
def initialize(
|
8
|
+
how,
|
9
|
+
what,
|
10
|
+
options = {
|
11
|
+
"hidden" => false,
|
12
|
+
"ajax_load" => false,
|
13
|
+
})
|
14
|
+
@how = how
|
15
|
+
@what = what
|
16
|
+
@options = options
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.mouse_over(element, driver = $focus_driver)
|
20
|
+
driver.action.move_to(element).perform
|
21
|
+
end
|
22
|
+
|
23
|
+
def click(driver = $focus_driver)
|
24
|
+
begin
|
25
|
+
driver.find_element(self).click
|
26
|
+
puts "Clicked - #{self.how} => #{self.what}"
|
27
|
+
rescue Exception => e
|
28
|
+
puts "Not clicked at - #{self.how} => #{self.what}"
|
29
|
+
puts e.message
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def text(driver = $focus_driver)
|
34
|
+
return driver.find_element(self).text
|
35
|
+
end
|
36
|
+
|
37
|
+
def texts(driver = $focus_driver)
|
38
|
+
elements_text = []
|
39
|
+
driver.find_elements(self).each do |element|
|
40
|
+
elements_text.push(element.text)
|
41
|
+
end
|
42
|
+
return elements_text
|
43
|
+
end
|
44
|
+
|
45
|
+
def attribute(name, driver = $focus_driver)
|
46
|
+
driver.find_element(self).attribute(name)
|
47
|
+
end
|
48
|
+
|
49
|
+
def css_value(prop, driver = $focus_driver)
|
50
|
+
driver.find_element(self).css_value(prop)
|
51
|
+
end
|
52
|
+
|
53
|
+
def displayed?(driver = $focus_driver)
|
54
|
+
driver.find_element(self).displayed?
|
55
|
+
end
|
56
|
+
|
57
|
+
def enabled?(driver = $focus_driver)
|
58
|
+
driver.find_element(self).enabled?
|
59
|
+
end
|
60
|
+
|
61
|
+
def is_enabled_with_wait?(timeout = $conf["implicit_wait"], driver = $focus_driver)
|
62
|
+
index = 0
|
63
|
+
while driver.find_element(self).enabled? == false
|
64
|
+
sleep 1
|
65
|
+
break if index == timeout
|
66
|
+
index += 1
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def hash(driver = $focus_driver)
|
71
|
+
driver.find_element(self).hash
|
72
|
+
end
|
73
|
+
|
74
|
+
def location(driver = $focus_driver)
|
75
|
+
driver.find_element(self).location
|
76
|
+
end
|
77
|
+
|
78
|
+
def location_once_scrolled_into_view(driver = $focus_driver)
|
79
|
+
driver.find_element(self).location_once_scrolled_into_view
|
80
|
+
end
|
81
|
+
|
82
|
+
def property(driver = $focus_driver)
|
83
|
+
driver.find_element(self).property
|
84
|
+
end
|
85
|
+
|
86
|
+
def selected?(driver = $focus_driver)
|
87
|
+
driver.find_element(self).selected?
|
88
|
+
end
|
89
|
+
|
90
|
+
def size(driver = $focus_driver)
|
91
|
+
driver.find_element(self).size
|
92
|
+
end
|
93
|
+
|
94
|
+
def style(prop, driver = $focus_driver)
|
95
|
+
driver.find_element(self).style(prop)
|
96
|
+
end
|
97
|
+
|
98
|
+
def submit(driver = $focus_driver)
|
99
|
+
driver.find_element(self).submit
|
100
|
+
end
|
101
|
+
|
102
|
+
def count(driver = $focus_driver)
|
103
|
+
element_list = driver.find_elements(self)
|
104
|
+
return element_list.count
|
105
|
+
end
|
106
|
+
|
107
|
+
def tag_name(driver = $focus_driver)
|
108
|
+
driver.find_element(self).tag_name
|
109
|
+
end
|
110
|
+
|
111
|
+
def is_present?(driver = $focus_driver)
|
112
|
+
driver.driver.manage.timeouts.implicit_wait = 0
|
113
|
+
begin
|
114
|
+
return driver.driver.find_element(self.how, self.what).displayed?
|
115
|
+
rescue Exception => e
|
116
|
+
driver.driver.manage.timeouts.implicit_wait = $conf["implicit_wait"]
|
117
|
+
return false
|
118
|
+
ensure
|
119
|
+
driver.driver.manage.timeouts.implicit_wait = $conf["implicit_wait"]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def is_not_present?(driver = $focus_driver)
|
124
|
+
return !is_present?(driver)
|
125
|
+
end
|
126
|
+
|
127
|
+
def is_present_with_wait?(timeout = $conf["implicit_wait"], driver = $focus_driver)
|
128
|
+
Wait.wait_for_element(self, timeout, driver)
|
129
|
+
is_present?(driver)
|
130
|
+
end
|
131
|
+
|
132
|
+
def is_not_present_with_wait?(timeout = $conf["implicit_wait"], driver = $focus_driver)
|
133
|
+
Wait.wait_for_element_hide(self, timeout, driver)
|
134
|
+
return !is_present?(driver)
|
135
|
+
end
|
136
|
+
|
137
|
+
def click_if_present(driver = $focus_driver)
|
138
|
+
click(driver) if is_present?(driver)
|
139
|
+
end
|
140
|
+
|
141
|
+
def click_if_present_with_wait(timeout = $conf["implicit_wait"], driver = $focus_driver)
|
142
|
+
click(driver) if is_present_with_wait?(timeout, driver)
|
143
|
+
end
|
144
|
+
|
145
|
+
def to_s
|
146
|
+
return "How ===> #{@how}\nWhat ===> #{@what}\nOptions ===> #{@options}"
|
147
|
+
end
|
148
|
+
|
149
|
+
def mouse_over(index = 1, driver = $focus_driver)
|
150
|
+
element = driver.find_elements(self)[index - 1]
|
151
|
+
driver.action.move_to(element).perform
|
152
|
+
end
|
153
|
+
|
154
|
+
def move_and_click(driver = $focus_driver)
|
155
|
+
element = driver.find_element(self)
|
156
|
+
driver.action.move_to(element).click.perform
|
157
|
+
end
|
158
|
+
|
159
|
+
def get_element(driver = $focus_driver)
|
160
|
+
driver.find_element(self)
|
161
|
+
end
|
162
|
+
|
163
|
+
################################
|
164
|
+
# Check box methods
|
165
|
+
################################
|
166
|
+
|
167
|
+
def is_checked?(driver = $focus_driver)
|
168
|
+
self.attribute("checked") == "true"
|
169
|
+
end
|
170
|
+
|
171
|
+
def check(driver = $focus_driver)
|
172
|
+
self.click unless self.is_checked?
|
173
|
+
end
|
174
|
+
|
175
|
+
def uncheck(driver = $focus_driver)
|
176
|
+
self.click if self.is_checked?
|
177
|
+
end
|
178
|
+
|
179
|
+
##############################
|
180
|
+
# Text box methods
|
181
|
+
##############################
|
182
|
+
|
183
|
+
def clear(driver = $focus_driver)
|
184
|
+
driver.find_element(self).clear
|
185
|
+
end
|
186
|
+
|
187
|
+
def send_keys(*args)
|
188
|
+
$focus_driver.find_element(self).send_keys(*args)
|
189
|
+
end
|
190
|
+
|
191
|
+
def clear_and_send_keys(*args)
|
192
|
+
clear($focus_driver)
|
193
|
+
send_keys(*args)
|
194
|
+
end
|
195
|
+
|
196
|
+
def get_value(driver = $focus_driver)
|
197
|
+
driver.find_element(self).attribute("value")
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|