scoutui 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/capabilities/win10.chrome46.json +6 -0
- data/examples/ex1/test-example.sh +4 -4
- data/examples/ex1/test.config.json +1 -1
- data/examples/ex2/appmodel/common.json +51 -0
- data/examples/ex2/appmodel/page_model.json +106 -0
- data/examples/ex2/appmodel/register.model.json +42 -0
- data/examples/ex2/commands/commands.basic.appmodel.yml +8 -0
- data/examples/ex2/commands/commands.yml +115 -0
- data/examples/ex2/commands/ex1.yml +7 -0
- data/examples/ex2/commands/ex1c.yml +8 -0
- data/examples/ex2/commands/ex1d.yml +22 -0
- data/examples/ex2/commands/ex2.hover.yml +43 -0
- data/examples/ex2/commands/ex2.yml +24 -0
- data/examples/ex2/data.json +6 -0
- data/examples/ex2/test-configs/test.config.basic.json +12 -0
- data/examples/ex2/{test.config.json → test-configs/test.config.json} +8 -2
- data/examples/ex2/tests/run-test.sh +125 -0
- data/examples/ex2/tests/test-basic-appmodel.sh +14 -0
- data/examples/ex2/{test-example.sh → tests/test-example.sh} +3 -3
- data/examples/ex2/tests/test-example1a.sh +16 -0
- data/examples/ex2/tests/test-example1b.sh +13 -0
- data/examples/ex2/tests/test-example1c.sh +15 -0
- data/examples/ex2/tests/test-example1d.sh +15 -0
- data/examples/ex2/tests/test-example2.forms.eyes.sh +40 -0
- data/examples/ex2/tests/test-example2.hover.eyes.sh +40 -0
- data/examples/ex2/tests/test-example2.hover.sh +26 -0
- data/examples/ex2/tests/test-example2.sh +43 -0
- data/examples/ex2/tests/test-example3.sauce.sh +77 -0
- data/examples/ex2/tests/test-example3.sh +41 -0
- data/lib/scoutui/appmodel/q_model.rb +105 -0
- data/lib/scoutui/base/assertions.rb +570 -10
- data/lib/scoutui/base/q_applitools.rb +2 -2
- data/lib/scoutui/base/q_browser.rb +38 -5
- data/lib/scoutui/base/q_form.rb +7 -7
- data/lib/scoutui/base/test_scout.rb +2 -1
- data/lib/scoutui/base/user_vars.rb +29 -2
- data/lib/scoutui/base/visual_test_framework.rb +308 -24
- data/lib/scoutui/commands/click_object.rb +86 -13
- data/lib/scoutui/commands/commands.rb +20 -7
- data/lib/scoutui/commands/jsalert/action_jsalert.rb +1 -1
- data/lib/scoutui/commands/mouse_over.rb +94 -8
- data/lib/scoutui/commands/select_object.rb +1 -1
- data/lib/scoutui/commands/select_window.rb +43 -0
- data/lib/scoutui/commands/strategy.rb +40 -3
- data/lib/scoutui/commands/type.rb +99 -11
- data/lib/scoutui/commands/update_url.rb +1 -1
- data/lib/scoutui/commands/utils.rb +43 -5
- data/lib/scoutui/commands/verify_element.rb +38 -7
- data/lib/scoutui/eyes/eye_factory.rb +7 -1
- data/lib/scoutui/eyes/eye_scout.rb +20 -7
- data/lib/scoutui/utils/utils.rb +59 -1
- data/lib/scoutui/version.rb +1 -1
- data/scoutui.gemspec +5 -4
- metadata +77 -39
- data/examples/ex2/commands.yml +0 -35
- data/examples/ex2/page_model.json +0 -28
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
|
-
require 'eyes_selenium'
|
3
|
-
require 'selenium-webdriver'
|
2
|
+
#require 'eyes_selenium'
|
3
|
+
#require 'selenium-webdriver'
|
4
4
|
|
5
5
|
module Scoutui::Base
|
6
6
|
|
@@ -35,9 +35,37 @@ module Scoutui::Base
|
|
35
35
|
rc
|
36
36
|
end
|
37
37
|
|
38
|
-
def self.getFirstObject(drv, _locator, _timeout=30)
|
39
38
|
|
40
|
-
|
39
|
+
def self.existsAlert?(drv)
|
40
|
+
rc=false
|
41
|
+
|
42
|
+
begin
|
43
|
+
alert=drv.switch_to.alert
|
44
|
+
|
45
|
+
if alert.is_a?(Selenium::WebDriver::Alert)
|
46
|
+
rc=true
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
51
|
+
;
|
52
|
+
end
|
53
|
+
|
54
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " existsAlert?() => #{rc}"
|
55
|
+
rc
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.getFirstObject(drv, _locator, _timeout=nil)
|
59
|
+
|
60
|
+
if _timeout.nil?
|
61
|
+
_timeout = Scoutui::Utils::TestUtils.instance.getDefaultWait
|
62
|
+
end
|
63
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " getFirstObject(#{_locator}, #{_timeout})"
|
64
|
+
|
65
|
+
if _timeout > 30
|
66
|
+
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " A #{_timeout} second timeout is set high, may slow down tests"
|
67
|
+
end
|
68
|
+
|
41
69
|
rc=nil
|
42
70
|
locator=_locator
|
43
71
|
|
@@ -64,7 +92,12 @@ module Scoutui::Base
|
|
64
92
|
end
|
65
93
|
|
66
94
|
# http://stackoverflow.com/questions/15164742/combining-implicit-wait-and-explicit-wait-together-results-in-unexpected-wait-ti#answer-15174978
|
67
|
-
def self.getObject(drv, obj, _timeout=
|
95
|
+
def self.getObject(drv, obj, _timeout=nil)
|
96
|
+
|
97
|
+
if _timeout.nil?
|
98
|
+
_timeout = Scoutui::Utils::TestUtils.instance.getDefaultWait
|
99
|
+
end
|
100
|
+
|
68
101
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " getObject(#{obj}) class:#{obj.class.to_s} hash : #{obj.is_a?(Hash)}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
69
102
|
rc=nil
|
70
103
|
visible_when=nil
|
data/lib/scoutui/base/q_form.rb
CHANGED
@@ -38,7 +38,7 @@ module Scoutui::Base
|
|
38
38
|
|
39
39
|
_action=nil
|
40
40
|
|
41
|
-
obj = Scoutui::Base::QBrowser.getObject(drv, locator)
|
41
|
+
obj = Scoutui::Base::QBrowser.getObject(drv, locator, Scoutui::Commands::Utils.instance.getTimeout)
|
42
42
|
_type = obj.attribute('type').to_s
|
43
43
|
_tag = obj.tag_name.to_s
|
44
44
|
|
@@ -111,7 +111,7 @@ module Scoutui::Base
|
|
111
111
|
if v.is_a?(Hash) && v.has_key?(k) && v.has_key?('locator')
|
112
112
|
|
113
113
|
|
114
|
-
obj = Scoutui::Base::QBrowser.getObject(drv, v['locator'])
|
114
|
+
obj = Scoutui::Base::QBrowser.getObject(drv, v['locator'], Scoutui::Commands::Utils.instance.getTimeout)
|
115
115
|
|
116
116
|
if !v[k].match(/always/i).nil?
|
117
117
|
_rc = !obj.nil? && obj.is_a?(Selenium::WebDriver::Element) && obj.displayed?
|
@@ -143,18 +143,18 @@ module Scoutui::Base
|
|
143
143
|
|
144
144
|
Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " <cond, obj, when>::<#{_cond}, #{_obj}, #{_expected_val}"
|
145
145
|
|
146
|
-
depObj = Scoutui::Base::QBrowser.getObject(drv, _obj)
|
146
|
+
depObj = Scoutui::Base::QBrowser.getObject(drv, _obj, Scoutui::Commands::Utils.instance.getTimeout)
|
147
147
|
Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " hit => #{depObj.class.to_s} tag:#{depObj.tag_name}" if !depObj.nil?
|
148
148
|
|
149
149
|
desc=nil
|
150
150
|
if _expected_val.match(/true/i)
|
151
|
-
obj = Scoutui::Base::QBrowser.getObject(drv, v['locator'])
|
151
|
+
obj = Scoutui::Base::QBrowser.getObject(drv, v['locator'], Scoutui::Commands::Utils.instance.getTimeout)
|
152
152
|
|
153
153
|
_rc = !depObj.nil? && depObj.displayed? && !obj.nil? && obj.displayed?
|
154
154
|
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{v['locator']} is displayed since #{_obj} is displayed - #{_rc.to_s}"
|
155
155
|
Testmgr::TestReport.instance.getReq(_req).tc(k).add(_rc, "Verify #{v['locator']} is displayed since #{_obj} is displayed")
|
156
156
|
elsif _expected_val.match(/false/i)
|
157
|
-
obj = Scoutui::Base::QBrowser.getObject(drv, v['locator'])
|
157
|
+
obj = Scoutui::Base::QBrowser.getObject(drv, v['locator'], Scoutui::Commands::Utils.instance.getTimeout)
|
158
158
|
|
159
159
|
_rc = depObj.nil? && !obj.nil? && obj.displayed?
|
160
160
|
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{v['locator']} is displayed since #{_obj} is not visible. - #{_rc.to_s}"
|
@@ -166,7 +166,7 @@ module Scoutui::Base
|
|
166
166
|
_obj=_match[1]
|
167
167
|
_expected_val=_match[2]
|
168
168
|
|
169
|
-
obj = Scoutui::Base::QBrowser.getObject(drv, _obj)
|
169
|
+
obj = Scoutui::Base::QBrowser.getObject(drv, _obj, Scoutui::Commands::Utils.instance.getTimeout)
|
170
170
|
Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " hit => #{obj.class.to_s} tag:#{obj.tag_name}"
|
171
171
|
|
172
172
|
|
@@ -220,7 +220,7 @@ module Scoutui::Base
|
|
220
220
|
|
221
221
|
if !drv.nil?
|
222
222
|
@drv=drv
|
223
|
-
obj = Scoutui::Base::QBrowser.getObject(drv, _xpath)
|
223
|
+
obj = Scoutui::Base::QBrowser.getObject(drv, _xpath, Scoutui::Commands::Utils.instance.getTimeout)
|
224
224
|
|
225
225
|
_type = obj.attribute('type').to_s
|
226
226
|
_tag = obj.tag_name.to_s
|
@@ -101,7 +101,8 @@ module Scoutui::Base
|
|
101
101
|
teardown()
|
102
102
|
|
103
103
|
rescue => ex
|
104
|
-
Scoutui::Logger::LogMgr.instance.
|
104
|
+
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " Error during processing: #{ex}"
|
105
|
+
Scoutui::Logger::LogMgr.instance.warn ex.backtrace
|
105
106
|
ensure
|
106
107
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__ ).to_s + " Close Eyes" if Scoutui::Utils::TestUtils.instance.isDebug?
|
107
108
|
@eyeScout.closeOut()
|
@@ -42,9 +42,34 @@ module Scoutui::Base
|
|
42
42
|
@globals[:host].to_s
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def normalize(s)
|
46
|
+
_vars = s.scan(/(\$\{.*?\})/)
|
47
|
+
_vars.each do | _v|
|
48
|
+
if _v.length==1
|
49
|
+
|
50
|
+
_u = Scoutui::Base::UserVars.instance.get(_v[0].to_s)
|
51
|
+
puts __FILE__ + (__LINE__).to_s + " Normalize(#{_v}) => #{_u}"
|
52
|
+
|
53
|
+
s.gsub!(_v[0].to_s, _u)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
s
|
59
|
+
end
|
60
|
+
|
61
|
+
def get(_k)
|
62
|
+
|
63
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " get(#{_k})"
|
46
64
|
foundKey=true
|
47
65
|
|
66
|
+
k=_k
|
67
|
+
|
68
|
+
if _k.is_a?(Array)
|
69
|
+
k=_k[0].to_s
|
70
|
+
end
|
71
|
+
|
72
|
+
|
48
73
|
v=k
|
49
74
|
|
50
75
|
_rc = k.match(/\$\{(.*)\}$/)
|
@@ -56,13 +81,15 @@ module Scoutui::Base
|
|
56
81
|
k=:password
|
57
82
|
elsif k=='${host}'
|
58
83
|
k=:host
|
84
|
+
elsif k=='${lang}'
|
85
|
+
k=:lang
|
59
86
|
elsif k.is_a?(Symbol)
|
60
87
|
foundKey=true
|
61
88
|
elsif k=='__random_email__'
|
62
89
|
return Faker::Internet.email
|
63
90
|
elsif !_rc.nil?
|
64
91
|
k=_rc[1].to_s
|
65
|
-
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " User Var found => #{k}"
|
92
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " User Var found => #{k}"
|
66
93
|
if Scoutui::Utils::TestUtils.instance.getTestConfig().has_key?("user_vars")
|
67
94
|
|
68
95
|
if Scoutui::Utils::TestUtils.instance.getTestConfig()["user_vars"].has_key?(k)
|
@@ -12,6 +12,189 @@ module Scoutui::Base
|
|
12
12
|
end
|
13
13
|
|
14
14
|
|
15
|
+
def self.processPageElement(my_driver, k, xpath)
|
16
|
+
|
17
|
+
puts __FILE__ + (__LINE__).to_s + " processPageElement(#{xpath})"
|
18
|
+
processed=false
|
19
|
+
_obj=nil
|
20
|
+
|
21
|
+
if !xpath.match(/^\s*page\(.*\)\s*$/).nil?
|
22
|
+
|
23
|
+
processed=true
|
24
|
+
|
25
|
+
# Check if this is a form
|
26
|
+
|
27
|
+
page_elt = Scoutui::Utils::TestUtils.instance.getPageElement(xpath)
|
28
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Process page request #{page_elt} => #{page_elt.class.to_s}"
|
29
|
+
|
30
|
+
|
31
|
+
sub_elts=0
|
32
|
+
if page_elt.is_a?(Hash)
|
33
|
+
sub_elts = page_elt.select { |_s| page_elt[_s].has_key?("locator") if page_elt[_s].is_a?(Hash) && !page_elt[_s].nil? }.size
|
34
|
+
end
|
35
|
+
|
36
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " SubElts => #{sub_elts}"
|
37
|
+
|
38
|
+
if page_elt.is_a?(Hash) && page_elt.has_key?('locator')
|
39
|
+
|
40
|
+
##
|
41
|
+
# expected:
|
42
|
+
# wait: page(abc).get(def) where this page_elt has "locator"
|
43
|
+
|
44
|
+
xpath = page_elt['locator'].to_s
|
45
|
+
|
46
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, xpath, Scoutui::Commands::Utils.instance.getTimeout)
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
_req = nil
|
52
|
+
|
53
|
+
if page_elt.has_key?('reqid')
|
54
|
+
_req=page_elt['reqid'].to_s
|
55
|
+
end
|
56
|
+
|
57
|
+
Scoutui::Base::Assertions.instance.assertPageElement(k, page_elt, _obj, my_driver, _req)
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
elsif sub_elts > 0
|
62
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Validate form"
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
page_elt.each_pair do |_k, _v|
|
67
|
+
|
68
|
+
begin
|
69
|
+
|
70
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " k,v :: #{_k.to_s}, #{_v.to_s} (#{_v.class.to_s})"
|
71
|
+
|
72
|
+
_obj=nil
|
73
|
+
|
74
|
+
if _v.is_a?(Array)
|
75
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Arrays - TBD => #{_v}"
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
if _v.is_a?(String)
|
80
|
+
puts __FILE__ + (__LINE__).to_s + " #{_v} is a string - next"
|
81
|
+
next
|
82
|
+
end
|
83
|
+
|
84
|
+
if _v.has_key?('assert_when') && _v['assert_when'].match(/role\s*\=/i)
|
85
|
+
_role = _v['assert_when'].match(/role\s*\=(.*)/i)[1].to_s
|
86
|
+
_expected_role = Scoutui::Utils::TestUtils.instance.getRole()
|
87
|
+
|
88
|
+
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?
|
89
|
+
|
90
|
+
if !_expected_role.nil? && !_role.match(/#{_expected_role}/i)
|
91
|
+
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?
|
92
|
+
next
|
93
|
+
elsif _expected_role.nil?
|
94
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Skip role based assertion since role was not provided" if Scoutui::Utils::TestUtils.instance.isDebug?
|
95
|
+
next
|
96
|
+
end
|
97
|
+
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?
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
if Scoutui::Base::Assertions.instance.visible_when_skip(_k, _v)
|
102
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " SKIP #{_k.to_s} - #{_v.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
103
|
+
next
|
104
|
+
end
|
105
|
+
|
106
|
+
_req = nil
|
107
|
+
|
108
|
+
if _v.has_key?('reqid')
|
109
|
+
_req=_v['reqid'].to_s
|
110
|
+
end
|
111
|
+
|
112
|
+
if _v.has_key?('locator')
|
113
|
+
_locator = _v['locator'].to_s
|
114
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " " + _k.to_s + " => " + _locator
|
115
|
+
|
116
|
+
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
117
|
+
|
118
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator, Scoutui::Commands::Utils.instance.getTimeout())
|
119
|
+
|
120
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{(!_obj.nil?).to_s}" # if Scoutui::Utils::TestUtils.instance.isDebug?
|
121
|
+
end
|
122
|
+
|
123
|
+
if Scoutui::Base::Assertions.instance.visible_when_always(_k, _v, _obj, _req)
|
124
|
+
next
|
125
|
+
elsif Scoutui::Base::Assertions.instance.visible_when_never(_k, _v, _obj, _req)
|
126
|
+
next
|
127
|
+
elsif Scoutui::Base::Assertions.instance.visible_when_title(_k, _v, _obj, my_driver, _req)
|
128
|
+
next
|
129
|
+
elsif Scoutui::Base::Assertions.instance.visible_when_value(_k, _v, my_driver, _req)
|
130
|
+
next
|
131
|
+
elsif _v.has_key?('visible_when') && !_v['visible_when'].is_a?(Array)
|
132
|
+
|
133
|
+
if _v['visible_when'].match(/role\=/i)
|
134
|
+
_role = _v['visible_when'].match(/role\=(.*)/i)[1].to_s
|
135
|
+
_expected_role = Scoutui::Utils::TestUtils.instance.getRole()
|
136
|
+
|
137
|
+
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?
|
138
|
+
|
139
|
+
if _role==_expected_role.to_s
|
140
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{_k} #{_locator} visible when role #{_role} - #{!_obj.nil?.to_s}"
|
141
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify #{_k} #{_locator} visible when role #{_role}")
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
elsif _v.has_key?('visible_when') && _v['visible_when'].is_a?(Array)
|
146
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " visible_when : (Array) - TBD #{_v['visible_when']}"
|
147
|
+
|
148
|
+
_v['visible_when'].each do |_vwhen|
|
149
|
+
puts __FILE__ + (__LINE__).to_s + " #{_vwhen} #{_vwhen.class}"
|
150
|
+
|
151
|
+
Scoutui::Base::Assertions.instance.assertPageElement(_k, _vwhen, _obj, my_driver, _req)
|
152
|
+
|
153
|
+
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
rescue => ex
|
159
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Error during processing: #{ex}"
|
160
|
+
puts __FILE__ + (__LINE__).to_s + "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
return
|
167
|
+
|
168
|
+
|
169
|
+
elsif xpath.is_a?(Hash)
|
170
|
+
xpath.each_pair do |_k, _v|
|
171
|
+
|
172
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " k,v :: #{_k.to_s}, #{_v.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
173
|
+
|
174
|
+
if _v.has_key?('locator')
|
175
|
+
_locator = _v['locator'].to_s
|
176
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " " + _k.to_s + " => " + _locator if Scoutui::Utils::TestUtils.instance.isDebug?
|
177
|
+
|
178
|
+
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
179
|
+
|
180
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator)
|
181
|
+
|
182
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
# next
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
_obj
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
|
15
198
|
def self.processCommand(_action, e, my_driver)
|
16
199
|
_req = Scoutui::Utils::TestUtils.instance.getReq()
|
17
200
|
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " === Process ACTION : #{_action} ===" if Scoutui::Utils::TestUtils.instance.isDebug?
|
@@ -57,7 +240,7 @@ module Scoutui::Base
|
|
57
240
|
|
58
241
|
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + "Process TYPE #{_val} into #{_xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
59
242
|
|
60
|
-
obj = Scoutui::Base::QBrowser.getObject(my_driver, _xpath)
|
243
|
+
obj = Scoutui::Base::QBrowser.getObject(my_driver, _xpath, Scoutui::Commands::Utils.instance.getTimeout)
|
61
244
|
|
62
245
|
if !obj.nil? && !obj.attribute('type').downcase.match(/(text|password|email)/).nil?
|
63
246
|
Scoutui::Logger::LogMgr.instance.commands.info "send_keys(#{_val})"
|
@@ -139,6 +322,11 @@ module Scoutui::Base
|
|
139
322
|
return
|
140
323
|
end
|
141
324
|
|
325
|
+
if !e[STEP_KEY]['assertions'].is_a?(Array)
|
326
|
+
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " \'assertions\' field must be type Array."
|
327
|
+
return
|
328
|
+
end
|
329
|
+
|
142
330
|
_req = Scoutui::Utils::TestUtils.instance.getReq()
|
143
331
|
|
144
332
|
puts __FILE__ + (__LINE__).to_s + "======= #{e[STEP_KEY]['assertions']} ========="
|
@@ -161,15 +349,33 @@ module Scoutui::Base
|
|
161
349
|
_v=a
|
162
350
|
|
163
351
|
|
164
|
-
if _v.has_key?('
|
352
|
+
if _v.has_key?('reqid')
|
353
|
+
_req = _v['reqid']
|
354
|
+
|
355
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Temp req #{_req} for assertion"
|
356
|
+
end
|
357
|
+
|
358
|
+
|
359
|
+
if _v.has_key?('locator') && _v['locator'].is_a?(String) && !_v.has_key?('visible_when')
|
360
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " Process pageObject #{_v}"
|
361
|
+
isVisible=Scoutui::Base::Assertions.instance.isVisible(my_driver, _v['locator'], _req)
|
362
|
+
elsif _v.has_key?('locator')
|
165
363
|
_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
364
|
|
168
|
-
|
365
|
+
if !_locator.match(/^page\([\w\d]+\)/).nil?
|
366
|
+
_obj = processPageElement(my_driver, _k, _locator)
|
367
|
+
puts __FILE__ + (__LINE__).to_s + " Processed #{_locator} => #{_obj.class.to_s}"
|
368
|
+
else
|
369
|
+
|
370
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " " + _k.to_s + " => " + _locator
|
371
|
+
|
372
|
+
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
169
373
|
|
170
|
-
|
374
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator, Scoutui::Commands::Utils.instance.getTimeout())
|
375
|
+
|
376
|
+
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
377
|
+
end
|
171
378
|
|
172
|
-
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
173
379
|
end
|
174
380
|
|
175
381
|
if _v.has_key?('visible_when')
|
@@ -177,9 +383,8 @@ module Scoutui::Base
|
|
177
383
|
if _v['visible_when'].match(/always/i)
|
178
384
|
Scoutui::Logger::LogMgr.instance.asserts.info __FILE__ + (__LINE__).to_s + " Verify assertion #{_k} - #{_locator} visible - #{!_obj.nil?.to_s}"
|
179
385
|
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify assertion #{_k} - #{_locator} visible")
|
180
|
-
elsif
|
181
|
-
|
182
|
-
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(obj.nil?, "Verify assertion #{_k} #{_locator} not visible")
|
386
|
+
elsif Scoutui::Base::Assertions.instance.visible_when_never(_k, _v, _obj, _req)
|
387
|
+
;
|
183
388
|
elsif _v['visible_when'].match(/role\=/i)
|
184
389
|
_role = _v['visible_when'].match(/role\=(.*)/i)[1].to_s
|
185
390
|
_expected_role = Scoutui::Utils::TestUtils.instance.getRole()
|
@@ -192,6 +397,10 @@ module Scoutui::Base
|
|
192
397
|
end
|
193
398
|
|
194
399
|
end
|
400
|
+
|
401
|
+
|
402
|
+
|
403
|
+
|
195
404
|
end
|
196
405
|
|
197
406
|
|
@@ -234,8 +443,31 @@ module Scoutui::Base
|
|
234
443
|
|
235
444
|
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + "\t\t#{link_name} => #{xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
236
445
|
|
446
|
+
|
447
|
+
# Check if the verification is a "windows.*" verification
|
448
|
+
|
449
|
+
if !xpath.match(/window[s]\.length\s*\(\d+\)/).nil?
|
450
|
+
_expected_length=xpath.match(/window[s]\.length\s*\((.*)\)/i)[1].to_s
|
451
|
+
|
452
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + "\tExpect window.length is #{_expected_length}"
|
453
|
+
|
454
|
+
if _expected_length =~ /\A\d+\z/
|
455
|
+
# 5150
|
456
|
+
totalWindows = my_driver.window_handles.length
|
457
|
+
|
458
|
+
if Scoutui::Utils::TestUtils.instance.assertExpected?
|
459
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('window_size').add(totalWindows==_expected_length.to_i, "Verify number of windows is #{_expected_length} actual(#{totalWindows})")
|
460
|
+
end
|
461
|
+
|
462
|
+
end
|
463
|
+
|
464
|
+
next
|
465
|
+
end
|
466
|
+
|
467
|
+
|
237
468
|
if !xpath.match(/\$\{.*\}/).nil?
|
238
|
-
|
469
|
+
# xpath = Scoutui::Base::UserVars.instance.get(xpath)
|
470
|
+
xpath = Scoutui::Base::UserVars.instance.normalize(xpath)
|
239
471
|
end
|
240
472
|
|
241
473
|
|
@@ -318,10 +550,18 @@ module Scoutui::Base
|
|
318
550
|
|
319
551
|
if _v['visible_when'].match(/always/i)
|
320
552
|
Scoutui::Logger::LogMgr.instance.asserts.info __FILE__ + (__LINE__).to_s + " Verify #{_k} - #{_locator} visible - #{!_obj.nil?.to_s}"
|
321
|
-
|
553
|
+
|
554
|
+
if Scoutui::Utils::TestUtils.instance.assertExpected?
|
555
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify #{_k} - #{_locator} visible")
|
556
|
+
end
|
557
|
+
|
322
558
|
elsif _v['visible_when'].match(/never/i)
|
323
|
-
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{_k} #{_locator}
|
324
|
-
|
559
|
+
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{_k} #{_locator} never visible - #{obj.nil?.to_s}"
|
560
|
+
|
561
|
+
if Scoutui::Utils::TestUtils.instance.assertExpected?
|
562
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(obj.nil?, "Verify #{_k} #{_locator} not visible")
|
563
|
+
end
|
564
|
+
|
325
565
|
elsif _v['visible_when'].match(/role\=/i)
|
326
566
|
_role = _v['visible_when'].match(/role\=(.*)/i)[1].to_s
|
327
567
|
_expected_role = Scoutui::Utils::TestUtils.instance.getRole()
|
@@ -330,7 +570,11 @@ module Scoutui::Base
|
|
330
570
|
|
331
571
|
if _role==_expected_role.to_s
|
332
572
|
Scoutui::Logger::LogMgr.instance.asserts.info "Verify #{_k} #{_locator} visible when role #{_role} - #{!_obj.nil?.to_s}"
|
333
|
-
|
573
|
+
|
574
|
+
if Scoutui::Utils::TestUtils.instance.assertExpected?
|
575
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!_obj.nil?, "Verify #{_k} #{_locator} visible when role #{_role}")
|
576
|
+
end
|
577
|
+
|
334
578
|
end
|
335
579
|
|
336
580
|
end
|
@@ -359,7 +603,7 @@ module Scoutui::Base
|
|
359
603
|
|
360
604
|
# _locator = Scoutui::Utils::TestUtils.instance.getPageElement(_v['locator'])
|
361
605
|
|
362
|
-
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator)
|
606
|
+
_obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, _locator, Scoutui::Commands::Utils.instance.getTimeout())
|
363
607
|
|
364
608
|
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " HIT #{_locator} => #{!_obj.nil?}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
365
609
|
end
|
@@ -372,13 +616,16 @@ module Scoutui::Base
|
|
372
616
|
|
373
617
|
end
|
374
618
|
|
375
|
-
obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, xpath)
|
619
|
+
obj = Scoutui::Base::QBrowser.getFirstObject(my_driver, xpath, Scoutui::Commands::Utils.instance.getTimeout())
|
376
620
|
|
377
621
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " obj : #{obj}"
|
378
622
|
|
379
623
|
Scoutui::Logger::LogMgr.instance.asserts.info __FILE__ + (__LINE__).to_s + " Verify #{xpath} visible - #{obj.kind_of?(Selenium::WebDriver::Element).to_s}"
|
380
624
|
|
381
|
-
|
625
|
+
|
626
|
+
if Scoutui::Utils::TestUtils.instance.assertExpected?
|
627
|
+
Testmgr::TestReport.instance.getReq(_req).get_child('visible_when').add(!obj.nil?, __FILE__ + (__LINE__).to_s + " Verify #{xpath} visible")
|
628
|
+
end
|
382
629
|
|
383
630
|
if obj.nil?
|
384
631
|
Scoutui::Logger::LogMgr.instance.warn " NOT FOUND : #{link_name} with xpath #{xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
@@ -410,7 +657,7 @@ module Scoutui::Base
|
|
410
657
|
dut_dupes = YAML.load_stream File.read(datafile)
|
411
658
|
valid_file=true
|
412
659
|
rescue => ex
|
413
|
-
Scoutui::Logger::LogMgr.instance.
|
660
|
+
Scoutui::Logger::LogMgr.instance.fatal __FILE__ + (__LINE__).to_s + " Invalid file: #{datafile} - abort processing."
|
414
661
|
Scoutui::Logger::LogMgr.instance.info ex.backtrace
|
415
662
|
end
|
416
663
|
|
@@ -426,7 +673,7 @@ module Scoutui::Base
|
|
426
673
|
i+=1
|
427
674
|
|
428
675
|
Scoutui::Utils::TestUtils.instance.setReq('UI')
|
429
|
-
Scoutui::Commands::Utils.instance.resetTimeout()
|
676
|
+
Scoutui::Commands::Utils.instance.resetTimeout(Scoutui::Utils::TestUtils.instance.getDefaultWait)
|
430
677
|
|
431
678
|
_action = e[STEP_KEY]["action"]
|
432
679
|
_name = e[STEP_KEY]["name"]
|
@@ -434,14 +681,12 @@ module Scoutui::Base
|
|
434
681
|
_skip = e[STEP_KEY]["skip"]
|
435
682
|
_region = e[STEP_KEY]["region"]
|
436
683
|
_reqid = e[STEP_KEY]["reqid"]
|
684
|
+
_execute_when = e[STEP_KEY]["execute_when"]
|
437
685
|
|
438
686
|
if e[STEP_KEY].has_key?("timeout")
|
439
687
|
Scoutui::Commands::Utils.instance.setTimeout(e[STEP_KEY]["timeout"])
|
440
688
|
end
|
441
689
|
|
442
|
-
|
443
|
-
|
444
|
-
|
445
690
|
if Scoutui::Utils::TestUtils.instance.isDebug?
|
446
691
|
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " action: #{_action}"
|
447
692
|
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " name: #{_name}"
|
@@ -455,9 +700,42 @@ module Scoutui::Base
|
|
455
700
|
Testmgr::TestReport.instance.getReq(_reqid)
|
456
701
|
Scoutui::Utils::TestUtils.instance.setReq(_reqid)
|
457
702
|
else
|
458
|
-
|
703
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " REQID was not provided"
|
459
704
|
end
|
460
705
|
|
706
|
+
|
707
|
+
if !_execute_when.nil? && !_execute_when.to_s.empty?
|
708
|
+
|
709
|
+
if _execute_when.is_a?(String) && _execute_when.match(/^\s*(existsalert|existsalert|exists\(alert\))/i)
|
710
|
+
|
711
|
+
# puts __FILE__ + (__LINE__).to_s + " DEBUG - pause"; gets;
|
712
|
+
|
713
|
+
if QBrowser.existsAlert?(my_driver)
|
714
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " Execution continues - alert IS present #{e[STEP_KEY]}"
|
715
|
+
|
716
|
+
# puts __FILE__ + (__LINE__).to_s + " DEBUG - pause2"; gets;
|
717
|
+
|
718
|
+
|
719
|
+
else
|
720
|
+
# puts __FILE__ + (__LINE__).to_s + " + Execution skipped - alert is NOT present";; gets()
|
721
|
+
next;
|
722
|
+
end
|
723
|
+
|
724
|
+
|
725
|
+
elsif _execute_when.is_a?(String)
|
726
|
+
_rc=Scoutui::Base::Assertions.instance.isVisible(my_driver, _execute_when, _reqid, true)
|
727
|
+
|
728
|
+
puts __FILE__ + (__LINE__).to_s + " EXECUTE_WHEN #{_rc}";
|
729
|
+
|
730
|
+
if !_rc
|
731
|
+
Scoutui::Logger::LogMgr.instance.info " Execute_When: true - skip #{e[STEP_KEY]}"
|
732
|
+
next
|
733
|
+
end
|
734
|
+
end
|
735
|
+
|
736
|
+
end
|
737
|
+
|
738
|
+
|
461
739
|
skipIt = (!_skip.nil?) && (_skip.to_s.strip.downcase=='true')
|
462
740
|
Scoutui::Logger::LogMgr.instance.info "\to skip : #{skipIt}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
463
741
|
|
@@ -467,6 +745,8 @@ module Scoutui::Base
|
|
467
745
|
end
|
468
746
|
|
469
747
|
|
748
|
+
|
749
|
+
|
470
750
|
if !isRun(e).nil?
|
471
751
|
|
472
752
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " ========> RUN <================="
|
@@ -489,6 +769,10 @@ module Scoutui::Base
|
|
489
769
|
|
490
770
|
begin
|
491
771
|
|
772
|
+
if _action.is_a?(String) && _action=='stop'
|
773
|
+
Scoutui::Logger::LogMgr.instance.info " STOP TEST"
|
774
|
+
break;
|
775
|
+
end
|
492
776
|
|
493
777
|
_command = eyeScout.getStrategy().processCommand(_action, e)
|
494
778
|
|
@@ -550,7 +834,7 @@ module Scoutui::Base
|
|
550
834
|
Scoutui::Logger::LogMgr.instance.info "\t\t#{link_name} => #{xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
551
835
|
|
552
836
|
|
553
|
-
obj = QBrowser.getObject(my_driver, xpath)
|
837
|
+
obj = QBrowser.getObject(my_driver, xpath, Scoutui::Commands::Utils.instance.getTimeout)
|
554
838
|
Scoutui::Logger::LogMgr.instance.info __FILE__ + (__LINE__).to_s + " [click]: link object => #{obj.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
|
555
839
|
obj.click
|
556
840
|
|