scoutui 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/CODE_OF_CONDUCT.md +13 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +154 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/scoutui_driver.rb +22 -0
  12. data/bin/setup +7 -0
  13. data/examples/ex1/commands.holidays.yml +45 -0
  14. data/examples/ex1/commands.yml +25 -0
  15. data/examples/ex1/test-example.sh +38 -0
  16. data/examples/ex1/test.config.json +16 -0
  17. data/examples/ex2/commands.yml +35 -0
  18. data/examples/ex2/page_model.json +28 -0
  19. data/examples/ex2/test-example.sh +39 -0
  20. data/examples/ex2/test.config.json +25 -0
  21. data/lib/scoutui.rb +8 -0
  22. data/lib/scoutui/appmodel/q_model.rb +82 -0
  23. data/lib/scoutui/base/assertions.rb +62 -0
  24. data/lib/scoutui/base/q_accounts.rb +52 -0
  25. data/lib/scoutui/base/q_applitools.rb +127 -0
  26. data/lib/scoutui/base/q_browser.rb +185 -0
  27. data/lib/scoutui/base/q_form.rb +261 -0
  28. data/lib/scoutui/base/test_scout.rb +120 -0
  29. data/lib/scoutui/base/test_settings.rb +109 -0
  30. data/lib/scoutui/base/user_vars.rb +108 -0
  31. data/lib/scoutui/base/visual_test_framework.rb +574 -0
  32. data/lib/scoutui/commands/click_object.rb +45 -0
  33. data/lib/scoutui/commands/command.rb +56 -0
  34. data/lib/scoutui/commands/commands.rb +133 -0
  35. data/lib/scoutui/commands/exists_alert.rb +54 -0
  36. data/lib/scoutui/commands/fill_form.rb +56 -0
  37. data/lib/scoutui/commands/jsalert/action_jsalert.rb +58 -0
  38. data/lib/scoutui/commands/mouse_over.rb +31 -0
  39. data/lib/scoutui/commands/pause.rb +26 -0
  40. data/lib/scoutui/commands/select_object.rb +54 -0
  41. data/lib/scoutui/commands/strategy.rb +202 -0
  42. data/lib/scoutui/commands/submit_form.rb +44 -0
  43. data/lib/scoutui/commands/type.rb +44 -0
  44. data/lib/scoutui/commands/update_url.rb +45 -0
  45. data/lib/scoutui/commands/utils.rb +128 -0
  46. data/lib/scoutui/commands/verify_element.rb +198 -0
  47. data/lib/scoutui/commands/verify_form.rb +26 -0
  48. data/lib/scoutui/eyes/eye_factory.rb +76 -0
  49. data/lib/scoutui/eyes/eye_scout.rb +239 -0
  50. data/lib/scoutui/logger/log_mgr.rb +105 -0
  51. data/lib/scoutui/navigator.rb +24 -0
  52. data/lib/scoutui/utils/utils.rb +352 -0
  53. data/lib/scoutui/version.rb +3 -0
  54. data/scoutui.gemspec +35 -0
  55. metadata +54 -2
  56. data/pkg/scoutui-2.0.0.gem +0 -0
