watir-webdriver-utils 1.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.
- data/LICENSE +3 -0
- data/README +3 -0
- data/Rakefile +48 -0
- data/lib/function/config.rb +7 -0
- data/lib/function/html_element.rb +286 -0
- data/lib/function/program.rb +11 -0
- data/lib/function/tc_page.rb +37 -0
- data/lib/watir-webdriver-utils.rb +11 -0
- metadata +99 -0
data/LICENSE
ADDED
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#
|
2
|
+
# To change this template, choose Tools | Templates
|
3
|
+
# and open the template in the editor.
|
4
|
+
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'rake'
|
8
|
+
require 'rake/clean'
|
9
|
+
require 'rake/gempackagetask'
|
10
|
+
require 'rake/rdoctask'
|
11
|
+
require 'rake/testtask'
|
12
|
+
|
13
|
+
spec = Gem::Specification.new do |s|
|
14
|
+
s.name = 'watir-webdriver-utils'
|
15
|
+
s.version = '1.0'
|
16
|
+
s.has_rdoc = true
|
17
|
+
s.extra_rdoc_files = ['README', 'LICENSE']
|
18
|
+
s.summary = 'Utils function for Watir-Webdriver'
|
19
|
+
s.description = s.summary
|
20
|
+
s.author = 'QuangMV, Cyworld VietNam, 5th Floor, 5/447 Lac Long Quan Street, Tay Ho Dist, Ha Noi, VietNam'
|
21
|
+
s.email = 'mr.quangmv@gmail.com'
|
22
|
+
s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,spec}/**/*")
|
23
|
+
s.require_path = "lib"
|
24
|
+
s.bindir = "bin"
|
25
|
+
s.add_dependency('watir-webdriver','>=0.6.1')
|
26
|
+
s.add_dependency('ocra','>=1.3.0')
|
27
|
+
s.add_dependency('tlsmail','>=0.0.1')
|
28
|
+
s.add_dependency('gmail_sender','>=1.1.1')
|
29
|
+
end
|
30
|
+
|
31
|
+
Rake::GemPackageTask.new(spec) do |p|
|
32
|
+
p.gem_spec = spec
|
33
|
+
p.need_tar = true
|
34
|
+
p.need_zip = true
|
35
|
+
end
|
36
|
+
|
37
|
+
Rake::RDocTask.new do |rdoc|
|
38
|
+
files =['README', 'LICENSE', 'lib/**/*.rb']
|
39
|
+
rdoc.rdoc_files.add(files)
|
40
|
+
rdoc.main = "README" # page to start on
|
41
|
+
rdoc.title = "watir-webdriver-utils Docs"
|
42
|
+
rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
|
43
|
+
rdoc.options << '--line-numbers'
|
44
|
+
end
|
45
|
+
|
46
|
+
Rake::TestTask.new do |t|
|
47
|
+
t.test_files = FileList['test/**/*.rb']
|
48
|
+
end
|
@@ -0,0 +1,286 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
require 'watir-webdriver'
|
4
|
+
require File.join(File.dirname(__FILE__), '..','Classes/config')
|
5
|
+
|
6
|
+
class HTMLElement
|
7
|
+
TAB_TYPE_ID = 'id'.to_sym
|
8
|
+
TAB_TYPE_VALUE = 'value'.to_sym
|
9
|
+
TAB_TYPE_NAME = 'name'.to_sym
|
10
|
+
TAB_TYPE_CLASS = 'class'.to_sym
|
11
|
+
TAB_TYPE_TEXT = 'text'.to_sym
|
12
|
+
TAB_TYPE_HREF = 'href'.to_sym
|
13
|
+
TAB_TYPE_TITLE = 'title'.to_sym
|
14
|
+
TAB_TYPE_URL = 'url'.to_sym
|
15
|
+
TAB_TYPE_ACTION = 'action'.to_sym
|
16
|
+
TAB_TYPE_INDEX = 'index'.to_sym
|
17
|
+
TAB_TYPE_SRC = 'src'.to_sym
|
18
|
+
TAB_TYPE_LENGTH = 'length'.to_sym
|
19
|
+
TAB_TYPE_MAXLENGTH = 'maxlength'.to_sym
|
20
|
+
|
21
|
+
#text_field
|
22
|
+
TEXT_FIELD_SET = 1
|
23
|
+
TEXT_FIELD_SET_VALUE = 2
|
24
|
+
TEXT_FIELD_SET_APPEND = 3
|
25
|
+
TEXT_FIELD_FOCUS = 4
|
26
|
+
|
27
|
+
#select_list
|
28
|
+
SELECT_LIST_SELECT = 1
|
29
|
+
SELECT_LIST_SELECT_VALUE = 2
|
30
|
+
|
31
|
+
#fire_event
|
32
|
+
FIRE_EVENT_ON_MOUSE_OVER = 1
|
33
|
+
|
34
|
+
attr_accessor :browser
|
35
|
+
|
36
|
+
def initialize
|
37
|
+
@browser = Watir::Browser::new ProgramConfig::BROWSER
|
38
|
+
end
|
39
|
+
|
40
|
+
def goto(url)
|
41
|
+
@browser.goto(url)
|
42
|
+
end
|
43
|
+
|
44
|
+
def xxx
|
45
|
+
@browser.close
|
46
|
+
# sleep(5)
|
47
|
+
end
|
48
|
+
|
49
|
+
def click_link(arg,value)
|
50
|
+
rescue_wait_retry{@browser.link(arg,value).click}
|
51
|
+
end
|
52
|
+
|
53
|
+
def click_button(arg,value)
|
54
|
+
rescue_wait_retry{@browser.button(arg,value).click}
|
55
|
+
end
|
56
|
+
|
57
|
+
def click_image(arg,value)
|
58
|
+
rescue_wait_retry{@browser.image(arg,value).click}
|
59
|
+
end
|
60
|
+
|
61
|
+
def click_div(arg,value)
|
62
|
+
rescue_wait_retry{@browser.div(arg,value).click}
|
63
|
+
end
|
64
|
+
|
65
|
+
def click_span(arg,value)
|
66
|
+
rescue_wait_retry{@browser.span(arg,value).click}
|
67
|
+
end
|
68
|
+
|
69
|
+
def set_text_field(arg,value,text,type = TEXT_FIELD_SET)
|
70
|
+
wait_until_html_loaded(@browser.text_field(arg,value))
|
71
|
+
if type == TEXT_FIELD_SET then
|
72
|
+
@browser.text_field(arg,value).set(text)
|
73
|
+
elsif type == TEXT_FIELD_SET_VALUE then
|
74
|
+
@browser.text_field(arg,value).value = text
|
75
|
+
elsif type == TEXT_FIELD_SET_APPEND then
|
76
|
+
@browser.text_field(arg,value).append(text)
|
77
|
+
elsif type == TEXT_FIELD_FOCUS then
|
78
|
+
@browser.text_field(arg,value).focus
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def verify_text_field_value(arg,text)
|
83
|
+
wait_until_html_loaded( @browser.text_field(arg,text) )
|
84
|
+
assert(@browser.text_field(arg,text).verify_contains(text) )
|
85
|
+
end
|
86
|
+
|
87
|
+
def set_file_field(arg,value,text)
|
88
|
+
wait_until_html_loaded(@browser.file_field(arg,value))
|
89
|
+
@browser.file_field(arg,value).set(text)
|
90
|
+
end
|
91
|
+
|
92
|
+
#Form
|
93
|
+
def submit_form(arg,value)
|
94
|
+
wait_until_html_loaded(@browser.form(arg,value))
|
95
|
+
@browser.form(arg,value).submit
|
96
|
+
end
|
97
|
+
|
98
|
+
def get_form(arg,value)
|
99
|
+
wait_until_html_loaded(@browser.form(arg,value))
|
100
|
+
return @browser.form(arg,value)
|
101
|
+
end
|
102
|
+
|
103
|
+
#Frame
|
104
|
+
def get_frame(arg,value)
|
105
|
+
wait_until_html_loaded(@browser.frame(arg,value))
|
106
|
+
return @browser.frame(arg,value)
|
107
|
+
end
|
108
|
+
|
109
|
+
#Table
|
110
|
+
def get_table(arg,value)
|
111
|
+
wait_until_html_loaded( @browser.table(arg,value) )
|
112
|
+
return @browser.table(arg,value)
|
113
|
+
end
|
114
|
+
|
115
|
+
#Div
|
116
|
+
def get_div(arg,value)
|
117
|
+
wait_until_html_loaded( @browser.div(arg, value) )
|
118
|
+
return @browser.div(arg, value)
|
119
|
+
end
|
120
|
+
|
121
|
+
#Checkbox
|
122
|
+
def set_checkbox(arg,value)
|
123
|
+
wait_until_html_loaded(@browser.checkbox(arg, value))
|
124
|
+
@browser.checkbox(arg, value).set
|
125
|
+
end
|
126
|
+
|
127
|
+
def clear_checkbox(argname)
|
128
|
+
wait_until_html_loaded(@browser.checkbox(arg, value))
|
129
|
+
@browser.checkbox(arg, value).clear
|
130
|
+
end
|
131
|
+
|
132
|
+
def set_select_list(arg,value,type = SELECT_LIST_SELECT)
|
133
|
+
wait_until_html_loaded(@browser.select_list(arg, value))
|
134
|
+
if type == SELECT_LIST_SELECT then
|
135
|
+
@browser.select_list(arg, value).select(value)
|
136
|
+
elsif type == SELECT_LIST_SELECT_VALUE then
|
137
|
+
@browser.select_list(arg, value).select_value(value)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def get_select_list(arg,value)
|
142
|
+
wait_until_html_loaded(@browser.select_list(arg, value))
|
143
|
+
return @browser.select_list(arg, value)
|
144
|
+
end
|
145
|
+
|
146
|
+
#Radio
|
147
|
+
def set_radio(arg,value)
|
148
|
+
wait_until_html_loaded(@browser.radio(arg, value))
|
149
|
+
@browser.radio(arg, value).set
|
150
|
+
end
|
151
|
+
|
152
|
+
def attach_new_window(arg,value)
|
153
|
+
begin
|
154
|
+
ff1 = @browser.attach(arg,value)
|
155
|
+
rescue Exception => e
|
156
|
+
sleep ProgramConfig::SLEEP
|
157
|
+
retry
|
158
|
+
end
|
159
|
+
return ff1
|
160
|
+
end
|
161
|
+
|
162
|
+
#Javascript event:<br>
|
163
|
+
def fire_event(element,type = FIRE_EVENT_ON_MOUSE_OVER)
|
164
|
+
wait_until_html_loaded(element)
|
165
|
+
if type == FIRE_EVENT_ON_MOUSE_OVER then
|
166
|
+
element.fire_event("onMouseOver")
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
#Remove all Cookies on Browser
|
171
|
+
def remove_all_cookies #0.0.8
|
172
|
+
jssh_command = "Components.classes[\"@mozilla.org/cookiemanager;1\"].getService(Components.interfaces.nsICookieManager).removeAll();"
|
173
|
+
$jssh_socket.send("#{jssh_command}\n", 0)
|
174
|
+
end
|
175
|
+
|
176
|
+
def rescue_wait_retry(exception = Watir::Exception::UnknownObjectException, times = ProgramConfig::TIMEOUT, seconds = ProgramConfig::SLEEP, &block)
|
177
|
+
begin
|
178
|
+
return yield
|
179
|
+
rescue exception => e
|
180
|
+
puts "Caught #{exception}: #{e}. Sleeping #{seconds} seconds."
|
181
|
+
sleep(seconds)
|
182
|
+
@browser.wait
|
183
|
+
if (times -= 1)> 0
|
184
|
+
puts "Retrying... #{times} times left"
|
185
|
+
retry
|
186
|
+
end
|
187
|
+
end
|
188
|
+
yield
|
189
|
+
end
|
190
|
+
|
191
|
+
def check_html_exists?(elem)
|
192
|
+
start_time = Time.now
|
193
|
+
while (!elem.exists?) do
|
194
|
+
sleep ProgramConfig::SLEEP
|
195
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
196
|
+
puts "Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
197
|
+
false
|
198
|
+
end
|
199
|
+
end
|
200
|
+
true
|
201
|
+
end
|
202
|
+
|
203
|
+
def wait_until_html_loaded(elem)
|
204
|
+
start_time = Time.now
|
205
|
+
while (!elem.exists?) do
|
206
|
+
sleep ProgramConfig::SLEEP
|
207
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
208
|
+
raise RuntimeError, "Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def assert_text(text) #0.0.6
|
214
|
+
start_time = Time.now
|
215
|
+
while !@browser.text.include?(text) do
|
216
|
+
sleep ProgramConfig::SLEEP
|
217
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
218
|
+
raise RuntimeError, "Timed out assert after #{ProgramConfig::TIMEOUT} seconds"
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
#Assert False text in page
|
224
|
+
def assert_text_false(text)
|
225
|
+
start_time = Time.now
|
226
|
+
while @browser.text.include?(text) do
|
227
|
+
sleep ProgramConfig::SLEEP
|
228
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
229
|
+
raise RuntimeError, "Timed out assert after #{ProgramConfig::TIMEOUT} seconds"
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def assert_equal(value,elem,type)
|
235
|
+
case type
|
236
|
+
when TAB_TYPE_TEXT then
|
237
|
+
start_time = Time.now
|
238
|
+
while (value != elem.text) do
|
239
|
+
sleep ProgramConfig::SLEEP
|
240
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
241
|
+
raise RuntimeError, "(assert_equal) Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
242
|
+
end
|
243
|
+
end
|
244
|
+
when TAB_TYPE_VALUE then
|
245
|
+
start_time = Time.now
|
246
|
+
while (value != elem.value) do
|
247
|
+
sleep ProgramConfig::SLEEP
|
248
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
249
|
+
raise RuntimeError, "(assert_equal) Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
250
|
+
end
|
251
|
+
end
|
252
|
+
when TAB_TYPE_TITLE then
|
253
|
+
start_time = Time.now
|
254
|
+
while (value != elem.title) do
|
255
|
+
sleep ProgramConfig::SLEEP
|
256
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
257
|
+
raise RuntimeError, "(assert_equal) Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
258
|
+
end
|
259
|
+
end
|
260
|
+
when TAB_TYPE_LENGTH then
|
261
|
+
start_time = Time.now
|
262
|
+
while (value != elem.length) do
|
263
|
+
sleep ProgramConfig::SLEEP
|
264
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
265
|
+
raise RuntimeError, "(assert_equal) Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
266
|
+
end
|
267
|
+
end
|
268
|
+
when TAB_TYPE_MAXLENGTH then
|
269
|
+
start_time = Time.now
|
270
|
+
while (value != elem.maxlength) do
|
271
|
+
sleep ProgramConfig::SLEEP
|
272
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
273
|
+
raise RuntimeError, "(assert_equal) Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
274
|
+
end
|
275
|
+
end
|
276
|
+
when TAB_TYPE_URL then
|
277
|
+
start_time = Time.now
|
278
|
+
while (value != elem.url) do
|
279
|
+
sleep ProgramConfig::SLEEP
|
280
|
+
if Time.now - start_time> ProgramConfig::TIMEOUT
|
281
|
+
raise RuntimeError, "(assert_equal) Timed out after #{ProgramConfig::TIMEOUT} seconds"
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
require File.join(File.dirname(__FILE__), '..','Classes/html_element')
|
4
|
+
|
5
|
+
class Program < HTMLElement
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
#define function at here
|
11
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
require 'rubygems'
|
4
|
+
require 'watir/testcase'
|
5
|
+
require File.join(File.dirname(__FILE__), '..','Classes/program')
|
6
|
+
|
7
|
+
class TC_Page < Watir::TestCase
|
8
|
+
def setup
|
9
|
+
@browser = Program.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_case_a
|
13
|
+
begin
|
14
|
+
#code here
|
15
|
+
@test_passed = true
|
16
|
+
rescue Exception => e
|
17
|
+
@test_passed = false
|
18
|
+
puts e.inspect
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_case_b
|
23
|
+
begin
|
24
|
+
#code here
|
25
|
+
@test_passed = true
|
26
|
+
rescue Exception => e
|
27
|
+
@test_passed = false
|
28
|
+
puts e.inspect
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def teardown
|
33
|
+
puts @test_passed ? '************************** TRUE **************************' : '************************** FALSE **************************'
|
34
|
+
@browser.xxx
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: watir-webdriver-utils
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- QuangMV, Cyworld VietNam, 5th Floor, 5/447 Lac Long Quan Street, Tay Ho Dist, Ha
|
9
|
+
Noi, VietNam
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-06-25 00:00:00.000000000Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: watir-webdriver
|
17
|
+
requirement: &7677756 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.6.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *7677756
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: ocra
|
28
|
+
requirement: &7679388 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *7679388
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: tlsmail
|
39
|
+
requirement: &7693308 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.0.1
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *7693308
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: gmail_sender
|
50
|
+
requirement: &7709784 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 1.1.1
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *7709784
|
59
|
+
description: Utils function for Watir-Webdriver
|
60
|
+
email: mr.quangmv@gmail.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files:
|
64
|
+
- README
|
65
|
+
- LICENSE
|
66
|
+
files:
|
67
|
+
- LICENSE
|
68
|
+
- README
|
69
|
+
- Rakefile
|
70
|
+
- lib/function/config.rb
|
71
|
+
- lib/function/html_element.rb
|
72
|
+
- lib/function/program.rb
|
73
|
+
- lib/function/tc_page.rb
|
74
|
+
- lib/watir-webdriver-utils.rb
|
75
|
+
homepage:
|
76
|
+
licenses: []
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
requirements: []
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 1.8.17
|
96
|
+
signing_key:
|
97
|
+
specification_version: 3
|
98
|
+
summary: Utils function for Watir-Webdriver
|
99
|
+
test_files: []
|