taf 0.2.0 → 0.2.1

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/functions/handlers/base_handler.rb +9 -9
  3. data/lib/functions/handlers/browser_back.rb +2 -2
  4. data/lib/functions/handlers/browser_forward.rb +2 -2
  5. data/lib/functions/handlers/browser_quit.rb +2 -2
  6. data/lib/functions/handlers/browser_refresh.rb +2 -2
  7. data/lib/functions/handlers/capture_alert.rb +2 -2
  8. data/lib/functions/handlers/check_box.rb +1 -1
  9. data/lib/functions/handlers/check_boxdata.rb +4 -2
  10. data/lib/functions/handlers/check_browser_title.rb +1 -1
  11. data/lib/functions/handlers/check_logs.rb +1 -1
  12. data/lib/functions/handlers/check_screendata.rb +1 -1
  13. data/lib/functions/handlers/check_url.rb +1 -1
  14. data/lib/functions/handlers/click_button.rb +3 -2
  15. data/lib/functions/handlers/execute_system_command.rb +1 -1
  16. data/lib/functions/handlers/handle_browser_window.rb +1 -1
  17. data/lib/functions/handlers/insert_value_config.rb +1 -1
  18. data/lib/functions/handlers/ipause.rb +1 -1
  19. data/lib/functions/handlers/list_all_dropdowns_values.rb +2 -2
  20. data/lib/functions/handlers/open_portal_url.rb +1 -1
  21. data/lib/functions/handlers/open_url.rb +1 -1
  22. data/lib/functions/handlers/ping_test.rb +11 -12
  23. data/lib/functions/handlers/portal_login.rb +1 -1
  24. data/lib/functions/handlers/radio_button.rb +2 -2
  25. data/lib/functions/handlers/select_dropdown.rb +2 -2
  26. data/lib/functions/handlers/send_special_keys.rb +1 -1
  27. data/lib/functions/handlers/write_box_data.rb +4 -2
  28. data/lib/functions/handlers/write_to_editor.rb +1 -1
  29. data/lib/main.rb +57 -45
  30. data/lib/parser/parser.rb +10 -10
  31. data/lib/report/junit_report.rb +3 -3
  32. data/lib/report/report.rb +36 -38
  33. data/lib/report/report_summary.rb +1 -1
  34. data/lib/taf_config.rb +1 -0
  35. data/lib/utils/browser.rb +20 -22
  36. data/lib/utils/create_directories.rb +1 -3
  37. data/lib/utils/test_engine.rb +9 -9
  38. data/lib/utils/test_steps.rb +6 -7
  39. data/lib/version.rb +1 -1
  40. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5a4ea4d70ac8bd18bd9e90fa0b0b1615e036669df29d789105cec6aa5d74e09
4
- data.tar.gz: 4d62ee8db6590f1ed95be8dbabdb2db2e220d9e5f5bad68d73b1266eb8cf084b
3
+ metadata.gz: 47c34f68219bf7188b916a891f7a86f4d14b08a437d08201382e7f3202e21143
4
+ data.tar.gz: 501befb0dc3bf630031a1094df678c1fa100e3be6c31d799dd914ac173e83938
5
5
  SHA512:
6
- metadata.gz: e7f1b953e22f15a8152110c5621c824535efb13e0921c6961a07e90cb1f3165a0ead74a87ccf8502c0c086a4c7899c74c55a4934cf2952d271f2045df28647d0
7
- data.tar.gz: dddad76d0929978d394fa1e8639288b84ecf445fa4d79a03e81d34b7a1168445c08dbbdb82f2ab71168ca3324ff4702b5db2b0c3a9104e5aa88c37b9e8ce3d56
6
+ metadata.gz: d1a1b0383b4d37a35b566a2739601f8818f887b9b8ac6e25702fde9ffa39416595c5f806fa8e6f550e008da6b7cbbb486fe105de60abb0b29dd53cfcb87f77b8
7
+ data.tar.gz: a3c32e949362a648f88e797185fa0883a8d010085b21d18a390ad5e6274f298eb31c6234bce00c15933dddb6ae01ed46a6cafb69c7b43fe00071db44918254ac
@@ -62,18 +62,18 @@ module TestSteps
62
62
  password = ENV['PORTAL_MEM']
63
63
  nums = (1..256).to_a
64
64
  found_mem_nums = nums.each_with_object([]) do |num_val, mem_word|
65
- elm_id = "user_memorable_parts_#{num_val}"
66
- mem_word.push(num_val) if Browser.b.select(:id => elm_id).exist?
65
+ elm_id = "user_memorable_parts_#{num_val}"
66
+ mem_word.push(num_val) if Browser.b.select(id: elm_id).exist?
67
67
  end.compact
68
68
 
69
69
  array_password = password.split('')
70
70
  array_password.map!(&:upcase)
71
71
 
72
- found_mem_nums.each { |mem_num|
73
- char = array_password[(mem_num-1)]
74
- elm_id = "user_memorable_parts_#{mem_num}"
75
- Browser.b.select_list(:id => elm_id).option(:value => "#{char}").select
76
- }
72
+ found_mem_nums.each do |mem_num|
73
+ char = array_password[(mem_num - 1)]
74
+ elm_id = "user_memorable_parts_#{mem_num}"
75
+ Browser.b.select_list(id: elm_id).option(value: char.to_s).select
76
+ end
77
77
 