@@ -0,0 +1,45 @@
1
+ require_relative './commands'
2
+
3
+ module Scoutui::Commands
4
+
5
+ class ClickObject < Command
6
+
7
+
8
+ def execute(drv)
9
+ @drv=drv if !drv.nil?
10
+
11
+ _xpath = @cmd.match(/click\s*\((.*)\)/)[1].to_s.strip
12
+ Scoutui::Logger::LogMgr.instance.command.info __FILE__ + (__LINE__).to_s + " clickObject => #{_xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
13
+
14
+ _xpath = Scoutui::Base::UserVars.instance.get(_xpath)
15
+
16
+ Scoutui::Logger::LogMgr.instance.command.info __FILE__ + (__LINE__).to_s + " | translate : #{_xpath}" if Scoutui::Utils::TestUtils.instance.isDebug?
17
+
18
+ _clicked=false
19
+
20
+ begin
21
+ obj = Scoutui::Base::QBrowser.getObject(@drv, _xpath)
22
+
23
+ if obj
24
+ obj.click
25
+ _clicked=true
26
+ end
27
+
28
+ rescue
29
+ ;
30
+ end
31
+
32
+ Scoutui::Logger::LogMgr.instance.asserts.info "Verify object to click exists #{_xpath} : #{obj.class.to_s} - #{!obj.nil?.to_s}"
33
+ Scoutui::Logger::LogMgr.instance.asserts.info "Verify clicked #{_xpath} - #{_clicked.to_s}"
34
+
35
+ Testmgr::TestReport.instance.getReq('UI').testcase('click').add(!obj.nil?, "Verify object to click exists #{_xpath} : #{obj.class.to_s}")
36
+ Testmgr::TestReport.instance.getReq('UI').testcase('click').add(_clicked, "Verify clicked #{_xpath}")
37
+
38
+ setResult(_clicked)
39
+ end
40
+
41
+ end
42
+
43
+
44
+
45
+ end
@@ -0,0 +1,56 @@
1
+
2
+ module Scoutui::Commands
3
+
4
+ class Command
5
+ attr_accessor :description
6
+ attr_accessor :drv
7
+ attr_accessor :cmd
8
+ attr_accessor :rc
9
+ attr_accessor :locator
10
+ attr_accessor :executed
11
+ attr_accessor :executed_result
12
+
13
+ def initialize(_cmd, _drv=nil)
14
+ Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " Command.init: #{_cmd.to_s}"
15
+ @cmd=_cmd
16
+ @rc=nil
17
+ @drv=_drv
18
+ @locator=nil
19
+ @executed=false
20
+ @executed_result=nil
21
+ end
22
+
23
+ def setResult(r)
24
+ Scoutui::Logger::LogMgr.instance.commands.debug " setResult(#{r.to_s})"
25
+ @executed=true
26
+ @executed_result=r
27
+ end
28
+
29
+ def executedResult
30
+ @executed_result
31
+ end
32
+
33
+ def wasExecuted?
34
+ @executed
35
+ end
36
+
37
+ def setLocator(_locator)
38
+ @locator=_locator
39
+ end
40
+
41
+ def getLocator()
42
+ @locator
43
+ end
44
+
45
+ def result
46
+ @rc
47
+ end
48
+
49
+ def execute(_drv=nil, _dut=nil)
50
+ raise NotImplementedError
51
+ end
52
+
53
+ end
54
+
55
+
56
+ end
@@ -0,0 +1,133 @@
1
+ require_relative('./command')
2
+
3
+ module Scoutui::Commands
4
+
5
+ STEP_KEY='page'
6
+
7
+
8
+ def self.processCommands(commandList, my_driver)
9
+
10
+ commandList.each do |cmd|
11
+ begin
12
+ rc=processCommand(cmd[:command], cmd[:e], my_driver)
13
+ rescue => ex
14
+ Scoutui::Logger::LogMgr.instance.debug "Error during processing: #{$!}"
15
+ Scoutui::Logger::LogMgr.instance.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+
22
+ def self.processCommand(_action, e, my_driver)
23
+ Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " === Process ACTION : #{_action} ===" if Scoutui::Utils::TestUtils.instance.isDebug?
24
+
25
+ _aborted=false
26
+ _cmd=nil
27
+ _totalWindows = my_driver.window_handles.length
28
+
29
+ rc=true
30
+ _req = Scoutui::Utils::TestUtils.instance.getReq()
31
+
32
+ begin
33
+
34
+ _c=nil
35
+
36
+ if Scoutui::Commands::Utils.instance.isPause?(_action)
37
+ _cmd='pause'
38
+ _c = Scoutui::Commands::Pause.new(nil)
39
+ _c.execute(e);
40
+
41
+ elsif Scoutui::Commands::Utils.instance.isClick?(_action)
42
+ _cmd='Click'
43
+ _c = Scoutui::Commands::ClickObject.new(_action)
44
+ _c.execute(my_driver)
45
+
46
+ elsif Scoutui::Commands::Utils.instance.isExistsAlert?(_action)
47
+ _cmd='ExistsAlert'
48
+ _c = Scoutui::Commands::JsAlert::ExistsAlert.new(_action)
49
+ rc=_c.execute(my_driver)
50
+
51
+ elsif Scoutui::Commands::Utils.instance.isGetAlert?(_action)
52
+ _cmd='GetAlert'
53
+ _c = Scoutui::Commands::ExistsAlert.new(_action)
54
+ rc=_c.execute(my_driver)
55
+
56
+ elsif Scoutui::Commands::Utils.instance.isMouseOver?(_action)
57
+ _cmd='MouseOver'
58
+ _c = Scoutui::Commands::MouseOver.new(_action)
59
+ _c.execute(my_driver)
60
+
61
+ elsif Scoutui::Commands::Utils.instance.isSelect?(_action)
62
+ _cmd='Select'
63
+ _c = Scoutui::Commands::SelectObject.new(_action)
64
+ _c.execute(my_driver)
65
+
66
+ elsif Scoutui::Commands::Utils.instance.isFillForm?(_action)
67
+
68
+ _cmd='FillForm'
69
+ _c = Scoutui::Commands::FillForm.new(_action)
70
+
71
+ _rc=false
72
+ begin
73
+ _form = _action.match(/fillform\((.*)\s*\)/)[1].to_s
74
+ # _dut = _action.match(/fillform\(.*,\s*(.*)\)/)[1].to_s
75
+
76
+ dut = e[STEP_KEY]['dut']
77
+
78
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " DUT => #{dut}"
79
+ _f = Scoutui::Utils::TestUtils.instance.getForm(_form)
80
+ _f.dump()
81
+ _f.verifyForm(my_driver)
82
+ _f.fillForm(my_driver, dut)
83
+ _rc=true
84
+ rescue
85
+ ;
86
+ end
87
+
88
+ _c.setResult(_rc)
89
+
90
+ elsif Scoutui::Commands::Utils.instance.isSubmitForm?(_action)
91
+ _cmd='SubmitForm'
92
+ _c = Scoutui::Commands::SubmitForm.new(_action)
93
+ _c.execute(my_driver)
94
+
95
+
96
+ elsif Scoutui::Commands::Utils.instance.isNavigate?(_action)
97
+ _cmd='Navigate'
98
+ _c = Scoutui::Commands::UpdateUrl.new(_action)
99
+ _c.execute(my_driver)
100
+
101
+ elsif Scoutui::Commands::Utils.instance.isVerifyElt?(_action)
102
+ _cmd='VerifyElement'
103
+
104
+ _c = Scoutui::Commands::VerifyElement.new(_action)
105
+ _c.execute(my_driver)
106
+
107
+ elsif Scoutui::Commands::Utils.instance.isType?(_action)
108
+ _cmd='Type'
109
+ _c = Scoutui::Commands::Type.new(_action)
110
+ _c.execute(my_driver)
111
+ else
112
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " Unknown command : #{_action}"
113
+ rc=false
114
+ end
115
+
116
+ rescue => e
117
+ Scoutui::Logger::LogMgr.instance.debug "Error during processing: #{$!}"
118
+ Scoutui::Logger::LogMgr.instance.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
119
+ puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
120
+ _aborted=true
121
+ rc=false
122
+ end
123
+
124
+ if my_driver.window_handles.length > _totalWindows
125
+ Scoutui::Logger::LogMgr.instance.info " New Window generated"
126
+ end
127
+
128
+ Testmgr::TestReport.instance.getReq(_req).get_child(_cmd.downcase).add(!_aborted, "Verify command did not abort")
129
+ _c
130
+ end
131
+
132
+
133
+ end
@@ -0,0 +1,54 @@
1
+
2
+
3
+ module Scoutui::Commands
4
+
5
+ class ExistsAlert < Command
6
+
7
+
8
+ def execute(drv=nil)
9
+ @drv=drv if !drv.nil?
10
+
11
+ _action = @cmd.match(/(get_*alert|clickjsconfirm|clickjsprompt|clickjsalert)\s*\((.*)\)/i)[2].to_s.strip
12
+
13
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " ExistsAlert(#{_action})" if Scoutui::Utils::TestUtils.instance.isDebug?
14
+
15
+ rc=false
16
+
17
+ alert=nil
18
+
19
+ begin
20
+ alert=@drv.switch_to.alert
21
+
22
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " | alert => #{alert.class.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
23
+
24
+ if alert.is_a?(Selenium::WebDriver::Alert)
25
+ if _action.match(/accept/i)
26
+ alert.accept
27
+ elsif _action.match(/dismiss/i)
28
+ alert.dismiss
29
+ end
30
+
31
+ rc=true
32
+ end
33
+
34
+
35
+ rescue Selenium::WebDriver::Error::NoSuchAlertError
36
+ ;
37
+ end
38
+
39
+ _req = Scoutui::Utils::TestUtils.instance.getReq()
40
+
41
+ Testmgr::TestReport.instance.getReq(_req).testcase(_action).add(!alert.nil?, "Verify alert exists")
42
+ Testmgr::TestReport.instance.getReq(_req).testcase(_action).add(rc, "Verify processed alert")
43
+
44
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " ExistsAlert() => #{rc.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
45
+ rc
46
+
47
+ end
48
+
49
+
50
+ end
51
+
52
+
53
+
54
+ end
@@ -0,0 +1,56 @@
1
+ require_relative './commands'
2
+
3
+ module Scoutui::Commands
4
+
5
+ class FillForm < Command
6
+ attr_accessor :form
7
+ attr_accessor :formLocator
8
+ attr_accessor :dut
9
+
10
+ def initialize(_cmd)
11
+ super(_cmd)
12
+
13
+ @dut=nil
14
+
15
+ Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " form => #{@cmd}"
16
+ @formLocator = @cmd.match(/fillform\((.*)\s*\)/)[1].to_s
17
+ @form = Scoutui::Utils::TestUtils.instance.getForm(@formLocator)
18
+ Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " Form => #{@form}"
19
+ @form.dump()
20
+ end
21
+
22
+ def fill(drv, dut)
23
+ @drv=drv if !drv.nil?
24
+
25
+ @form.fillForm(@drv, dut)
26
+ end
27
+
28
+ def execute(drv=nil)
29
+ @drv=drv if !drv.nil?
30
+
31
+
32
+ #_form = @cmd.match(/fillform\((.*)\s*\)/)[1].to_s
33
+ # _dut = _action.match(/fillform\(.*,\s*(.*)\)/)[1].to_s
34
+
35
+ # dut = e['page']['dut']
36
+
37
+ # Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " _dut => #{_dut}"
38
+ Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + " DUT => #{@dut}"
39
+ _rc=false
40
+ begin
41
+ _f = Scoutui::Utils::TestUtils.instance.getForm(@formLocator)
42
+ _f.dump()
43
+ _f.verifyForm(@drv)
44
+ _f.fillForm(@drv, dut)
45
+ _rc=true
46
+ rescue
47
+ ;
48
+ end
49
+
50
+ setResult(_rc)
51
+ end
52
+
53
+ end
54
+
55
+
56
+ end
@@ -0,0 +1,58 @@
1
+ require 'testmgr'
2
+
3
+ module Scoutui::Commands::JsAlert
4
+
5
+ class ExistsAlert < Scoutui::Commands::Command
6
+
7
+
8
+ def execute(drv=nil)
9
+ @drv=drv if !drv.nil?
10
+
11
+ _rc=nil
12
+ _alertExists=false
13
+
14
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " command => #{@cmd.to_s}"
15
+
16
+ _action=@cmd.match(/(exist[s]*_*alert|existAlert|existsAlert|existsJsAlert|existsJsConfirm|existsJsPrompt)\s*\((.*)\)/i)[2].to_s.strip
17
+
18
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " ExistsAlert(#{_action})" if Scoutui::Utils::TestUtils.instance.isDebug?
19
+
20
+ alert=nil
21
+
22
+ begin
23
+ alert=@drv.switch_to.alert
24
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " | alert => #{alert.class.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
25
+
26
+ _alertExists = alert.is_a?(Selenium::WebDriver::Alert)
27
+ if _alertExists && !(_action.nil? && _action.empty?)
28
+ _r = Regexp.new _action.to_s
29
+
30
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " _r => #{_r}"
31
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " _t => #{alert.text.to_s}"
32
+ _rc=!alert.text.to_s.match(_r).nil?
33
+ end
34
+
35
+ rescue Selenium::WebDriver::Error::NoSuchAlertError
36
+ alert=nil
37
+ end
38
+
39
+ Testmgr::TestReport.instance.getReq('UI').testcase('expectJsAlert').add(_alertExists, "Verify JsAlert is present")
40
+
41
+ if !(_action.nil? && _action.empty?)
42
+ Testmgr::TestReport.instance.getReq('UI').get_child('expectJsAlert').add(_rc, "Verify JsAlert contains text #{_action}")
43
+
44
+
45
+ setResult(_rc)
46
+ end
47
+
48
+ Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " ExistsAlert() => #{alert.class.to_s} rc:#{_rc.to_s}" if Scoutui::Utils::TestUtils.instance.isDebug?
49
+
50
+
51
+ end
52
+
53
+
54
+ end
55
+
56
+
57
+
58
+ end
@@ -0,0 +1,31 @@
1
+
2
+ module Scoutui::Commands
3
+
4
+ class MouseOver < Command
5
+
6
+ def execute(drv=nil)
7
+ _rc=false
8
+ _req = Scoutui::Utils::TestUtils.instance.getReq()
9
+
10
+ @drv=drv if !drv.nil?
11
+
12
+ begin
13
+ _xpath = @cmd.match(/mouseover\s*\((.*)\)/)[1].to_s.strip
14
+ obj = Scoutui::Base::QBrowser.getObject(@drv, _xpath)
15
+ @drv.action.move_to(obj).perform
16
+ _rc=true
17
+ rescue
18
+ ;
19
+ end
20
+
21
+ Testmgr::TestReport.instance.getReq(_req).testcase('mouseover').add(!obj.nil?, "Verify object #{_xpath} to mouseover exists : #{obj.class.to_s}")
22
+ Testmgr::TestReport.instance.getReq(_req).testcase('mousseover').add(_rc, "Verify mouseover #{_rc}")
23
+ setResult(_rc)
24
+ end
25
+
26
+
27
+
28
+ end
29
+
30
+
31
+ end
@@ -0,0 +1,26 @@
1
+
2
+
3
+ module Scoutui::Commands
4
+
5
+ class Pause < Command
6
+
7
+ def execute(e=nil)
8
+ rc=true
9
+ h=""
10
+ begin
11
+ if e.is_a?(Hash) && e.has_key?('page')
12
+ h=e['page']['name'].to_s
13
+ end
14
+ puts "====== PAUSE - HIT ENTER #{h} ========="
15
+ gets()
16
+ rescue => ex
17
+ puts "Error during processing: #{$!}"
18
+ puts "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
19
+ rc=false
20
+ end
21
+ setResult(rc)
22
+ end
23
+ end
24
+
25
+
26
+ end