scoutui 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +154 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/scoutui_driver.rb +22 -0
- data/bin/setup +7 -0
- data/examples/ex1/commands.holidays.yml +45 -0
- data/examples/ex1/commands.yml +25 -0
- data/examples/ex1/test-example.sh +38 -0
- data/examples/ex1/test.config.json +16 -0
- data/examples/ex2/commands.yml +35 -0
- data/examples/ex2/page_model.json +28 -0
- data/examples/ex2/test-example.sh +39 -0
- data/examples/ex2/test.config.json +25 -0
- data/lib/scoutui.rb +8 -0
- data/lib/scoutui/appmodel/q_model.rb +82 -0
- data/lib/scoutui/base/assertions.rb +62 -0
- data/lib/scoutui/base/q_accounts.rb +52 -0
- data/lib/scoutui/base/q_applitools.rb +127 -0
- data/lib/scoutui/base/q_browser.rb +185 -0
- data/lib/scoutui/base/q_form.rb +261 -0
- data/lib/scoutui/base/test_scout.rb +120 -0
- data/lib/scoutui/base/test_settings.rb +109 -0
- data/lib/scoutui/base/user_vars.rb +108 -0
- data/lib/scoutui/base/visual_test_framework.rb +574 -0
- data/lib/scoutui/commands/click_object.rb +45 -0
- data/lib/scoutui/commands/command.rb +56 -0
- data/lib/scoutui/commands/commands.rb +133 -0
- data/lib/scoutui/commands/exists_alert.rb +54 -0
- data/lib/scoutui/commands/fill_form.rb +56 -0
- data/lib/scoutui/commands/jsalert/action_jsalert.rb +58 -0
- data/lib/scoutui/commands/mouse_over.rb +31 -0
- data/lib/scoutui/commands/pause.rb +26 -0
- data/lib/scoutui/commands/select_object.rb +54 -0
- data/lib/scoutui/commands/strategy.rb +202 -0
- data/lib/scoutui/commands/submit_form.rb +44 -0
- data/lib/scoutui/commands/type.rb +44 -0
- data/lib/scoutui/commands/update_url.rb +45 -0
- data/lib/scoutui/commands/utils.rb +128 -0
- data/lib/scoutui/commands/verify_element.rb +198 -0
- data/lib/scoutui/commands/verify_form.rb +26 -0
- data/lib/scoutui/eyes/eye_factory.rb +76 -0
- data/lib/scoutui/eyes/eye_scout.rb +239 -0
- data/lib/scoutui/logger/log_mgr.rb +105 -0
- data/lib/scoutui/navigator.rb +24 -0
- data/lib/scoutui/utils/utils.rb +352 -0
- data/lib/scoutui/version.rb +3 -0
- data/scoutui.gemspec +35 -0
- metadata +54 -2
- data/pkg/scoutui-2.0.0.gem +0 -0
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
require 'faker'
|
3
|
+
|
4
|
+
module Scoutui::Base
|
5
|
+
|
6
|
+
class UserVars
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
attr_accessor :globals
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@globals={
|
13
|
+
:accounts => '/tmp/qa/accounts.yaml',
|
14
|
+
:browser => 'chrome',
|
15
|
+
:userid => nil,
|
16
|
+
:password => nil,
|
17
|
+
:host => nil,
|
18
|
+
:localization => 'en-us'
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def dump()
|
23
|
+
@globals.each_pair do |k, v|
|
24
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " #{k} => #{v}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def getViewPort()
|
29
|
+
arr=Scoutui::Base::UserVars.instance.getVar('eyes.viewport').match(/(\d+)\s*x\s*(\d+)$/i)
|
30
|
+
if arr.size==3
|
31
|
+
_sz = {:width => arr[1].to_i, :height => arr[2].to_i }
|
32
|
+
end
|
33
|
+
|
34
|
+
_sz
|
35
|
+
end
|
36
|
+
|
37
|
+
def getBrowserType()
|
38
|
+
@globals[:browser].to_sym
|
39
|
+
end
|
40
|
+
|
41
|
+
def getHost()
|
42
|
+
@globals[:host].to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def get(k)
|
46
|
+
foundKey=true
|
47
|
+
|
48
|
+
v=k
|
49
|
+
|
50
|
+
_rc = k.match(/\$\{(.*)\}$/)
|
51
|
+
|
52
|
+
# Needs refactoring!
|
53
|
+
if k=='${userid}'
|
54
|
+
k=:userid
|
55
|
+
elsif k=='${password}'
|
56
|
+
k=:password
|
57
|
+
elsif k=='${host}'
|
58
|
+
k=:host
|
59
|
+
elsif k.is_a?(Symbol)
|
60
|
+
foundKey=true
|
61
|
+
elsif k=='__random_email__'
|
62
|
+
return Faker::Internet.email
|
63
|
+
elsif !_rc.nil?
|
64
|
+
k=_rc[1].to_s
|
65
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " User Var found => #{k}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
66
|
+
if Scoutui::Utils::TestUtils.instance.getTestConfig().has_key?("user_vars")
|
67
|
+
|
68
|
+
if Scoutui::Utils::TestUtils.instance.getTestConfig()["user_vars"].has_key?(k)
|
69
|
+
v=Scoutui::Utils::TestUtils.instance.getTestConfig()["user_vars"][k].to_s
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
else
|
75
|
+
foundKey=false
|
76
|
+
end
|
77
|
+
|
78
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " get(#{k}) => #{@globals.has_key?(k)}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
79
|
+
|
80
|
+
if @globals.has_key?(k) && foundKey
|
81
|
+
v=@globals[k]
|
82
|
+
end
|
83
|
+
|
84
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " get(#{k} => #{@globals.has_key?(k)} ==> #{v.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
85
|
+
|
86
|
+
v
|
87
|
+
end
|
88
|
+
|
89
|
+
def set(k, v)
|
90
|
+
setVar(k, v)
|
91
|
+
v
|
92
|
+
end
|
93
|
+
|
94
|
+
def getVar(k)
|
95
|
+
@globals[k].to_s
|
96
|
+
end
|
97
|
+
|
98
|
+
def setVar(k, v)
|
99
|
+
@globals[k]=v
|
100
|
+
v
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,574 @@
|
|
1
|
+
#require 'testmgr'
|
2
|
+
|
3
|
+
module Scoutui::Base
|
4
|
+
|
5
|
+
class VisualTestFramework
|
6
|
+
|
7
|
+
STEP_KEY='page'
|
8
|
+
CMD_KEY='dut' # Used to indicate the command file (YML) to execute
|
9
|
+
|
10
|
+
def initialize()
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def self.processCommand(_action, e, my_driver)
|
16
|
+
_req = Scoutui::Utils::TestUtils.instance.getReq()
|
17
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " === Process ACTION : #{_action} ===" if Scoutui::Utils::TestUtils.instance.isDebug?
|
18
|
+
|
19
|
+
if Scoutui::Commands::Utils.instance.isExistsAlert?(_action)
|
20
|
+
_c = Scoutui::Commands::JsAlert::ExistsAlert.new(_action)
|
21
|
+
_rc = _c.execute(my_driver)
|
22
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " existsAlert => #{_rc}"
|
23
|
+
|
24
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify alert is present - #{!_rc.nil?.to_s}"
|
25
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('expectJsAlert').add(!_rc.nil?, "Verify alert is present")
|
26
|
+
|
27
|
+
elsif Scoutui::Commands::Utils.instance.isVerifyForm?(_action)
|
28
|
+
_c = Scoutui::Commands::VerifyForm.new(_action)
|
29
|
+
_c.execute(my_driver)
|
30
|
+
|
31
|
+
elsif !_action.match(/fillform\(/).nil? && false
|
32
|
+
|
33
|
+
# _c = Scoutui::Commands::FillForm.new(_action)
|
34
|
+
|
35
|
+
_form = _action.match(/fillform\((.*)\s*\)/)[1].to_s
|
36
|
+
# _dut = _action.match(/fillform\(.*,\s*(.*)\)/)[1].to_s
|
37
|
+
|
38
|
+
dut = e[STEP_KEY]['dut']
|
39
|
+
|
40
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " DUT => #{dut}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
41
|
+
_f = Scoutui::Utils::TestUtils.instance.getForm(_form)
|
42
|
+
_f.dump()
|
43
|
+
_f.verifyForm(my_driver)
|
44
|
+
_f.fillForm(my_driver, dut)
|
45
|
+
|
46
|
+
elsif !_action.match(/submitform\(/).nil? && false
|
47
|
+
_cmd = Scoutui::Commands::SubmitForm.new(_action)
|
48
|
+
# _cmd.execute(my_driver)
|
49
|
+
|
50
|
+
_form = _action.match(/submitform\((.*)\s*\)/)[1].to_s
|
51
|
+
_f = Scoutui::Utils::TestUtils.instance.getForm(_form)
|
52
|
+
_f.submitForm(my_driver)
|
53
|
+
|
54
|
+
elsif !_action.match(/type\(/).nil? && false
|
55
|
+
_xpath = _action.match(/type\((.*),\s*/)[1].to_s
|
56
|
+
_val = _action.match(/type\(.*,\s*(.*)\)/)[1].to_s
|
57
|
+
|
58
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + "Process TYPE #{_val} into #{_xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
59
|
+
|
60
|
+
obj = Scoutui::Base::QBrowser.getObject(my_driver, _xpath)
|
61
|
+
|
62
|
+
if !obj.nil? && !obj.attribute('type').downcase.match(/(text|password|email)/).nil?
|
63
|
+
Scoutui::Logger::LogMgr.instance.commands.info "send_keys(#{_val})"
|
64
|
+
obj.send_keys(Scoutui::Base::UserVars.instance.get(_val))
|
65
|
+
else
|
66
|
+
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " Unable to process command TYPE => #{obj.to_s}"
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.isRun(e)
|
75
|
+
_run=nil
|
76
|
+
if e[STEP_KEY].has_key?("run")
|
77
|
+
_run = e[STEP_KEY].has_key?("run").to_s
|
78
|
+
end
|
79
|
+
_run
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.isSnapIt(e)
|
83
|
+
_snapit=false
|
84
|
+
|
85
|
+
if e[STEP_KEY].has_key?("snapit")
|
86
|
+
_snapit = !(e[STEP_KEY]["snapit"].to_s.match(/true/i).nil?)
|
87
|
+
end
|
88
|
+
_snapit
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def self.verifyCondition(my_driver, xpath)
|
93
|
+
rc=false
|
94
|
+
|
95
|
+
if !xpath.match(/^page\([\w\d]+\)/).nil?
|
96
|
+
|
97
|
+
page_elt = Scoutui::Utils::TestUtils.instance.getPageElement(xpath)
|
98
|
+
|
99
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Process page request #{page_elt} => #{page_elt.class.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
100
|
+
|
101
|
+
if page_elt.is_a?(Hash) && page_elt.has_key?('locator')
|
102
|
+
|
103
|
+
##
|
104
|
+
# expected:
|
105
|
+
# wait: page(abc).get(def) where this page_elt has "locator"
|
106
|
+
|
107
|
+
xpath = page_elt['locator'].to_s
|
108
|
+
|
109
|
+
elsif xpath.is_a?(Hash)
|
110
|
+
xpath.each_pair do |_k, _v|
|
111
|
+
|
112
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " k,v :: #{_k.to_s}, #{_v.to_s}"
|
113
|
+
|
114
|
+
if _v.has_key?('locator')
|
115
|
+
_locator = _v['locator'].to_s
|
116
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " " + _k.to_s + " => " + _locator
|
117
|
+
|
118
|
+
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
119
|
+
|
120
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator)
|
121
|
+
|
122
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}"
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def self.processAssertions(my_driver, e)
|
136
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " === ProcessAssertions(#{e.to_s} ====" if Scoutui::Utils::TestUtils.instance.isDebug?
|
137
|
+
|
138
|
+
if !e[STEP_KEY].has_key?('assertions')
|
139
|
+
return
|
140
|
+
end
|
141
|
+
|
142
|
+
_req = Scoutui::Utils::TestUtils.instance.getReq()
|
143
|
+
|
144
|
+
puts __FILE__ + (__LINE__).to_s + "======= #{e[STEP_KEY]['assertions']} ========="
|
145
|
+
|
146
|
+
|
147
|
+
e[STEP_KEY]['assertions'].each do |elt|
|
148
|
+
|
149
|
+
begin
|
150
|
+
|
151
|
+
|
152
|
+
_k = elt.keys[0].to_s
|
153
|
+
a = elt[_k]
|
154
|
+
|
155
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Assert => #{_k} : #{a.to_s}"
|
156
|
+
|
157
|
+
# _k = 'generic-assertion'
|
158
|
+
_v={}
|
159
|
+
|
160
|
+
if a.is_a?(Hash)
|
161
|
+
_v=a
|
162
|
+
|
163
|
+
|
164
|
+
if _v.has_key?('locator')
|
165
|
+
_locator = _v['locator'].to_s
|
166
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " " + _k.to_s + " => " + _locator if Scoutui::Utils::TestUtils.instance.isDebug?
|
167
|
+
|
168
|
+
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
169
|
+
|
170
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator, Scoutui::Commands::Utils.instance.getTimeout())
|
171
|
+
|
172
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
173
|
+
end
|
174
|
+
|
175
|
+
if _v.has_key?('visible_when')
|
176
|
+
|
177
|
+
if _v['visible_when'].match(/always/i)
|
178
|
+
Scoutui::Logger::LogMgr.instance.asserts.info __FILE__ + (__LINE__).to_s + " Verify assertion #{_k} - #{_locator} visible - #{!_obj.nil?.to_s}"
|
179
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify assertion #{_k} - #{_locator} visible")
|
180
|
+
elsif _v['visible_when'].match(/never/i)
|
181
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify assertion #{_k} #{_locator} not visible - #{obj.nil?.to_s}"
|
182
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(obj.nil?, "Verify assertion #{_k} #{_locator} not visible")
|
183
|
+
elsif _v['visible_when'].match(/role\=/i)
|
184
|
+
_role = _v['visible_when'].match(/role\=(.*)/i)[1].to_s
|
185
|
+
_expected_role = Scoutui::Utils::TestUtils.instance.getRole()
|
186
|
+
|
187
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Verify assertion object exists if the role #{_role} matches expected role #{_expected_role.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
188
|
+
|
189
|
+
if _role==_expected_role.to_s
|
190
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify assertion #{_k} #{_locator} visible when role #{_role} - #{!_obj.nil?.to_s}"
|
191
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify assertion #{_k} #{_locator} visible when role #{_role}")
|
192
|
+
end
|
193
|
+
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
|
198
|
+
end
|
199
|
+
|
200
|
+
rescue => ex
|
201
|
+
|
202
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " abort processing."
|
203
|
+
Scoutui::Logger::LogMgr.instance.debug "Error during processing: #{ex}"
|
204
|
+
puts __FILE__ + (__LINE__).to_s + "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
|
205
|
+
end
|
206
|
+
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
def self.processExpected(my_driver, e)
|
215
|
+
|
216
|
+
_req = Scoutui::Utils::TestUtils.instance.getReq()
|
217
|
+
|
218
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + "\to Expected: #{e[STEP_KEY]['expected'].class.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
219
|
+
|
220
|
+
Scoutui::Base::Assertions.instance.setDriver(my_driver)
|
221
|
+
|
222
|
+
if e[STEP_KEY].has_key?('expected')
|
223
|
+
expected_list=e[STEP_KEY]['expected']
|
224
|
+
|
225
|
+
if expected_list.is_a?(Array)
|
226
|
+
expected_list.each do |_condition|
|
227
|
+
verifyCondition(my_driver, _condition)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
if expected_list.is_a?(Hash)
|
232
|
+
|
233
|
+
expected_list.each_pair do |link_name, xpath|
|
234
|
+
|
235
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + "\t\t#{link_name} => #{xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
236
|
+
|
237
|
+
if !xpath.match(/\$\{.*\}/).nil?
|
238
|
+
xpath = Scoutui::Base::UserVars.instance.get(xpath)
|
239
|
+
end
|
240
|
+
|
241
|
+
|
242
|
+
if !xpath.match(/^page\([\w\d]+\)/).nil?
|
243
|
+
|
244
|
+
|
245
|
+
# Check if this is a form
|
246
|
+
|
247
|
+
page_elt = Scoutui::Utils::TestUtils.instance.getPageElement(xpath)
|
248
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Process page request #{page_elt} => #{page_elt.class.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
249
|
+
|
250
|
+
sub_elts=0
|
251
|
+
if page_elt.is_a?(Hash)
|
252
|
+
sub_elts = page_elt.select { |_s| page_elt[_s].has_key?("locator") if page_elt[_s].is_a?(Hash) && !page_elt[_s].nil? }.size
|
253
|
+
end
|
254
|
+
|
255
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " SubElts => #{sub_elts}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
256
|
+
|
257
|
+
if page_elt.is_a?(Hash) && page_elt.has_key?('locator')
|
258
|
+
|
259
|
+
##
|
260
|
+
# expected:
|
261
|
+
# wait: page(abc).get(def) where this page_elt has "locator"
|
262
|
+
|
263
|
+
xpath = page_elt['locator'].to_s
|
264
|
+
|
265
|
+
elsif sub_elts > 0
|
266
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Validate form" if Scoutui::Utils::TestUtils.instance.isDebug?
|
267
|
+
|
268
|
+
page_elt.each_pair do |_k, _v|
|
269
|
+
|
270
|
+
begin
|
271
|
+
|
272
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " k,v :: #{_k.to_s}, #{_v.to_s} (#{_v.class.to_s})" if Scoutui::Utils::TestUtils.instance.isDebug?
|
273
|
+
|
274
|
+
_obj=nil
|
275
|
+
|
276
|
+
|
277
|
+
if _v.is_a?(String)
|
278
|
+
puts __FILE__ + (__LINE__).to_s + " #{_v} is a string - next"
|
279
|
+
next
|
280
|
+
end
|
281
|
+
|
282
|
+
if _v.has_key?('assert_when') && _v['assert_when'].match(/role\s*\=/i)
|
283
|
+
_role = _v['assert_when'].match(/role\s*\=(.*)/i)[1].to_s
|
284
|
+
_expected_role = Scoutui::Utils::TestUtils.instance.getRole()
|
285
|
+
|
286
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Trigger: expected : #{_expected_role.to_s}, actual: #{_role.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
287
|
+
|
288
|
+
if !_expected_role.nil? && !_role.match(/#{_expected_role}/i)
|
289
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Skip assertion since conditional assertion #{_v['assert_when']} not met" if Scoutui::Utils::TestUtils.instance.isDebug?
|
290
|
+
next
|
291
|
+
elsif _expected_role.nil?
|
292
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Skip role based assertion since role was not provided" if Scoutui::Utils::TestUtils.instance.isDebug?
|
293
|
+
next
|
294
|
+
end
|
295
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Verify object exists since the role #{_role} matches expected role #{_expected_role.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
if Scoutui::Base::Assertions.instance.visible_when_skip(_k, _v)
|
300
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " SKIP #{_k.to_s} - #{_v.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
301
|
+
next
|
302
|
+
end
|
303
|
+
|
304
|
+
if _v.has_key?('locator')
|
305
|
+
_locator = _v['locator'].to_s
|
306
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " " + _k.to_s + " => " + _locator if Scoutui::Utils::TestUtils.instance.isDebug?
|
307
|
+
|
308
|
+
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
309
|
+
|
310
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator, Scoutui::Commands::Utils.instance.getTimeout())
|
311
|
+
|
312
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
313
|
+
end
|
314
|
+
|
315
|
+
if Scoutui::Base::Assertions.instance.visible_when_always(_k, _v, _obj)
|
316
|
+
next
|
317
|
+
elsif _v.has_key?('visible_when')
|
318
|
+
|
319
|
+
if _v['visible_when'].match(/always/i)
|
320
|
+
Scoutui::Logger::LogMgr.instance.asserts.info __FILE__ + (__LINE__).to_s + " Verify #{_k} - #{_locator} visible - #{!_obj.nil?.to_s}"
|
321
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify #{_k} - #{_locator} visible")
|
322
|
+
elsif _v['visible_when'].match(/never/i)
|
323
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{_k} #{_locator} not visible - #{obj.nil?.to_s}"
|
324
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(obj.nil?, "Verify #{_k} #{_locator} not visible")
|
325
|
+
elsif _v['visible_when'].match(/role\=/i)
|
326
|
+
_role = _v['visible_when'].match(/role\=(.*)/i)[1].to_s
|
327
|
+
_expected_role = Scoutui::Utils::TestUtils.instance.getRole()
|
328
|
+
|
329
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Verify object exists if the role #{_role} matches expected role #{_expected_role.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
330
|
+
|
331
|
+
if _role==_expected_role.to_s
|
332
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{_k} #{_locator} visible when role #{_role} - #{!_obj.nil?.to_s}"
|
333
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify #{_k} #{_locator} visible when role #{_role}")
|
334
|
+
end
|
335
|
+
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
|
340
|
+
rescue => ex
|
341
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Invalid file: #{datafile} - abort processing."
|
342
|
+
puts __FILE__ + (__LINE__).to_s + "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
|
343
|
+
end
|
344
|
+
|
345
|
+
|
346
|
+
end
|
347
|
+
|
348
|
+
return
|
349
|
+
|
350
|
+
|
351
|
+
elsif xpath.is_a?(Hash)
|
352
|
+
xpath.each_pair do |_k, _v|
|
353
|
+
|
354
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " k,v :: #{_k.to_s}, #{_v.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
355
|
+
|
356
|
+
if _v.has_key?('locator')
|
357
|
+
_locator = _v['locator'].to_s
|
358
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " " + _k.to_s + " => " + _locator if Scoutui::Utils::TestUtils.instance.isDebug?
|
359
|
+
|
360
|
+
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
361
|
+
|
362
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator)
|
363
|
+
|
364
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
365
|
+
end
|
366
|
+
|
367
|
+
end
|
368
|
+
|
369
|
+
next
|
370
|
+
end
|
371
|
+
|
372
|
+
|
373
|
+
end
|
374
|
+
|
375
|
+
obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, xpath)
|
376
|
+
|
377
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " obj : #{obj}"
|
378
|
+
|
379
|
+
Scoutui::Logger::LogMgr.instance.asserts.info __FILE__ + (__LINE__).to_s + " Verify #{xpath} visible - #{obj.kind_of?(Selenium::WebDriver::Element).to_s}"
|
380
|
+
|
381
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!obj.nil?, __FILE__ + (__LINE__).to_s + " Verify #{xpath} visible")
|
382
|
+
|
383
|
+
if obj.nil?
|
384
|
+
Scoutui::Logger::LogMgr.instance.warn " NOT FOUND : #{link_name} with xpath #{xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
385
|
+
else
|
386
|
+
Scoutui::Logger::LogMgr.instance.warn " link object(#{link_name} with xpath #{xpath}=> #{obj.displayed?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
387
|
+
end
|
388
|
+
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " [end]: processExpected()"
|
394
|
+
end
|
395
|
+
|
396
|
+
# Scoutui::Base::VisualTestFramework.processFile(@drv, @eyes, @test_settings['host'], @test_settings['dut'])
|
397
|
+
def self.processFile(eyeScout, test_settings, strategy=nil)
|
398
|
+
|
399
|
+
puts __FILE__ + (__LINE__).to_s + " [enter]:processFile(#{test_settings['dut']})"
|
400
|
+
my_driver = eyeScout.drv()
|
401
|
+
|
402
|
+
baseUrl = Scoutui::Base::UserVars.instance.getHost()
|
403
|
+
datafile = test_settings['dut']
|
404
|
+
|
405
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " processFile(#{eyeScout}, #{baseUrl}, #{datafile})" if Scoutui::Utils::TestUtils.instance.isDebug?
|
406
|
+
|
407
|
+
valid_file=false
|
408
|
+
i=0
|
409
|
+
begin
|
410
|
+
dut_dupes = YAML.load_stream File.read(datafile)
|
411
|
+
valid_file=true
|
412
|
+
rescue => ex
|
413
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Invalid file: #{datafile} - abort processing."
|
414
|
+
Scoutui::Logger::LogMgr.instance.info ex.backtrace
|
415
|
+
end
|
416
|
+
|
417
|
+
return if !valid_file
|
418
|
+
|
419
|
+
dut_dupes.each do |e|
|
420
|
+
|
421
|
+
totalWindows = my_driver.window_handles.length
|
422
|
+
|
423
|
+
Scoutui::Logger::LogMgr.instance.info '-' * 72 if Scoutui::Utils::TestUtils.instance.isDebug?
|
424
|
+
Scoutui::Logger::LogMgr.instance.info " [Pre-cmd]: Total Windows : #{totalWindows.to_s}"
|
425
|
+
Scoutui::Logger::LogMgr.instance.info "#{i.to_s}. Processing #{e.inspect}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
426
|
+
i+=1
|
427
|
+
|
428
|
+
Scoutui::Utils::TestUtils.instance.setReq('UI')
|
429
|
+
Scoutui::Commands::Utils.instance.resetTimeout()
|
430
|
+
|
431
|
+
_action = e[STEP_KEY]["action"]
|
432
|
+
_name = e[STEP_KEY]["name"]
|
433
|
+
_url = e[STEP_KEY]["url"]
|
434
|
+
_skip = e[STEP_KEY]["skip"]
|
435
|
+
_region = e[STEP_KEY]["region"]
|
436
|
+
_reqid = e[STEP_KEY]["reqid"]
|
437
|
+
|
438
|
+
if e[STEP_KEY].has_key?("timeout")
|
439
|
+
Scoutui::Commands::Utils.instance.setTimeout(e[STEP_KEY]["timeout"])
|
440
|
+
end
|
441
|
+
|
442
|
+
|
443
|
+
|
444
|
+
|
445
|
+
if Scoutui::Utils::TestUtils.instance.isDebug?
|
446
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " action: #{_action}"
|
447
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " name: #{_name}"
|
448
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " url : #{_url}"
|
449
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " skip: #{_skip}"
|
450
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " region: #{_region}"
|
451
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " reqid: #{_reqid}"
|
452
|
+
end
|
453
|
+
|
454
|
+
if !_reqid.nil? && !_reqid.to_s.empty?
|
455
|
+
Testmgr::TestReport.instance.getReq(_reqid)
|
456
|
+
Scoutui::Utils::TestUtils.instance.setReq(_reqid)
|
457
|
+
else
|
458
|
+
puts __FILE__ + (__LINE__).to_s + " REQID was not provided"
|
459
|
+
end
|
460
|
+
|
461
|
+
skipIt = (!_skip.nil?) && (_skip.to_s.strip.downcase=='true')
|
462
|
+
Scoutui::Logger::LogMgr.instance.info "\to skip : #{skipIt}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
463
|
+
|
464
|
+
if skipIt
|
465
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " SKIP - #{_name}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
466
|
+
next
|
467
|
+
end
|
468
|
+
|
469
|
+
|
470
|
+
if !isRun(e).nil?
|
471
|
+
|
472
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " ========> RUN <================="
|
473
|
+
tmpSettings=test_settings.dup
|
474
|
+
tmpSettings["dut"]=e[STEP_KEY]["run"].to_s
|
475
|
+
|
476
|
+
Scoutui::Logger::LogMgr.instance.info " RUN Command file : #{tmpSettings["dut"]}"
|
477
|
+
processFile(eyeScout, tmpSettings, strategy)
|
478
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Completed execution of subfile"
|
479
|
+
next
|
480
|
+
|
481
|
+
end
|
482
|
+
|
483
|
+
if !(_action.nil? || _action.to_s.empty?)
|
484
|
+
|
485
|
+
# if !Scoutui::Commands::processCommand(_action, e, my_driver)
|
486
|
+
|
487
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{_action} is valid - #{Scoutui::Commands::Utils.instance.isValid?(_action).to_s}"
|
488
|
+
Testmgr::TestReport.instance.getReq('Command').get_child('isValid').add(Scoutui::Commands::Utils.instance.isValid?(_action), "Verify #{_action} is valid")
|
489
|
+
|
490
|
+
begin
|
491
|
+
|
492
|
+
|
493
|
+
_command = eyeScout.getStrategy().processCommand(_action, e)
|
494
|
+
|
495
|
+
if my_driver.window_handles.length > totalWindows
|
496
|
+
Scoutui::Logger::LogMgr.instance.info "[post-cmd] Total Windows : #{my_driver.window_handles.length.to_s}"
|
497
|
+
end
|
498
|
+
|
499
|
+
|
500
|
+
# if !eyeScout.getStrategy().processCommand(_action, e)
|
501
|
+
if !_command.wasExecuted?
|
502
|
+
processCommand(_action, e, my_driver)
|
503
|
+
end
|
504
|
+
|
505
|
+
processExpected(my_driver, e)
|
506
|
+
processAssertions(my_driver, e)
|
507
|
+
|
508
|
+
|
509
|
+
if isSnapIt(e)
|
510
|
+
if !_region.nil?
|
511
|
+
eyeScout.check_window(_name, _region)
|
512
|
+
else
|
513
|
+
eyeScout.check_window(_name)
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
517
|
+
rescue => ex
|
518
|
+
"Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
|
519
|
+
end
|
520
|
+
|
521
|
+
next
|
522
|
+
end
|
523
|
+
|
524
|
+
|
525
|
+
if e[STEP_KEY].has_key?("url")
|
526
|
+
url = e[STEP_KEY]["url"].to_s
|
527
|
+
|
528
|
+
|
529
|
+
eyeScout.getStrategy().processCommand('navigate(' + url + ')', e)
|
530
|
+
end
|
531
|
+
|
532
|
+
|
533
|
+
Scoutui::Logger::LogMgr.instance.info "\to Expected: #{e[STEP_KEY]['expected'].class.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
534
|
+
|
535
|
+
processExpected(my_driver, e)
|
536
|
+
processAssertions(my_driver, e)
|
537
|
+
|
538
|
+
if !_region.nil?
|
539
|
+
eyeScount.check_window(_name, _region)
|
540
|
+
else
|
541
|
+
eyeScout.check_window(_name)
|
542
|
+
end
|
543
|
+
|
544
|
+
Scoutui::Logger::LogMgr.instance.info "\to links : #{e[STEP_KEY]['links'].class.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
545
|
+
|
546
|
+
if e[STEP_KEY].has_key?('links')
|
547
|
+
links=e[STEP_KEY]['links']
|
548
|
+
|
549
|
+
links.each_pair do |link_name, xpath|
|
550
|
+
Scoutui::Logger::LogMgr.instance.info "\t\t#{link_name} => #{xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
551
|
+
|
552
|
+
|
553
|
+
obj = QBrowser.getObject(my_driver, xpath)
|
554
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " [click]: link object => #{obj.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
555
|
+
obj.click
|
556
|
+
|
557
|
+
if !_region.nil?
|
558
|
+
eyeScount.check_window(_name, _region)
|
559
|
+
else
|
560
|
+
eyeScout.check_window(link_name)
|
561
|
+
end
|
562
|
+
|
563
|
+
end
|
564
|
+
end
|
565
|
+
|
566
|
+
end
|
567
|
+
|
568
|
+
|
569
|
+
end
|
570
|
+
|
571
|
+
end
|
572
|
+
|
573
|
+
|
574
|
+
end
|