78
78
  Browser.b.button(value: 'Sign in').wait_until(&:exists?).click
79
79
  if Browser.b.title.eql?(b_title_sucess)
@@ -84,6 +84,6 @@ module TestSteps
84
84
  return false
85
85
  end
86
86
  end
87
- end
87
+ end
88
88
  end
89
- end
89
+ end
@@ -5,7 +5,7 @@ module TestSteps
5
5
  class BrowserBack < Base
6
6
  register :browser_back
7
7
 
8
- def perform(step_attributes)
8
+ def perform(_step_attributes)
9
9
  Browser.b.back
10
10
  MyLog.log.info('Browser navigated back')
11
11
  true
@@ -15,4 +15,4 @@ module TestSteps
15
15
  end
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -5,7 +5,7 @@ module TestSteps
5
5
  class BrowserForward < Base
6
6
  register :browser_forward
7
7
 
8
- def perform(step_attributes)
8
+ def perform(_step_attributes)
9
9
  Browser.b.forward
10
10
  MyLog.log.info('Browser navigated forward')
11
11
  true
@@ -15,4 +15,4 @@ module TestSteps
15
15
  end
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -5,7 +5,7 @@ module TestSteps
5
5
  class BrowserQuit < Base
6
6
  register :browser_quit
7
7
 
8
- def perform(step_attributes)
8
+ def perform(_step_attributes)
9
9
  Browser.b.quit
10
10
  MyLog.log.info('Browser has closed successfully')
11
11
  true
@@ -15,4 +15,4 @@ module TestSteps
15
15
  end
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -5,7 +5,7 @@ module TestSteps
5
5
  class BrowserRefresh < Base
6
6
  register :browser_refresh
7
7
 
8
- def perform(step_attributes)
8
+ def perform(_step_attributes)
9
9
  Browser.b.refresh
10
10
  MyLog.log.info('The Browser has been refreshed')
11
11
  true
@@ -15,4 +15,4 @@ module TestSteps
15
15
  end
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -5,7 +5,7 @@ module TestSteps
5
5
  class CaptureAlert < Base
6
6
  register :capture_alert
7
7
 
8
- def perform(step_attributes)
8
+ def perform(_step_attributes)
9
9
  Browser.b.div(class: 'alert').exist?
10
10
  alertmsg = Browser.b.div(class: 'alert').text
11
11
  MyLog.log.info("Alert shown: #{alertmsg}")
@@ -16,4 +16,4 @@ module TestSteps
16
16
  end
17
17
  end
18
18
  end
19
- end
19
+ end
@@ -18,4 +18,4 @@ module TestSteps
18
18
  end
19
19
  end
20
20
  end
21
- end
21
+ end
@@ -14,10 +14,12 @@ module TestSteps
14
14
  Browser.b.textarea(:"#{locate}" => box).exist?,
15
15
  Browser.b.text_field(:"#{locate}" => box).exist?
16
16
  ]
17
-
17
+
18
18
  raise 'Multiple matches' if found_box.select { |i| i }.empty?
19
+
19
20
  index = found_box.index(true)
20
21
  return unless index
22
+
21
23
  if index.zero?
22
24
  Browser.b.textarea(:"#{locate}" => box).wait_until(&:exists?)
23
25
  (Browser.b.textarea(:"#{locate}" => box).value == value)
@@ -36,4 +38,4 @@ module TestSteps
36
38
  end
37
39
  end
38
40
  end
39
- end
41
+ end
@@ -8,7 +8,7 @@ module TestSteps
8
8
  def perform(step_attributes)
9
9
  b_title = step_attributes[:testvalue]
10
10
 
11
- Browser.b.wait_until { Browser.b.title.eql? (b_title)}
11
+ Browser.b.wait_until { Browser.b.title.eql? b_title }
12
12
  MyLog.log.info("Browser title: #{b_title}")
13
13
  true
14
14
  rescue StandardError
@@ -20,4 +20,4 @@ module TestSteps
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -8,7 +8,7 @@ module TestSteps
8
8
  def perform(step_attributes)
9
9
  check_text = step_attributes[:testvalue]
10
10
 
11
- Browser.b.wait_until { Browser.b.element.text.include? (check_text)}
11
+ Browser.b.wait_until { Browser.b.element.text.include? check_text }
12
12
  MyLog.log.info("Text found: #{check_text}")
13
13
  true
14
14
  rescue StandardError
@@ -18,4 +18,4 @@ module TestSteps
18
18
  end
19
19
  end
20
20
  end
21
- end
21
+ end
@@ -9,13 +9,14 @@ module TestSteps
9
9
  button = step_attributes[:testvalue]
10
10
  locate = step_attributes[:locate]
11
11
 
12
- elms = %i{button span a div link image h1 h2 h3 h4}
12
+ elms = %i[button span a div link image h1 h2 h3 h4]
13
13
 
14
14
  found_button = elms.map do |elm|
