oats 0.0.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 (181) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +15 -0
  3. data/README.txt +165 -0
  4. data/Rakefile +2 -0
  5. data/bin/agent +204 -0
  6. data/bin/oats +10 -0
  7. data/bin/occ +29 -0
  8. data/bin/results_cleanup +6 -0
  9. data/doc/COPYING +55 -0
  10. data/doc/LICENSE +55 -0
  11. data/doc/OATS_Framework.doc +0 -0
  12. data/doc/classes/ApplicationLogs.html +239 -0
  13. data/doc/classes/Campaign.html +843 -0
  14. data/doc/classes/CommandlineOptions.html +131 -0
  15. data/doc/classes/Driver.html +182 -0
  16. data/doc/classes/Hash.html +137 -0
  17. data/doc/classes/Ide.html +194 -0
  18. data/doc/classes/MapSelenium.html +197 -0
  19. data/doc/classes/Net.html +107 -0
  20. data/doc/classes/Oats/OatsFilterError.html +119 -0
  21. data/doc/classes/Oats.html +998 -0
  22. data/doc/classes/OatsAssertError.html +119 -0
  23. data/doc/classes/OatsBadInput.html +119 -0
  24. data/doc/classes/OatsData.html +290 -0
  25. data/doc/classes/OatsError.html +117 -0
  26. data/doc/classes/OatsExit.html +117 -0
  27. data/doc/classes/OatsLock.html +254 -0
  28. data/doc/classes/OatsMain.html +182 -0
  29. data/doc/classes/OatsMysqlError.html +113 -0
  30. data/doc/classes/OatsMysqlMissingInput.html +113 -0
  31. data/doc/classes/OatsReportError.html +113 -0
  32. data/doc/classes/OatsSetupError.html +119 -0
  33. data/doc/classes/OatsTestError.html +119 -0
  34. data/doc/classes/OatsTestExit.html +119 -0
  35. data/doc/classes/OatsTestLocateError.html +120 -0
  36. data/doc/classes/OatsVerifyError.html +119 -0
  37. data/doc/classes/Ragent.html +397 -0
  38. data/doc/classes/Rclient.html +236 -0
  39. data/doc/classes/Report.html +368 -0
  40. data/doc/classes/Reports.html +244 -0
  41. data/doc/classes/RestApi.html +333 -0
  42. data/doc/classes/RhttpClient.html +236 -0
  43. data/doc/classes/Rimap.html +170 -0
  44. data/doc/classes/Rmysql.html +176 -0
  45. data/doc/classes/Roptions.html +131 -0
  46. data/doc/classes/Rselenium.html +233 -0
  47. data/doc/classes/Rssh.html +138 -0
  48. data/doc/classes/Runnable.html +174 -0
  49. data/doc/classes/SFTriggers.html +206 -0
  50. data/doc/classes/Selenium/Client/Driver.html +211 -0
  51. data/doc/classes/Selenium/Client.html +107 -0
  52. data/doc/classes/Selenium.html +107 -0
  53. data/doc/classes/SystemCapture.html +304 -0
  54. data/doc/classes/TestCase.html +418 -0
  55. data/doc/classes/TestData.html +235 -0
  56. data/doc/classes/TestList.html +264 -0
  57. data/doc/classes/Tools.html +244 -0
  58. data/doc/classes/Util.html +201 -0
  59. data/doc/classes/Variation.html +206 -0
  60. data/doc/fr_class_index.html +92 -0
  61. data/doc/fr_method_index.html +465 -0
  62. data/doc/index.html +23 -0
  63. data/doc/oats_httpd.conf +32 -0
  64. data/doc/oats_user.yml +25 -0
  65. data/doc/rdoc-style.css +208 -0
  66. data/lib/deep_merge/.gitignore +2 -0
  67. data/lib/deep_merge/core.rb +195 -0
  68. data/lib/deep_merge/deep_merge.rb +1 -0
  69. data/lib/deep_merge/deep_merge_hash.rb +28 -0
  70. data/lib/deep_merge/rails_compat.rb +27 -0
  71. data/lib/oats/application_logs.rb +163 -0
  72. data/lib/oats/build_id.rb +58 -0
  73. data/lib/oats/commandline_options.rb +128 -0
  74. data/lib/oats/diff.rb +278 -0
  75. data/lib/oats/driver.rb +492 -0
  76. data/lib/oats/ide.rb +227 -0
  77. data/lib/oats/keywords.rb +67 -0
  78. data/lib/oats/log4r_init.rb +14 -0
  79. data/lib/oats/mysql.rb +97 -0
  80. data/lib/oats/oats.rb +637 -0
  81. data/lib/oats/oats_data.rb +400 -0
  82. data/lib/oats/oats_exceptions.rb +25 -0
  83. data/lib/oats/oats_lock.rb +261 -0
  84. data/lib/oats/oats_selenium_api.rb +639 -0
  85. data/lib/oats/oselenium.rb +189 -0
  86. data/lib/oats/ossh.rb +36 -0
  87. data/lib/oats/patches_for_eventmachine_12.10.rb +66 -0
  88. data/lib/oats/ragent.rb +321 -0
  89. data/lib/oats/rclient.rb +42 -0
  90. data/lib/oats/report.rb +207 -0
  91. data/lib/oats/roptions.rb +88 -0
  92. data/lib/oats/test_case.rb +510 -0
  93. data/lib/oats/test_data.rb +98 -0
  94. data/lib/oats/test_list.rb +141 -0
  95. data/lib/oats/unixdiff.rb +75 -0
  96. data/lib/oats/util.rb +125 -0
  97. data/lib/oats/version.rb +3 -0
  98. data/lib/oats.rb +36 -0
  99. data/nbproject/configs/agent.properties +0 -0
  100. data/nbproject/configs/gr.properties +0 -0
  101. data/nbproject/project.properties +10 -0
  102. data/nbproject/project.xml +17 -0
  103. data/oats.gemspec +42 -0
  104. data/oats_ini.yml +258 -0
  105. data/oats_tests/Gemfile +18 -0
  106. data/oats_tests/aut_ini.yml +30 -0
  107. data/oats_tests/bin/oats +8 -0
  108. data/oats_tests/environments/qa.yml +4 -0
  109. data/oats_tests/environments/qa_chrome.yml +4 -0
  110. data/oats_tests/examples/core/coreExamples.yml +8 -0
  111. data/oats_tests/examples/core/expectedException.rb +39 -0
  112. data/oats_tests/examples/core/ok_verify.rb +2 -0
  113. data/oats_tests/examples/core/ok_verify.rb_ok/out/myfile.txt +1 -0
  114. data/oats_tests/examples/core/ok_verify.rb_ok/out/myfile2.txt +1 -0
  115. data/oats_tests/examples/core/ok_verify.rb_ok/rats_test.log +2 -0
  116. data/oats_tests/examples/core/unexpectedException.rb +30 -0
  117. data/oats_tests/examples/examples.yml +13 -0
  118. data/oats_tests/examples/gui/guiExamples.yml +7 -0
  119. data/oats_tests/examples/gui/seleniumGoogle.rb +10 -0
  120. data/oats_tests/examples/gui/webdriverGoogle.rb +9 -0
  121. data/oats_tests/examples/keywords/SampleXlList-1.xls +0 -0
  122. data/oats_tests/examples/keywords/SampleXlList-2.xls +0 -0
  123. data/oats_tests/examples/keywords/SampleXlLists.xls +0 -0
  124. data/oats_tests/examples/keywords/keywordsDriver.rb +1 -0
  125. data/oats_tests/examples/keywords/keywordsExamples.yml +8 -0
  126. data/oats_tests/examples/keywords/keywordsTC1.yml +5 -0
  127. data/oats_tests/examples/keywords/keywordsTestlist.yml +16 -0
  128. data/oats_tests/examples/needsWork/addTestDynamically.rb +4 -0
  129. data/oats_tests/examples/needsWork/emailVerify.rb +34 -0
  130. data/oats_tests/examples/needsWork/testSql/rtest.sql +6 -0
  131. data/oats_tests/examples/needsWork/testSql/rtest.yml +11 -0
  132. data/oats_tests/examples/occTest/occTest.rb +13 -0
  133. data/oats_tests/examples/occTest/occTest_1.rb +1 -0
  134. data/oats_tests/examples/occTest/occTest_1_1.rb +1 -0
  135. data/oats_tests/examples/occTest/occTest_1_2.rb +1 -0
  136. data/oats_tests/examples/occTest/occTest_1_3.rb +1 -0
  137. data/oats_tests/examples/occTest/occTest_1_4.rb +1 -0
  138. data/oats_tests/examples/occTest/occTest_2.rb +1 -0
  139. data/oats_tests/examples/occTest/occTest_2_1.rb +1 -0
  140. data/oats_tests/examples/occTest/occTest_2_2.rb +1 -0
  141. data/oats_tests/examples/occTest/occTest_2_3.rb +1 -0
  142. data/oats_tests/examples/occTest/occTest_2_4.rb +1 -0
  143. data/oats_tests/examples/occTest/occTest_3.rb +1 -0
  144. data/oats_tests/examples/occTest/occTest_3_1.rb +1 -0
  145. data/oats_tests/examples/occTest/occTest_3_2.rb +1 -0
  146. data/oats_tests/examples/occTest/occTest_3_3.rb +1 -0
  147. data/oats_tests/examples/occTest/occTest_3_4.rb +1 -0
  148. data/oats_tests/examples/occTest/occTest_4.rb +1 -0
  149. data/oats_tests/examples/occTest/occTestlist.yml +9 -0
  150. data/oats_tests/examples/occTest/occTestlist_1.yml +9 -0
  151. data/oats_tests/examples/occTest/occTestlist_2.yml +9 -0
  152. data/oats_tests/examples/occTest/occTestlist_3.yml +9 -0
  153. data/oats_tests/examples/occTest/variation1.yml +4 -0
  154. data/oats_tests/examples/occTest/variation2.yml +4 -0
  155. data/oats_tests/examples/testFileLocationUnitTests/extn_driver.rb +4 -0
  156. data/oats_tests/examples/testFileLocationUnitTests/folder/oats.yml +3 -0
  157. data/oats_tests/examples/testFileLocationUnitTests/folder/t1.rb +2 -0
  158. data/oats_tests/examples/testFileLocationUnitTests/folder1/t1.yml +2 -0
  159. data/oats_tests/examples/testFileLocationUnitTests/folder1/t1_1.yml +3 -0
  160. data/oats_tests/examples/testFileLocationUnitTests/folder2/oats.yml +3 -0
  161. data/oats_tests/examples/testFileLocationUnitTests/folder2/t1.rb +2 -0
  162. data/oats_tests/examples/testFileLocationUnitTests/folder2/t1.yml +2 -0
  163. data/oats_tests/examples/testFileLocationUnitTests/no_yaml.rb +3 -0
  164. data/oats_tests/examples/testFileLocationUnitTests/post_yaml.rb +1 -0
  165. data/oats_tests/examples/testFileLocationUnitTests/t1.rb +4 -0
  166. data/oats_tests/examples/testFileLocationUnitTests/t1.yml +2 -0
  167. data/oats_tests/examples/testFileLocationUnitTests/t1_1.yml +3 -0
  168. data/oats_tests/examples/testFileLocationUnitTests/testDir/oats.yml +3 -0
  169. data/oats_tests/examples/testFileLocationUnitTests/testDir/t1.rb +2 -0
  170. data/oats_tests/examples/testFileLocationUnitTests/testDir/t1.yml +2 -0
  171. data/oats_tests/examples/testFileLocationUnitTests/testDir2/t1.rb +2 -0
  172. data/oats_tests/examples/testFileLocationUnitTests/testDir2/t1.yml +2 -0
  173. data/oats_tests/examples/testFileLocationUnitTests/unitTestList.yml +36 -0
  174. data/oats_tests/examples/testFileLocationUnitTests/yml_driver.rb +2 -0
  175. data/oats_tests/lib/business.rb +28 -0
  176. data/oats_tests/lib/sample_xl_lists.rb +37 -0
  177. data/test/common_test_unit_setup.rb +21 -0
  178. data/test/test_basic.rb +16 -0
  179. data/test/test_selenium.rb +16 -0
  180. data/test/test_xl_lists.rb +16 -0
  181. metadata +291 -0
