watir_keyword_driver 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ExcelReader.rb +48 -0
- data/lib/RubyReport.rb +39 -0
- data/lib/RubyUtility.rb +64 -0
- data/lib/watir_keyword_driver.rb +179 -0
- metadata +67 -0
data/lib/ExcelReader.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'roo'
|
2
|
+
|
3
|
+
class ExcelReader
|
4
|
+
@workbook
|
5
|
+
|
6
|
+
def initialize(file_path)
|
7
|
+
puts "Opening Excel at #{file_path}"
|
8
|
+
@workbook = Roo::Excelx.new(file_path)
|
9
|
+
@workbook.default_sheet = @workbook.sheets[0]
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_workbook
|
13
|
+
return @workbook
|
14
|
+
end
|
15
|
+
|
16
|
+
def find_header
|
17
|
+
@headers = Hash.new
|
18
|
+
puts "finding excel header"
|
19
|
+
@workbook.row(1).each_with_index {|header,i|
|
20
|
+
@headers[header] = i
|
21
|
+
}
|
22
|
+
return @headers
|
23
|
+
end
|
24
|
+
|
25
|
+
def print_data
|
26
|
+
headers = find_header
|
27
|
+
((@workbook.first_row + 1)..@workbook.last_row).each do |row|
|
28
|
+
# Get the column data using the column heading.
|
29
|
+
run = @workbook.row(row)[headers['run']]
|
30
|
+
keyword = @workbook.row(row)[headers['keyword']]
|
31
|
+
object = @workbook.row(row)[headers['object']]
|
32
|
+
property = @workbook.row(row)[headers['property']]
|
33
|
+
value = @workbook.row(row)[headers['value']]
|
34
|
+
comments = @workbook.row(row)[headers['comments']]
|
35
|
+
|
36
|
+
print "Run: #{run}, #{keyword}, #{object}, #{property}, #{value}, #{comments}}\n\n"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
# excel = ExcelReader.new("/home/pratik/study/UIAutomation/WatirScript.xlsx")
|
43
|
+
# headers = excel.find_header
|
44
|
+
# headers.each do |key, value|
|
45
|
+
# puts "#{key}-----"
|
46
|
+
# puts "#{value}"
|
47
|
+
# end
|
48
|
+
# excel.print_data
|
data/lib/RubyReport.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
class RubyReport < Test::Unit::TestCase
|
4
|
+
|
5
|
+
@@no_of_assertion =0
|
6
|
+
@@no_of_pass = 0
|
7
|
+
@@no_of_fail = 0
|
8
|
+
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def assert_equal(actual,expected,msg)
|
15
|
+
@@no_of_assertion += 1
|
16
|
+
begin
|
17
|
+
puts super(expected, actual, msg)
|
18
|
+
puts "PASS ----- #{msg}"
|
19
|
+
@@no_of_pass += 1
|
20
|
+
rescue MiniTest::Assertion
|
21
|
+
@@no_of_fail += 1
|
22
|
+
puts "FAIL ----- #{msg}" # make screenshot here
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def total_no_of_assertion
|
28
|
+
return @@no_of_assertion
|
29
|
+
end
|
30
|
+
|
31
|
+
def total_no_of_pass
|
32
|
+
return @@no_of_pass
|
33
|
+
end
|
34
|
+
|
35
|
+
def total_no_of_fail
|
36
|
+
return @@no_of_fail
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
data/lib/RubyUtility.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
class RubyUtility
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
@var_hash = Hash.new
|
5
|
+
end
|
6
|
+
def get_string_upcase(str)
|
7
|
+
return String.new("#{str}").upcase.strip
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_string_trim(str)
|
11
|
+
return String.new("#{str}").strip
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_property(str)
|
15
|
+
if "#{str}"!=""
|
16
|
+
prop = String.new("#{str}")
|
17
|
+
return prop.split('=',2)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_str_concat(str)
|
22
|
+
if "#{str}"!=""
|
23
|
+
new_str = String.new("")
|
24
|
+
str_list = str.split(",")
|
25
|
+
for index in 0 ... str_list.size
|
26
|
+
str_temp = "#{str_list[index].inspect}"
|
27
|
+
# if(str_temp[1,1]=="@")
|
28
|
+
# str_add = get_hash_value(str_temp[2..-2])
|
29
|
+
# else
|
30
|
+
# str_add = str_temp[1..-2]
|
31
|
+
# end
|
32
|
+
str_add = get_hash_value(str_temp[1..-2])
|
33
|
+
new_str = new_str+str_add
|
34
|
+
puts new_str
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
return new_str
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_value(str)
|
42
|
+
if "#{str}"!=""
|
43
|
+
prop = String.new("#{str}")
|
44
|
+
return prop.split('<>',2)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_hash(key,value)
|
49
|
+
prop_key = :"#{key}"
|
50
|
+
@var_hash[prop_key] = "#{value}"
|
51
|
+
return @var_hash
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_hash_value(key)
|
55
|
+
prop_key = :"#{key}"
|
56
|
+
if @var_hash.key?(prop_key)
|
57
|
+
return @var_hash[prop_key]
|
58
|
+
else
|
59
|
+
return "#{key}"
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
require_relative 'ExcelReader'
|
2
|
+
require_relative 'RubyUtility'
|
3
|
+
require_relative 'RubyReport'
|
4
|
+
require "watir-webdriver"
|
5
|
+
|
6
|
+
class RubyDriver
|
7
|
+
|
8
|
+
def initialize(file_path,testcase)
|
9
|
+
@excel = ExcelReader.new("#{file_path}")
|
10
|
+
@rubyutil = RubyUtility.new
|
11
|
+
@workbook = @excel.get_workbook
|
12
|
+
@headers = @excel.find_header
|
13
|
+
@rubyreport = RubyReport.new
|
14
|
+
@testcase = testcase
|
15
|
+
end
|
16
|
+
|
17
|
+
def call_driver
|
18
|
+
((@workbook.first_row + 1)..@workbook.last_row).each do |row|
|
19
|
+
# Get the column data using the column heading.
|
20
|
+
run = @workbook.row(row)[@headers['run']]
|
21
|
+
keyword = @workbook.row(row)[@headers['keyword']]
|
22
|
+
object = @workbook.row(row)[@headers['object']]
|
23
|
+
property = @workbook.row(row)[@headers['property']]
|
24
|
+
value = @workbook.row(row)[@headers['value']]
|
25
|
+
comments = @workbook.row(row)[@headers['comments']]
|
26
|
+
|
27
|
+
if "#{@rubyutil.get_string_upcase("#{run}")}" == "R"
|
28
|
+
run_test_case("#{keyword}","#{object}","#{property}","#{value}","#{comments}")
|
29
|
+
else
|
30
|
+
puts "Skipping : #{keyword}, #{object}, #{property}, #{value}, #{comments}}\n\n"
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def run_test_case(keyword,object,property,value,comments)
|
37
|
+
puts "Running: #{keyword}, #{object}, #{property}, #{value}, #{comments}}\n\n"
|
38
|
+
take_action("#{keyword}","#{object}","#{property}","#{value}","#{comments}")
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_object(object,property,value)
|
42
|
+
obj_property = @rubyutil.get_property("#{property}")
|
43
|
+
if obj_property
|
44
|
+
propkey = obj_property.first.strip
|
45
|
+
prop_value = obj_property.last.strip
|
46
|
+
prop_key = :"#{propkey}"
|
47
|
+
obj_identifier = Hash.new
|
48
|
+
obj_identifier[prop_key] = "#{prop_value}"
|
49
|
+
end
|
50
|
+
case "#{@rubyutil.get_string_upcase("#{object}")}"
|
51
|
+
when "BROWSER"
|
52
|
+
case "#{@rubyutil.get_string_upcase("#{property}")}"
|
53
|
+
when "FIREFOX"
|
54
|
+
@browser = Watir::Browser.new :ff
|
55
|
+
when "CHROME"
|
56
|
+
@browser = Watir::Browser.new :chrome
|
57
|
+
end
|
58
|
+
return @browser
|
59
|
+
|
60
|
+
when "LINK"
|
61
|
+
return @browser.a(obj_identifier)
|
62
|
+
|
63
|
+
when "TEXT_BOX"
|
64
|
+
return @browser.text_field(obj_identifier)
|
65
|
+
|
66
|
+
when "BUTTON"
|
67
|
+
return @browser.button(obj_identifier)
|
68
|
+
|
69
|
+
when "DIV"
|
70
|
+
return @browser.div(obj_identifier)
|
71
|
+
|
72
|
+
when "RADIO"
|
73
|
+
return @browser.radio(obj_identifier)
|
74
|
+
|
75
|
+
when "CHECKBOX"
|
76
|
+
return @browser.checkbox(obj_identifier)
|
77
|
+
when "IMAGE"
|
78
|
+
return @browser.image(obj_identifier)
|
79
|
+
else
|
80
|
+
return "#{object}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
#def take_action(object,keyword,value)
|
85
|
+
def take_action(keyword,object,property,value,comments)
|
86
|
+
obj = create_object("#{object}","#{property}","#{value}")
|
87
|
+
value_property = @rubyutil.get_value("#{value}")
|
88
|
+
if value_property
|
89
|
+
value_prop = value_property.first.strip
|
90
|
+
value_value = value_property.last.strip
|
91
|
+
end
|
92
|
+
value_prop = @rubyutil.get_hash_value("#{value_prop}")
|
93
|
+
value_value = @rubyutil.get_hash_value("#{value_value}")
|
94
|
+
|
95
|
+
case "#{@rubyutil.get_string_upcase("#{keyword}")}"
|
96
|
+
when "LAUNCH"
|
97
|
+
puts "launching #{value}"
|
98
|
+
obj.goto value_prop
|
99
|
+
when "CLICK"
|
100
|
+
puts "clicking"
|
101
|
+
obj.when_present.flash
|
102
|
+
obj.click
|
103
|
+
when "SET"
|
104
|
+
puts "setting"
|
105
|
+
puts object
|
106
|
+
obj.when_present.flash
|
107
|
+
obj.set value_prop
|
108
|
+
when "CHECK"
|
109
|
+
puts "checking"
|
110
|
+
obj.when_present.flash
|
111
|
+
obj.set
|
112
|
+
when "CLEAR"
|
113
|
+
puts "clearing"
|
114
|
+
obj.when_present.flash
|
115
|
+
obj.clear
|
116
|
+
when "ASSIGN"
|
117
|
+
puts "assigning"
|
118
|
+
puts obj
|
119
|
+
@var = obj
|
120
|
+
puts "#@var"
|
121
|
+
if "#{property}" == "time"
|
122
|
+
var_value = Time.now.to_i
|
123
|
+
hash_var = @rubyutil.create_hash(obj,var_value)
|
124
|
+
else
|
125
|
+
hash_var = @rubyutil.create_hash(obj,"#{property}")
|
126
|
+
end
|
127
|
+
when "PUTS"
|
128
|
+
puts "putting"
|
129
|
+
puts "#{object}"
|
130
|
+
puts @rubyutil.get_hash_value("#{object}")
|
131
|
+
when "CONCAT"
|
132
|
+
puts "concating"
|
133
|
+
puts "#{property}"
|
134
|
+
str_concat = @rubyutil.get_str_concat("#{property}")
|
135
|
+
hash_var = @rubyutil.create_hash(obj,"#{str_concat}")
|
136
|
+
when "STOREVALUE"
|
137
|
+
puts "storing"
|
138
|
+
puts value_prop
|
139
|
+
puts value_value
|
140
|
+
obj.wait_until_present
|
141
|
+
obj.flash
|
142
|
+
if value_prop == "text"
|
143
|
+
@rubyutil.create_hash(value_value,obj.text)
|
144
|
+
elsif value_prop == "exist"
|
145
|
+
@rubyutil.create_hash(value_value,obj.exists?)
|
146
|
+
elsif value_prop == "title"
|
147
|
+
@rubyutil.create_hash(value_value,@browser.title)
|
148
|
+
end
|
149
|
+
when "VERIFY"
|
150
|
+
puts "verifying"
|
151
|
+
puts value_prop
|
152
|
+
puts value_value
|
153
|
+
obj.wait_until_present
|
154
|
+
obj.flash
|
155
|
+
if value_prop == "text"
|
156
|
+
@testcase.assert_equal(obj.text, value_value,"Text does not match")
|
157
|
+
# puts object.text.should == value_value
|
158
|
+
elsif value_prop == "exist"
|
159
|
+
value_boolean = value_value == "true" ? true : false
|
160
|
+
@testcase.assert_equal(obj.exists?,value_boolean,"Object does not exist")
|
161
|
+
# puts object.exists?.should == value_value
|
162
|
+
elsif value_prop == "title"
|
163
|
+
@testcase.assert_equal(@browser.title,value_value,"Title does not match")
|
164
|
+
end
|
165
|
+
when "CLOSE"
|
166
|
+
obj.close
|
167
|
+
@rubyreport.total_no_of_assertion
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def create_report
|
172
|
+
# @browser.close
|
173
|
+
puts "Total Assertion = #{@rubyreport.total_no_of_assertion}\n\n"
|
174
|
+
puts "Total Pass = #{@rubyreport.total_no_of_pass}\n\n"
|
175
|
+
puts "Total Fail = #{@rubyreport.total_no_of_fail}\n\n"
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: watir_keyword_driver
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 0.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Kumar Pratik
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2013-11-11 00:00:00 +05:30
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Keyword driven framework for watir
|
22
|
+
email: kumarpratik14@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- lib/watir_keyword_driver.rb
|
31
|
+
- lib/RubyUtility.rb
|
32
|
+
- lib/RubyReport.rb
|
33
|
+
- lib/ExcelReader.rb
|
34
|
+
has_rdoc: true
|
35
|
+
homepage: http://rubygems.org/gems/watir_keyword_driver
|
36
|
+
licenses:
|
37
|
+
- kpratik
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
segments:
|
49
|
+
- 0
|
50
|
+
version: "0"
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
requirements: []
|
60
|
+
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.3.7.1
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: Watir Keyword Driver
|
66
|
+
test_files: []
|
67
|
+
|