15
15
  Browser.b.send(elm, :"#{locate}" => button).exists?
16
16
  end.compact
17
17
 
18
18
  raise 'Multiple matches' if found_button.select { |i| i }.empty?
19
+
19
20
  index = found_button.index(true)
20
21
  return unless index
21
22
 
@@ -49,4 +50,4 @@ module TestSteps
49
50
  end
50
51
  end
51
52
  end
52
- end
53
+ end
@@ -19,4 +19,4 @@ module TestSteps
19
19
  end
20
20
  end
21
21
  end
22
- end
22
+ end
@@ -19,4 +19,4 @@ module TestSteps
19
19
  end
20
20
  end
21
21
  end
22
- end
22
+ end
@@ -24,4 +24,4 @@ module TestSteps
24
24
  end
25
25
  end
26
26
  end
27
- end
27
+ end
@@ -17,4 +17,4 @@ module TestSteps
17
17
  end
18
18
  end
19
19
  end
20
- end
20
+ end
@@ -12,7 +12,7 @@ module TestSteps
12
12
  Browser.b.element(:"#{locate}" => dropdown).wait_until(&:exists?)
13
13
  Browser.b.select_list(:"#{locate}" => dropdown).options.each do |i|
14
14
  MyLog.log.info("List of dropdown for #{dropdown} are: #{i.text}")
15
- return true
15
+ return true
16
16
  end
17
17
  rescue StandardError
18
18
  MyLog.log.warn("List dropdown: #{dropdown} does not exist")
@@ -20,4 +20,4 @@ module TestSteps
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -21,4 +21,4 @@ module TestSteps
21
21
  end
22
22
  end
23
23
  end
24
- end
24
+ end
@@ -22,4 +22,4 @@ module TestSteps
22
22
  end
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -5,21 +5,20 @@ module TestSteps
5
5
  class PingTest < Base
6
6
  register :ping_test
7
7
 
8
+ # TODO: retry every 'x' until timeout reached.
8
9
  def perform(step_attributes)
9
10
  url = step_attributes[:testvalue]
10
11
 
11
- while check = Net::Ping::HTTP.new(url)
12
- check.ping?
13
- sleep 5
14
- if check.ping? == true
15
- # website alive
16
- MyLog.log.info("pinged: #{url}")
17
- return true
18
- else
19
- # website not responding
20
- MyLog.log.warn("Failed to ping: #{url}")
21
- return false
22
- end
12
+ check = Net::Ping::HTTP.new(url)
13
+
14
+ check.ping?
15
+ sleep 5
16
+ if check.ping?
17
+ MyLog.log.info("pinged: #{url}")
18
+ return true
19
+ else
20
+ MyLog.log.warn("Failed to ping: #{url}")
21
+ return false
23
22
  end
24
23
  end
25
24
  end
@@ -15,7 +15,7 @@ module TestSteps
15
15
  b_title_sucess = 'Home '
16
16
  user_elm = 'user_email'
17
17
  pass_elm = 'user_password'
18
-
18
+
19
19
  open_url_process(url)
20
20
  login_process(b_title, user_elm, pass_elm, user, pass)
21
21
  mem_word_check(user, b_title_sucess)
@@ -12,7 +12,7 @@ module TestSteps
12
12
  locate2 = step_attributes[:locate2]
13
13
 
14
14
  Browser.b.radio(:"#{locate}" => radio).wait_until(&:exists?)
15
- Browser.b.radio(:"#{locate}" => radio, :"#{locate2}" => "#{value2}").set
15
+ Browser.b.radio(:"#{locate}" => radio, :"#{locate2}" => value2.to_s).set
16
16
  MyLog.log.info("Radio button: #{radio} has been selected")
17
17
  true
18
18
  rescue StandardError
@@ -21,4 +21,4 @@ module TestSteps
21
21
  end
22
22
  end
23
23
  end
24
- end
24
+ end
@@ -12,7 +12,7 @@ module TestSteps
12
12
  locate2 = step_attributes[:locate2]
13
13
 
14
14
  Browser.b.select_list(:"#{locate}" => dropdown).wait_until(&:exists?)
15
- Browser.b.select_list(:"#{locate}" => dropdown).option(:"#{locate2}" => "#{value2}").select
15
+ Browser.b.select_list(:"#{locate}" => dropdown).option(:"#{locate2}" => value2.to_s).select
16
16
  MyLog.log.info("Dropdown item: #{value2} has been selected")
17
17
  true
18
18
  rescue StandardError
@@ -24,4 +24,4 @@ module TestSteps
24
24
  end
25
25
  end
26
26
  end
27
- end
27
+ end
@@ -18,4 +18,4 @@ module TestSteps
18
18
  end
19
19
  end
20
20
  end
21
- end
21
+ end
@@ -14,10 +14,12 @@ module TestSteps
14
14
  Browser.b.textarea(:"#{locate}" => box).exist?,
15
15
  Browser.b.text_field(:"#{locate}" => box).exist?
16
16
  ]
17
-
17
+
18
18
  raise 'Multiple matches' if found_box.select { |i| i }.empty?