@@ -0,0 +1,207 @@
1
+ #require 'oats/oselenium' if $oats_execution
2
+ require 'yaml' # http://www.ruby-doc.org/core/classes/YAML.html http://yaml4r.sourceforge.net/doc
3
+ require 'oats/test_case'
4
+ require 'oats/test_list'
5
+ require 'oats/oats_exceptions'
6
+
7
+ class OatsReportError < OatsError ; end
8
+
9
+ module Oats
10
+
11
+ class Report
12
+ @@pre_test = nil
13
+ @@post_test = nil
14
+
15
+ def Report.failed_file_name(var)
16
+ if var.instance_of?(Variation)
17
+ list_name = var.list_name
18
+ else
19
+ list_name = var
20
+ end
21
+ return unless list_name
22
+ return File.basename(list_name) + '.yml' if list_name =~ /-fail$/
23
+ # File.basename(list_name) + '-ft-' + var.env_name[0,1] + var.env_name[-1,1] + '.yml'
24
+ File.basename(list_name.sub(/\.yml\z/,'')) + '-fail.yml'
25
+ end
26
+
27
+ def Report.results(list, from_agent = nil) #
28
+ unless list
29
+ $log.error "Report.results are requested for a null list. Ignoring request."
30
+ return nil
31
+ end
32
+ vars = list.variations
33
+ vars.each do |var|
34
+ tests = []
35
+ var.tests.each do |tst|
36
+ if tst.instance_of?(TestList)
37
+ @@pre_test ||= list.pre_test
38
+ @@post_test ||= list.post_test
39
+ Report.results(tst, from_agent)
40
+ else
41
+ tests << tst
42
+ end
43
+ end
44
+ unless tests.empty?
45
+ if var.parent.id
46
+ list_name = File.basename(var.parent.id,'.*')
47
+ else
48
+ list_name = tests.first.id
49
+ end
50
+ var.list_name = list_name
51
+ dir_results = $oats['execution']['dir_results']
52
+ all_errors = tests.find_all{|i| not i.errors.empty?}
53
+ var.total = tests.length
54
+ var.pass = tests.find_all{|i| i.status == 0}.length
55
+ var.fail = all_errors.length
56
+ var.skip = tests.find_all{|i| i.status == 2}.length
57
+ $log.error "Test counts do not add up. Please report this to the OATS administrator." \
58
+ unless var.total == var.pass + var.fail + var.skip
59
+ pre_post_summary = ''
60
+ unless tests.empty? or from_agent
61
+ if @@pre_test and ! @@pre_test.errors.empty?
62
+ pre_post_summary += ", PRE_FAILURE"
63
+ var.fail += 1
64
+ # var.fail = var.fail ? (var.fail + 1) : 1
65
+ end
66
+ if @@post_test and ! @@post_test.errors.empty?
67
+ pre_post_summary += ", POST_FAILURE"
68
+ var.fail += 1
69
+ end
70
+ $log.info "*** SUMMARY STATISTICS for list:#{list_name} on env:#{var.env_name}" +
71
+ " Total[#{var.total}], " + "Fail[#{var.fail}], Pass[#{var.pass}], " + "Skip[#{var.skip}]" +
72
+ pre_post_summary
73
+ end
74
+ return true if all_errors.empty? or from_agent
75
+ # Generate the failed tests lists only for non-agent mode
76
+ failed_file_name = Report.failed_file_name(var)
77
+ failed_dir = Oats.result_archive_dir + '/failed'
78
+ FileUtils.mkdir_p(failed_dir)
79
+ failed_tests_file = File.join(failed_dir,failed_file_name)
80
+ File.open( failed_tests_file, 'w' ) do |ftf |
81
+ ftf.puts("# Failed OATS tests\n---\nexecution: \n test_files: ")
82
+ tests.each do |test|
83
+ case test.status
84
+ when 0
85
+ $log.error "Unexpected test state for [#{test.id}]. Test status is PASSED but it contains error info. Please report this to the OATS administrator." unless test.errors.empty?
86
+ when 1
87
+ $log.warn "- #{test.id}"
88
+ ftf.puts(" - #{test.id}")
89
+ if test.errors.empty?
90
+ $log.error "Unexpected test state. Test status is error but it contains no error info. Please report this to the OATS administrator."
91
+ else
92
+ test.errors.each do |ex_arr|
93
+ if ex_arr[1] =~ /see result file for details: *(.*)/
94
+ file = $1
95
+ $log.warn " #{file}"
96
+ ftf.puts "# #{file}"
97
+ else
98
+ exc = "[#{ex_arr[0]}] " + ex_arr[1]
99
+ $log.warn " #{exc}"
100
+ ftf.puts "# #{exc}"
101
+ end
102
+ end
103
+ end
104
+ when 2 then # Just skipped
105
+ $log.warn "- #{test.id}"
106
+ $log.warn " [SKIPPED]"
107
+ else
108
+ $log.error "Unknown test status for [#{test.id}]. Please report this to the OATS administrator."
109
+ end
110
+ end
111
+ end
112
+ FileUtils.cp(failed_tests_file,dir_results)
113
+ FileUtils.cp(failed_tests_file,File.join(failed_dir,'last-fail.yml'))
114
+ end
115
+ end
116
+ return true
117
+ end
118
+
119
+ # Ideally oats_info_store should use locks and be interrupt safe
120
+ # If dir is nil or oats_info is given dump oats_info, otherwise load and return Report:@@oats_info
121
+ # Default dir is dir_results, default oats_info is $oats_info
122
+ def Report.oats_info_store(dir = nil, oats_info = nil)
123
+ results_file = File.join( dir ? dir : $oats['execution']['dir_results'] , 'results.dump')
124
+ unless dir.nil? or oats_info
125
+ @@oats_info = File.exists?(results_file) ? Report.oats_info_retrieve(results_file) : nil
126
+ return @@oats_info
127
+ end
128
+ archive_dir = Oats.result_archive_dir
129
+ if archive_dir and File.directory?(archive_dir)
130
+ results_file_tmp = File.join(archive_dir, 'results.dump') +'.tmp'
131
+ else
132
+ results_file_tmp = results_file +'.tmp'
133
+ end
134
+ oats_info = $oats_info unless oats_info
135
+ File.open( results_file_tmp , 'w' ) { |out| Marshal.dump(oats_info, out, -1) }
136
+ begin # Ensure dump is written completely before being replaced
137
+ rinfo = File.open( results_file_tmp, 'r' ) { |inp| Marshal.load(inp)}
138
+ rescue Exception => exc
139
+ $log.error "Error reading back [#{results_file_tmp}]. Skipping saving the intermediate results."
140
+ $log.error exc
141
+ return oats_info
142
+ end
143
+ begin
144
+ Ragent.snapshot_oats_info(rinfo) if $oats_execution['agent']
145
+ FileUtils.mv(results_file_tmp, results_file)
146
+ rescue
147
+ $log.error "Error moving [#{results_file_tmp}]. Skipping saving the intermediate results."
148
+ $log.error exc
149
+ end
150
+ return oats_info
151
+ end
152
+
153
+ def Report.oats_info_retrieve(results_file)
154
+ raise OatsReportError, "Can not locate [#{results_file}]. Skipping report generation for: #{results_file}" \
155
+ unless File.exist?(results_file)
156
+ begin
157
+ return File.open( results_file, 'r' ) { |inp| Marshal.load(inp)}
158
+ rescue
159
+ $log.error "Error reading [#{results_file}]. Skipping report generation for: #{results_file}"
160
+ raise
161
+ end
162
+ end
163
+
164
+ def Report.archive_results(post_run = false)
165
+ oats_data = $oats
166
+ dir_res = oats_data['execution']['dir_results']
167
+ rm_dir_res = post_run ? false : true
168
+ if File.directory?(dir_res) # Copy current results to archive
169
+ begin
170
+ oats_info = Report.oats_info_store(dir_res)
171
+ unless post_run
172
+ return unless oats_info
173
+ unless oats_info['end_time']
174
+ regenerated = true
175
+ $log.info "Generating missing results files for the previous run."
176
+ Report.results(oats_info['test_files'])
177
+ Report.oats_info_store(nil,oats_info)
178
+ end
179
+ end
180
+ rescue Exception => e
181
+ if e.instance_of? OatsReportError
182
+ $log.error 'Encountered: ' + $!.to_s
183
+ else
184
+ $log.error $!
185
+ end
186
+ end
187
+ # If the stored execution doesn't have context, default to the current execution ids inside incomplete
188
+ archive_id = ((oats_info and oats_info['jobid'])||(Oats.context and Oats.context['jobid']))
189
+ if archive_id
190
+ archive_dir = File.join( Oats.result_archive_dir, archive_id.to_s)
191
+ if post_run
192
+ FileUtils.cp_r(dir_res, archive_dir)
193
+ elsif regenerated or ! File.directory?(archive_dir)
194
+ FileUtils.rm_rf archive_dir
195
+ FileUtils.mv(dir_res, archive_dir)
196
+ rm_dir_res = false
197
+ end
198
+ else
199
+ $log.error "Removing results without archiving because can not find any jobid."
200
+ rm_dir_res = true
201
+ end
202
+ FileUtils.rm_rf dir_res if rm_dir_res # Cleanup prior to next run
203
+ end
204
+ end
205
+
206
+ end
207
+ end
@@ -0,0 +1,88 @@
1
+ # Override oats data based on commandline options.
2
+ #require 'log4r' # http://log4r.sourceforge.net/rdoc/index.html
3
+ #require 'util'
4
+ require 'deep_merge/deep_merge'
5
+
6
+ module Oats
7
+
8
+ module Roptions
9
+
10
+ def Roptions.overlay(options)
11
+ opts_array = options['_:options']
12
+ if options['_:json']
13
+ $log.info "Overriding Oats.data with: #{options['_:json']}"
14
+ $oats.deep_merge!(JSON.parse(options['_:json']))
15
+ end
16
+ if opts_array
17
+ opts_array.each do |opt_valu|
18
+
19
+ opt, valu = opt_valu.split(/\s*:\s*/)
20
+ data_keys = opt.split('.')
21
+ value = $oats
22
+ until data_keys.size == 1 do
23
+ value = value[key=data_keys.shift]
24
+ Oats.assert value.instance_of?(Hash), "Oats.data #{opt} is not a hash at #{key}"
25
+ end
26
+ $log.info "Option #{opt.inspect} specified as: #{valu.inspect} is overriding #{value[data_keys.first].inspect}"
27
+ value[data_keys.first] = valu
28
+ end
29
+ end
30
+ end
31
+
32
+ def Roptions.override(options={})
33
+ oats_data = $oats
34
+ oats_lib = Util.expand_path(File.dirname(__FILE__)+'/..')
35
+ oats_data['_']['oats_lib'] = oats_lib
36
+ options.each do |key,val|
37
+ data_keys = key.split(':')
38
+ v = oats_data
39
+ key_var = nil
40
+ loop do
41
+ key_var = data_keys.shift
42
+ break if data_keys.empty? or key_var == '_'
43
+ v = v[key_var]
44
+ end
45
+ next if key_var == '_'
46
+ if val.instance_of?(Array)
47
+ val_str = val.join(',')
48
+ else
49
+ val_str = val.to_s
50
+ end
51
+ vval = v[key_var]
52
+ if vval.instance_of?(Array)
53
+ vval_str = vval.join(',')
54
+ else
55
+ vval_str = vval.to_s
56
+ end
57
+ $log.info "Option #{key.inspect} specified as: #{val_str.inspect} is overriding #{vval_str.inspect}"\
58
+ unless $oats_execution['agent']
59
+ v[key_var] = val
60
+ end
61
+
62
+ # *** Now verify the options ***
63
+ # Ensure log_level valid
64
+ level = Log4r::Log4rConfig::LogLevels.index(oats_data['execution']['log_level'])
65
+ raise(OatsBadInput, "Unrecognized execution:log_level [#{oats_data['execution']['log_level']}]") unless level
66
+ $log.level = level = 1 if $log
67
+
68
+ raise(OatsBadInput,"Must specify execution:dir_results") unless oats_data['execution']['dir_results']
69
+
70
+ # Fix path to vendor, needed to run under java
71
+ oats_data['_']['vendor'] = Util.expand_path('../vendor',oats_lib)
72
+
73
+ # Verify existence of browser to show results
74
+ oats_data['selenium']['ide']['result_browser'] = oats_data['selenium']['ide']['result_browser']
75
+ oats_data['selenium']['ide']['show_result'] = 0 unless oats_data['selenium']['ide']['show_result']
76
+
77
+ unless oats_data['selenium']['pause_on_exit']
78
+ if oats_data['execution']['test_files'] and oats_data['execution']['test_files'].first =~ /\.yml/
79
+ oats_data['selenium']['pause_on_exit'] = 0
80
+ else
81
+ oats_data['selenium']['pause_on_exit'] = 1
82
+ end
83
+ end
84
+ return options
85
+ end
86
+
87
+ end
88
+ end