19
+
19
20
  index = found_box.index(true)
20
21
  return unless index
22
+
21
23
  if index.zero?
22
24
  Browser.b.textarea(:"#{locate}" => box).wait_until(&:exists?).set value
23
25
  (Browser.b.textarea(:"#{locate}" => box).value == value)
@@ -36,4 +38,4 @@ module TestSteps
36
38
  end
37
39
  end
38
40
  end
39
- end
41
+ end
@@ -23,4 +23,4 @@ module TestSteps
23
23
  end
24
24
  end
25
25
  end
26
- end
26
+ end
data/lib/main.rb CHANGED
@@ -10,58 +10,70 @@
10
10
  module Main
11
11
  require_relative './taf_config.rb'
12
12
 
13
- begin
14
- # holds list of test file names read from the input file
15
- test_file_names = []
13
+ def self.cmdline_input
14
+ # check if the test suite file name exists on the command line
15
+ # allow a user to input 2 arguments in to CMD line the 2 values are:
16
+ # Testcase Folder and Browser.
17
+ options = {}
18
+ ARGV.push('-h') if ARGV.empty?
19
+ OptionParser.new do |parser|
20
+ # Whenever we see -b, -t or --browser, or --tests with an
21
+ # argument, save the argument.
22
+ parser.banner = 'Usage: taf [options]'
23
+ parser.on('-h', '--help', "2 arguments are required: {Browser} {Testcase folder}'") do
24
+ puts parser
25
+ Process.exit
26
+ end
16
27
 
17
- # variables to manage the failure reporting
18
- $testStepPasses = 0
19
- $testStepFailures = 0
20
- $testStepNotrun = 0
21
- $totalTestPasses = 0
22
- $totalTestFailures = 0
23
- $totalTestNotrun = 0
24
- $previousTestFail = false
25
- $currentTestFail = false
26
- # initialised stores for the input xlsx test data
27
- $XlsxDoc = ''
28
+ parser.on('-b', '--browser browser', 'Supported Browsers: chrome, chrome-headless, firefox, firefox-headless.') do |b|
29
+ options[:browser] = b
30
+ $browserType = options[:browser]
31
+ unless ['chrome', 'chrome-headless', 'firefox', 'firefox-headless'].include?($browserType)
32
+ MyLog.log.warn 'A valid Browser has not been supplied as a command-line parameter as expected'
33
+ Process.exit
34
+ end
35
+ end
28
36
 
29
- begin
30
- # check if the test suite file name exists on the command line
31
- # allow a user to input 2 arguments in to CMD line the 2 values are:
32
- # Testcase Folder and Browser.
33
- if ARGV.length < 3
34
- $testcasesFolder = ARGV[0]
35
- $browserType = ARGV[1]
36
- MyLog.log.info '2 arguments are required: {Testcase folder} {Browser}'
37
- else
38
- # unable to open file as not supplied as command-line parameter
39
- $testcasesFolder = 'unknown'
40
- error_to_display = 'Test case location has not been supplied as a command-line parameter as expected'
41
- $browserType = 'unknown'
42
- error_to_display = 'Browser has not been supplied as a command-line parameter as expected'
43
- raise IOError, error_to_display
37
+ parser.on('-t', '--tests testfolder', 'i.e. tests/') do |t|
38
+ options[:testfolder] = t
39
+ $testcasesFolder = options[:testfolder]
40
+ if Parser.test_files.size.positive?
41
+ MyLog.log.info "There are: #{Parser.test_files.size} test files to process"
42
+ MyLog.log.info "List of Tests files: #{Parser.test_files} \n"
43
+ else
44
+ MyLog.log.warn 'A valid Test case location has not been supplied as a command-line parameter as expected'
45
+ Process.exit
46
+ end
44
47
  end
45
- # unable to read the test file then handle the error and terminate
46
- rescue StandardError => error
47
- warn error
48
- MyLog.log.warn error
49
- abort
48
+ end.parse!
50
49
  end
51
50
 
52
- MyLog.log.info "There are: #{Parser.test_files.size} test files to process \n"
51
+ begin
52
+ # variables to manage the failure reporting
53
+ $testStepPasses = 0
54
+ $testStepFailures = 0
55
+ $testStepNotrun = 0
56
+ $totalTestPasses = 0
57
+ $totalTestFailures = 0
58
+ $totalTestNotrun = 0
59
+ $previousTestFail = false
60
+ $currentTestFail = false
61
+ # initialised stores for the input xlsx test data
62
+ $XlsxDoc = ''
63
+ # parses the cmd line imput into the taf
64
+ Main.cmdline_input
65
+ end
53
66
 
54
- # process the test files to execute the tests
55
- TestEngine.process_testfiles
67
+ # process the test files to execute the tests
68
+ TestEngine.process_testfiles
56
69
 
57
- # get the overall test end time
58
- $test_end_time = Report.current_time
70
+ # get the overall test end time
71
+ $test_end_time = Report.current_time
59
72
 
60
- # output the overall test summary
61
- ReportSummary.print_overall_test_summary
62
- JunitReport.test_summary_junit
73
+ # output the overall test summary
74
+ ReportSummary.print_overall_test_summary
75
+ JunitReport.test_summary_junit
63
76
 
64
- # Exit status code.
65
- Process.exit($totalTestFailures.zero? ? 0 : 1 )
66
- end
77
+ # Exit status code.
78
+ Process.exit($totalTestFailures.zero? ? 0 : 1)
67
79
  end
data/lib/parser/parser.rb CHANGED
@@ -8,7 +8,7 @@
8
8
  module Parser
9
9
  require_relative '../taf_config.rb'
10
10
  # variables:
11
- @XlsxFileNameType = '.xlsx'
11
+ @xlsx_file_name_type = '.xlsx'
12
12
 
13
13
  def self.test_files
14
14
  @test_files ||= Dir.glob("#{$testcasesFolder}/*.xlsx").reject do |file|
@@ -17,20 +17,20 @@ module Parser
17
17
  end
18
18
 
19
19
  # readTestData
20
- def self.read_test_data(testFileName)
20
+ def self.read_test_data(test_file_name)
21
21
  # get the file type
22
- fileType = File.extname(testFileName)
23
- if (fileType.casecmp(@XlsxFileNameType) == 0)
24
- MyLog.log.info "Processing test file: #{testFileName}"
22
+ file_type = File.extname(test_file_name)
23
+ if file_type.casecmp(@xlsx_file_name_type).zero?
24
+ MyLog.log.info "Processing test file: #{test_file_name}"
25
25
  MyLog.log.info "Browser Type: #{$browserType}"
26
- $xlsxDoc = RubyXL::Parser.parse(testFileName)
26
+ $xlsxDoc = RubyXL::Parser.parse(test_file_name)
27
27
  XlsxParser.parse_xlxs_test_header_data
28
28
  return 'XLSX'
29
29
  else
30
30
  # if unable to read the test file list then construct a custom error
31
31
  # message and raise an exception.
32
- error_to_display = "Test File Name: '#{testFileName}' " \
33
- "type not recognised (must be .xslx)"
32
+ error_to_display = "Test File Name: '#{test_file_name}' " \
33
+ 'type not recognised (must be .xslx)'
34
34
  raise IOError, error_to_display
35
35
  end
36
36
 
@@ -41,7 +41,7 @@ module Parser
41
41
  end
42
42
 
43
43
  # parseTestStepData
44
- def self.parse_test_step_data(testFileType)
45
- XlsxParser.parse_test_step_data(testFileType)
44
+ def self.parse_test_step_data(test_file_type)
45
+ XlsxParser.parse_test_step_data(test_file_type)
46
46
  end
47
47
  end
@@ -39,10 +39,10 @@ module JunitReport
39
39
  xml.testsuites(testsuite_attrs) do |testsuites|
40
40
  @testStepReportSummary2.each do |testStepReportSummary2|
41
41
  testsuites.testsuite(testStepReportSummary2) do |testsuite|
42
- $testStep_xml[testStepReportSummary2['name']].each do |testStepIndex, testStep_xml|
42
+ $testStep_xml[testStepReportSummary2['name']].each do |test_step_index, testStep_xml|
43
43
  testsuite.testcase(testStep_xml) do |testcase|
44
- failure = $failtestStep_xml&.[](testStepReportSummary2['name'])&.[](testStepIndex)
45
- skipped = $skiptestStep_xml&.[](testStepReportSummary2['name'])&.[](testStepIndex)
44
+ failure = $failtestStep_xml&.[](testStepReportSummary2['name'])&.[](test_step_index)
45
+ skipped = $skiptestStep_xml&.[](testStepReportSummary2['name'])&.[](test_step_index)
46
46
  testcase.failure(failure) if failure
47
47
  testcase.skipped(skipped) if skipped
48
48
  end
data/lib/report/report.rb CHANGED
@@ -9,53 +9,47 @@
9
9
  # report.rb - methods for outputting console.
10
10
  module Report
11
11
  require_relative '../taf_config.rb'
12
- # setup the test results output file
13
- # results file variable
14
- def self.results
15
- results_file = @results_file
16
- end
17
12
 
18
13
  # get the current time in the format Day - Month - Date - Time (HH:MM:SS)
19
14
  def self.current_time
20
- time = Time.new
21
- f_time = time.strftime('%a %b %d %H:%M:%S %Z')
22
- f_time
15
+ Time.new.strftime('%a %b %d %H:%M:%S %Z')
23
16
  end
24
17
 
25
18
  # print the test Step info to the test results file
26
- def self.print_test_step_header(test_file_name, testStepIndex)
27
- MyLog.log.info "Test start time: #{f_time = current_time}"
28
- MyLog.log.info "Test step: #{$testStep} : #{$testStepDes}"
19
+ def self.print_test_step_header(test_file_name, test_step_index)
20
+ MyLog.log.info "Test start time: #{current_time}"
21
+ MyLog.log.info "Test step: #{$test_step} : #{$test_step_des}"
29
22
 
30
23
  step = {
31
- 'id' => $testStep,
32
- 'classname' => 'SuiteID: ' + $testId.to_s + ' Test Step: ' + $testStep.to_s + ' ' + $testStepDes.to_s,
33
- 'name' => $testStepDes,
24
+ 'id' => $test_step,
25
+ 'classname' => 'SuiteID: ' + $testId.to_s + ' Test Step: ' + $test_step.to_s + ' ' + $test_step_des.to_s,
26
+ 'name' => $test_step_des,
34
27
  'file' => test_file_name
35
28
  }
36
29
  # output to console to show test step
37
30
  # puts step
38
31
 
39
32
  return unless test_file_name
33
+
40
34
  $testStep_xml ||= {}
41
35
  $testStep_xml[test_file_name] ||= {}
42
- $testStep_xml[test_file_name][testStepIndex] = step
36
+ $testStep_xml[test_file_name][test_step_index] = step
43
37
  end
44
38
 
45
39
  # print the Pass / Fail status of a test to the test results file
46
- def self.test_pass_fail(passFail, test_file_name, testStepIndex)
47
- if passFail == true
40
+ def self.test_pass_fail(pass_fail, test_file_name, test_step_index)
41
+ if pass_fail == true
48
42
  $previousTestFail = $currentTestFail
49
43
  $currentTestFail = false
50
44
  $testStepPasses += 1
51
- MyLog.log.info "Test #{$testStep} has Passed ".green
52
- elsif passFail == false
45
+ MyLog.log.info "Test #{$test_step} has Passed ".green
46
+ elsif pass_fail == false
53
47
  $previousTestFail = $currentTestFail
54
48
  $currentTestFail = true
55
49
  $testStepFailures += 1
56
- MyLog.log.info "Test #{$testStep} has FAILED ".red
50
+ MyLog.log.info "Test #{$test_step} has FAILED ".red
57
51
  failstep = {
58
- 'message' => 'SuiteID: ' + $testId.to_s + ' Test Step: ' + $testStep.to_s + ' Test has FAILED - Check logs',
52
+ 'message' => 'SuiteID: ' + $testId.to_s + ' Test Step: ' + $test_step.to_s + ' Test has FAILED - Check logs',
59
53
  'type' => 'FAILURE',
60
54
  'file' => test_file_name
61
55
  }
@@ -63,15 +57,16 @@ module Report
63
57
  # puts failstep
64
58
 
65
59
  return unless test_file_name
60
+
66
61
  $failtestStep_xml ||= {}
67
62
  $failtestStep_xml[test_file_name] ||= []
68
- $failtestStep_xml[test_file_name][testStepIndex] = failstep
63
+ $failtestStep_xml[test_file_name][test_step_index] = failstep
69
64
  else
70
65
  $currentTestFail = false
71
66
  $testStepNotrun += 1
72
- MyLog.log.info "Test #{$testStep} no checks performed ".blue
67
+ MyLog.log.info "Test #{$test_step} no checks performed ".blue
73
68
  skipstep = {
74
- 'message' => 'SuiteID: ' + $testId.to_s + ' Test Step: ' + $testStep.to_s + ' No checks performed - Check logs',
69
+ 'message' => 'SuiteID: ' + $testId.to_s + ' Test Step: ' + $test_step.to_s + ' No checks performed - Check logs',
75
70
  'type' => 'SKIPPED',
76
71
  'file' => test_file_name
77
72
  }
@@ -79,30 +74,33 @@ module Report
79
74
  # puts skipstep
80
75
 
81
76
  return unless test_file_name
77
+
82
78
  $skiptestStep_xml ||= {}
83
79
  $skiptestStep_xml[test_file_name] ||= []
84
- $skiptestStep_xml[test_file_name][testStepIndex] = skipstep
85
- end
86
- MyLog.log.info "Test end time: #{f_time = current_time}"
80
+ $skiptestStep_xml[test_file_name][test_step_index] = skipstep
81
+ end
82
+ MyLog.log.info "Test end time: #{current_time}"
87
83
  end
88
84
 
89
85
  # check if the test failure threshold has been reached for total failures or consecutive failures.
90
86
  # If a certain number of consecutive tests fail then throw an exception
91
- def self.check_failure_threshold(test_file_name, testStepIndex)
92
- consecutiveFailThreshold = 5
87
+ def self.check_failure_threshold(test_file_name, _test_step_index)
88
+ consecutive_fail_threshold = 5
93
89
  if $previousTestFail && $currentTestFail
94
- @consecutiveTestFail += 1
90
+ @consecutive_test_fail += 1
95
91
  else
96
- @consecutiveTestFail = 0
92
+ @consecutive_test_fail = 0
97
93
  end
98
94
 
99
- if @consecutiveTestFail >= consecutiveFailThreshold
100
- # write info to stdout
101
- MyLog.log.warn "Terminating the current test case: #{test_file_name} as the test failure threshold (#{consecutiveFailThreshold}) has been reached."
102
- MyLog.log.warn '...continuing with the next test case (if there is one)'
95
+ return if @consecutive_test_fail < consecutive_fail_threshold
103
96
 
104
- raise FailureThresholdExceeded,
105
- "#{consecutiveFailThreshold} Test Steps Failed."
106
- end
97
+ # write info to stdout
98
+ MyLog.log.warn "Terminating the current test case: #{test_file_name} as" \
99
+ " the test failure threshold (#{consecutive_fail_threshold}) has been " \
100
+ ' reached.'
101
+ MyLog.log.warn '...continuing with the next test case (if there is one)'
102
+
103
+ raise FailureThresholdExceeded,
104
+ "#{consecutive_fail_threshold} Test Steps Failed."
107
105
  end
108
106
  end
@@ -30,7 +30,7 @@ module ReportSummary
30
30
  # output to the console
31
31
 
32
32
  MyLog.log.info "Finished processing all test files - executed via test suite: #{$testcasesFolder}"
33
- MyLog.log.info "Overall Test Summary:"
33
+ MyLog.log.info "Overall Test Summary: \n"
34
34
  @testStepReportSummary.each do |testStepReportSummary|
35
35
  testStepReportSummary.each_line do |line|
36
36
  MyLog.log.info(line.strip)
data/lib/taf_config.rb CHANGED
@@ -19,6 +19,7 @@ require 'nokogiri'
19
19
  require 'time_difference'
20
20
  require 'colored'
21
21
  require 'rubyXL'
22
+ require 'optparse'
22
23
 
23
24
  # list of all the required files
24
25
  require_relative './utils/test_steps'
data/lib/utils/browser.rb CHANGED
@@ -30,7 +30,7 @@ module Browser
30
30
  rescue BrowserFailedOpen => error
31
31
  # construct the error message from custom text and the actual system error
32
32
  # message (converted to a string)
33
- error_text = "Unable to open"\
33
+ error_text = 'Unable to open'\
34
34
  "the requested browser: #{lc_browser_type} " + error.to_s
35
35
  raise error_text
36
36
  end
@@ -68,7 +68,7 @@ module Browser
68
68
  options = Selenium::WebDriver::Firefox::Options.new(args: ['-headless'])
69
69
  caps['acceptInsecureCerts'] = true
70
70
  driver = Selenium::WebDriver.for(:firefox, options: options,
71
- desired_capabilities: caps)
71
+ desired_capabilities: caps)
72
72
  @browser = Watir::Browser.new(driver)
73
73
  # makes the browser full screen.
74
74
  @browser.driver.manage.window.resize_to(1920, 1200)
@@ -101,42 +101,40 @@ module Browser
101
101
 
102
102
  # define browser value
103
103
  def self.b
104
- browser = @browser
104
+ @browser
105
105
  end
106
106
 
107
107
  # Check browser version
108
108
  def self.browser_version
109
- browserversion = @browser.driver.capabilities[:version]
109
+ @browser.driver.capabilities[:version]
110
110
  rescue StandardError
111
- browserversion = 'No Browser version'
111
+ 'No Browser version'
112
112
  end
113
113
 
114
114
  # create screenshot filename and save the screenshot if the test has failed or
115
115
  # if explictly required
116
116
  def self.check_save_screenshot(screen_shot)
117
- if ($currentTestFail || screen_shot)
117
+ if $currentTestFail || screen_shot
118
118
  time = Time.now.strftime('%H%M')
119
- if ($currentTestFail)
120
- full_sc_dirname = CreateDirectories.construct_testspecdirs
121
- scFileName = full_sc_dirname + "/Test_step-#{$testStep}_Failed_"\
122
- "#{time}.png"
123
- else
124
- # file name will be teststep.png
125
- full_sc_dirname = CreateDirectories.construct_testspecdirs
126
- scFileName = full_sc_dirname + "/Test_step-#{$testStep}_#{time}.png"
127
- end
119
+ sc_dir = CreateDirectories.construct_testspecdirs
120
+
121
+ sc_file_name = if $currentTestFail
122
+ "#{sc_dir}/Test_step-#{$test_step}_Failed_#{time}.png"
123
+ else
124
+ "#{sc_dir}/Test_step-#{$test_step}_#{time}.png"
125
+ end
128
126
 
129
127
  # Screenshot capture for websites
130
- Browser.b.screenshot.save scFileName
131
- MyLog.log.info("Screenshot saved to: #{scFileName} \n")
132
- else
133
- MyLog.log.debug "No screenshot requested \n"
134
- end
128
+ Browser.b.screenshot.save sc_file_name
129
+ MyLog.log.info("Screenshot saved to: #{sc_file_name} \n")
130
+ else
131
+ MyLog.log.debug "No screenshot requested \n"
132
+ end
135
133
 
136
134
  # if any issues with saving the screenshot then log a warning
137
- rescue StandardError => error
135
+ rescue StandardError => error
138
136
  # construct the error message from custom text and the actual system
139
137
  # error message (converted to a string).
140
- MyLog.log.warn("Error saving the screenshot: #{scFileName} #{error.to_s}")
138
+ MyLog.log.warn("Error saving the screenshot: #{sc_file_name} #{error}")
141
139
  end
142
140
  end
@@ -41,7 +41,6 @@ module CreateDirectories
41
41
  end
42
42
 
43
43
  def self.construct_testspecdirs
44
-
45
44
  time = Time.new
46
45
  f_date = time.strftime('%d-%b-%Y')
47
46
  f_time = time.strftime('%H_%M_%S')
@@ -60,10 +59,9 @@ module CreateDirectories
60
59
 
61
60
  # create absolute paths to the screenshots and test suite summary directories
62
61
  abs_path_screenshot_dir = File.absolute_path(screenshot_dir)
63
- abs_path_run_no_dir = File.absolute_path($runNoDir)
64
62
 
65
63
  # if any issues then set error message and re-raise the exception
66
- rescue Exception => error
64
+ rescue StandardError => error
67
65
  # construct the error message from custom text and the actual system error message (converted to a string)
68
66
  error_to_display = 'Error creating the test directory structure or opening the test results file : ' + error.to_s
69
67
  raise error_to_display
@@ -17,22 +17,22 @@ module TestEngine
17
17
 
18
18
  # loop through all the available test files to execute the tests
19
19
  Parser.test_files.each_with_index do |test_file_name, test_file_index|
20
- begin # start of rescue block for readTestData
20
+ begin
21
21
  # read in the test data
22
- testFileType = Parser.read_test_data(test_file_name)
22
+ test_file_type = Parser.read_test_data(test_file_name)
23
23
  # if unable to read the test data, show the error and move onto the
24
24
  # next file (if there is one)
25
25
  rescue StandardError => error
26
26
  MyLog.log.warn 'Terminating the current test case: ' \
27
27
  "#{test_file_name} #{error}"
28
28
  MyLog.log.info '...continuing with the next test case (if there is one)'
29
- end # of rescue block for readTestData
29
+ end
30
30
 
31
31
  # create project folders - these only need creating once per test suite
32
32
  CreateDirectories.construct_projectdirs
33
33
 
34
34
  # loop through the test file
35
- MyLog.log.info 'Not a valid XLSX File Type' if testFileType != 'XLSX'
35
+ MyLog.log.info 'Not a valid XLSX File Type' if test_file_type != 'XLSX'
36
36
 
37
37
  # get the test case start time
38
38
  $test_case_start_time = Report.current_time
@@ -40,12 +40,12 @@ module TestEngine
40
40
  $test_case_end_time = Report.current_time
41
41
 
42
42
  begin
43
- test_steps = Parser.parse_test_step_data(testFileType)
43
+ test_steps = Parser.parse_test_step_data(test_file_type)
44
44
 
45
45
  test_steps.each_with_index do |test_step, step_index|
46
- $testStep = test_step[:testStep]
47
- $testStepDes = test_step[:testdesc]
48
- screen_shot = test_step[:screenShotData]
46
+ $test_step = test_step[:testStep]
47
+ $test_step_des = test_step[:testdesc]
48
+ screen_shot = test_step[:screenShotData]
49
49
 
50
50
  # process the test step data
51
51
  TestSteps.process_test_steps(test_file_name, step_index, test_step)
@@ -77,5 +77,5 @@ module TestEngine
77
77
  $testStepFailures = 0
78
78
  $testStepNotrun = 0
79
79
  end
80
- end # while loop for test files
80
+ end
81
81
  end
@@ -9,30 +9,29 @@
9
9
  # test_steps.rb - process the required test step functions
10
10
  module TestSteps
11
11
  require_relative '../taf_config.rb'
12
-
12
+
13
13
  def self.handlers
14
14
  @handlers ||= {}
15
15
  end
16
16
 
17
17
  # process the test step data by matching the test step functions and
18
18
  # processing the associated data accordingly
19
- def self.process_test_steps(test_file_name, teststepindex, step_attributes)
19
+ def self.process_test_steps(test_file_name, test_step_index, step_attributes)
20
20
  # print the test step information
21
- Report.print_test_step_header(test_file_name, teststepindex)
22
-
21
+ Report.print_test_step_header(test_file_name, test_step_index)
22
+
23
23
  runtest = step_attributes[:skipTestCase]
24
24
  step_function = step_attributes[:testFunction]
25
25
  handler = handlers[step_function.to_s]
26
26
 
27
27
  if handler.respond_to?(:perform)
28
28
  func = handler.perform(step_attributes) if runtest == false
29
- Report.test_pass_fail(func, test_file_name, teststepindex)
30
- Report.check_failure_threshold(test_file_name, teststepindex)
29
+ Report.test_pass_fail(func, test_file_name, test_step_index)
30
+ Report.check_failure_threshold(test_file_name, test_step_index)
31
31
  return true
32
32
  else
33
33
  MyLog.log.warn "\nUnable to match function: #{step_function}"
34
34
  raise UnknownTestStep, "Unknown test step: #{step_function}"
35
- return false
36
35
  end
37
36
  end
38
37
  end
data/lib/version.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Taf
4
4
  # This module holds the TAF version information.
5
5
  module Version
6
- STRING = '0.2.0'.freeze
6
+ STRING = '0.2.1'.freeze
7
7
 
8
8
  MSG = '%<version>s (using Parser %<parser_version>s, running on ' \
9
9
  '%<ruby_engine>s %<ruby_version>s %<ruby_platform>s)'.freeze
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Perrett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-13 00:00:00.000000000 Z
11
+ date: 2019-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler