awetestlib 0.1.11 → 0.1.12

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.
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
35
35
  s.add_dependency('json', '1.4.6') #for safari support
36
36
  s.add_dependency('pry')
37
37
  s.add_dependency('cucumber')
38
+ s.add_dependency('calabash-cucumber')
38
39
  s.require_paths = ["lib"] #,"ext"]
39
40
  s.files = `git ls-files`.split("\n")
40
41
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
data/bin/awetestlib CHANGED
@@ -19,6 +19,9 @@ elsif cmd == "netbeans_setup"
19
19
  elsif cmd == 'cucumber_setup'
20
20
  require File.join(File.dirname(__FILE__),"awetestlib-cucumber-setup")
21
21
  awetestlib_cucumber_setup
22
+ elsif cmd == 'mobile_app_setup'
23
+ require File.join(File.dirname(__FILE__),"awetestlib-mobile-app-setup")
24
+ awetestlib_mobile_app_setup
22
25
  else
23
26
 
24
27
  require 'optparse'
@@ -18,6 +18,9 @@ def print_usage
18
18
  awetestlib netbeans_setup <project_name>
19
19
  setup a netbeans project
20
20
 
21
+ awetestlib mobile_app_setup <project_name>
22
+ setup a mobile app project
23
+
21
24
  awetestlib cucumber_setup
22
25
  setup cucumber regression and provide skeleton folder structure
23
26
 
@@ -0,0 +1,31 @@
1
+ def awetestlib_mobile_app_setup
2
+ if ARGV[1].nil?
3
+ @proj_dir = "sample_mobile_app"
4
+ else
5
+ @proj_dir = ARGV[1]
6
+ end
7
+
8
+ @cucumber_dir = File.join(FileUtils.pwd, @proj_dir)
9
+ @source_dir = File.join(File.dirname(__FILE__), '..', 'setup_samples', 'sample_mobile_app')
10
+
11
+ if File.exists?(@cucumber_dir)
12
+ puts "Mobile app project directory already exists."
13
+ exit 1
14
+ end
15
+
16
+ msg("Question") do
17
+ puts "I'm about to create a mobile app project named #{ARGV[1]} in this directory" if ARGV[1]
18
+ puts "I'm about to create a mobile app project named sample_mobile_app in this directory" if ARGV[1].nil?
19
+ puts "Please hit return to confirm that's what you want."
20
+ puts "NOTE: You may need to run this command as an administrator."
21
+ end
22
+ exit 2 unless STDIN.gets.chomp == ''
23
+
24
+ FileUtils.cp_r(@source_dir, @cucumber_dir)
25
+
26
+ msg("Info") do
27
+ puts "Configuring files and settings..."
28
+ puts "A skeleton project has been created with a features and step definitions folder"
29
+ end
30
+
31
+ end
@@ -1050,183 +1050,9 @@ tags: system, http, fatal, error
1050
1050
  example: See click()
1051
1051
  related methods: rescue_me()
1052
1052
  =end
1053
- def validate(browser, fileName = '', lnbr = __LINE__, dbg = false)
1054
- debug_to_log("#{__method__} begin") if dbg
1055
- msg = ''
1056
- myOK = true
1057
- if not browser
1058
- msg = "#{fileName}----browser is nil object. (#{lnbr})"
1059
- myOK = false
1060
- elsif not is_browser?(browser)
1061
- msg = "#{fileName}----not a browser. (#{lnbr})"
1062
- debug_to_log(browser.inspect)
1063
- myOK = false
1064
-
1065
- else
1066
- if browser.respond_to?(:url)
1067
- if not browser.url == @currentURL
1068
- @currentURL = browser.url
1069
- debug_to_log("Current URL: [#{@currentURL}]")
1070
- # mark_testlevel( "Current URL: [#{@currentURL}]", 1 )
1071
- end
1072
- end
1073
-
1074
- if @capture_js_errors
1075
- if browser.respond_to?(:status)
1076
- if browser.status.downcase =~ /errors? on page/ and
1077
- not browser.status.downcase.include?('Waiting for')
1078
- capture_js_error(browser)
1079
- end
1080
- end
1081
- end
1082
-
1083
- begin
1084
- browser_text = browser.text.downcase
1085
- rescue => e
1086
- if not rescue_me(e, __method__, "browser.text.downcase", "#{browser.class}", browser)
1087
- debug_to_log("browser.text.downcase in #{__method__} #{browser.class}")
1088
- debug_to_log("#{get_callers}")
1089
- raise e
1090
- else
1091
- return true
1092
- end
1093
- end
1094
-
1095
- if browser_text
1096
- if browser_text.match(/unrecognized error condition has occurred/i)
1097
- msg = "#{fileName}----Unrecognized Exception occurred. (#{lnbr})"
1098
- myOK = false
1099
-
1100
- elsif browser_text.match(/cannot find server or dns error/i)
1101
- msg = "#{fileName}----Cannot find server error or DNS error. (#{lnbr})"
1102
- myOK = false
1103
-
1104
- elsif browser_text.match(/the rpc server is unavailable/i)
1105
- msg = "#{fileName}----RPC server unavailable. (#{lnbr})"
1106
- myOK = false
1107
-
1108
- elsif browser_text.match(/404 not found/i) or
1109
- browser_text.match(/the page you were looking for does\s*n[o']t exist/i)
1110
- msg = "#{fileName}----RFC 2068 HTTP/1.1: 404 URI Not Found. (#{lnbr})"
1111
- myOK = false
1112
-
1113
- elsif browser_text.match(/we're sorry, but something went wrong/i) or
1114
- browser_text.match(/http status 500/i)
1115
- msg = "#{fileName}----RFC 2068 HTTP/1.1: 500 Internal Server Error. (#{lnbr})"
1116
- myOK = false
1117
-
1118
- elsif browser_text.match(/internet explorer cannot display the webpage/i)
1119
- msg = "#{fileName}----Probably RFC 2068 HTTP/1.1: 500 Internal Server Error. (#{lnbr})"
1120
- myOK = false
1121
-
1122
- elsif browser_text.match(/503.*service unavailable/i)
1123
- msg = "#{fileName}----RFC 2068 HTTP/1.1: 503 Service Unavailable. (#{lnbr})"
1124
- myOK = false
1125
-
1126
- elsif browser_text.match(/java.lang.NullPointerException/i)
1127
- msg = "#{fileName}----java.lang.NullPointerException. (#{lnbr})"
1128
- myOK = false
1129
-
1130
- elsif browser_text.match(/due to unscheduled maintenance/i)
1131
- msg = "#{fileName}----Due to unscheduled maintenance. (#{lnbr})"
1132
- myOK = false
1133
-
1134
- elsif browser_text.match(/network\s+error\s*(.+)$/i)
1135
- $1.chomp!
1136
- msg = "#{fileName}----Network Error #{$1}. (#{lnbr})"
1137
- myOK = false
1138
-
1139
- elsif browser_text.match(/warning: page has expired/i)
1140
- msg = "#{fileName}----Page using information from form has expired. Not automatically resubmitted. (#{lnbr})"
1141
- myOK = false
1142
-
1143
- elsif browser_text.match(/no backend server available/i)
1144
- msg = "#{fileName}----Cannot Reach Server (#{lnbr})"
1145
- myOK = false
1146
-
1147
- elsif browser_text.match(/sign on\s+.+\s+unsuccessful/i)
1148
- msg = "#{fileName}----Invalid Id or Password (#{lnbr})"
1149
- myOK = false
1150
-
1151
- elsif browser_text.match(/you are not authorized/i)
1152
- msg = "#{fileName}----Not authorized to view this page. (#{lnbr})"
1153
- myOK = false
1154
-
1155
- elsif browser_text.match(/too many incorrect login attempts have been made/i)
1156
- msg = "#{fileName}----Invalid Id or Password. Too many tries. (#{lnbr})"
1157
- myOK = false
1158
-
1159
- elsif browser_text.match(/system error\.\s+an error has occurred/i)
1160
- msg = "#{fileName}----System Error. An error has occurred. Please try again or call the Help Line for assistance. (#{lnbr})"
1161
- myOK = false
1162
-
1163
- elsif browser_text.match(/Internal Server failure,\s+NSAPI plugin/i)
1164
- msg = "#{fileName}----Internal Server failure, NSAPI plugin. (#{lnbr})"
1165
- myOK = false
1166
-
1167
- elsif browser_text.match(/Error Page/i)
1168
- msg = "#{fileName}----Error Page. (#{lnbr})"
1169
- myOK = false
1170
-
1171
- elsif browser_text.match(/The website cannot display the page/i)
1172
- msg = "#{fileName}----HTTP 500. (#{lnbr})"
1173
- myOK = false
1174
-
1175
- # elsif browser_text.match(/Insufficient Data/i)
1176
- # msg = "#{fileName}----Insufficient Data. (#{lnbr})"
1177
- # myOK = false
1178
-
1179
- elsif browser_text.match(/The timeout period elapsed/i)
1180
- msg = "#{fileName}----Time out period elapsed or server not responding. (#{lnbr})"
1181
- myOK = false
1182
-
1183
- elsif browser_text.match(/Unexpected\s+errors*\s+occur+ed\.\s+(?:-+)\s+(.+)/i)
1184
- msg = "#{fileName}----Unexpected errors occurred. #{$2.slice(0, 120)} (#{lnbr})"
1185
- if not browser_text.match(/close the window and try again/i)
1186
- myOK = false
1187
- else
1188
- debug_to_log("#{msg}")
1189
- end
1190
-
1191
- elsif browser_text.match(/Server Error in (.+) Application\.\s+(?:-+)\s+(.+)/i)
1192
- msg = "#{fileName}----Server Error in #{1} Application. #{$2.slice(0, 100)} (#{lnbr})"
1193
- myOK = false
1194
-
1195
- elsif browser_text.match(/Server Error in (.+) Application\./i)
1196
- msg = "#{fileName}----Server Error in #{1} Application. '#{browser_text.slice(0, 250)}...' (#{lnbr})"
1197
- myOK = false
1198
-
1199
- elsif browser_text.match(/An error has occur+ed\. Please contact support/i)
1200
- msg = "#{fileName}----An error has occurred. Please contact support (#{lnbr})"
1201
- myOK = false
1202
-
1203
- end
1204
- else
1205
- debug_to_log("browser.text returned nil")
1206
- end
1207
- end
1208
-
1209
- if not myOK
1210
- msg << " (#{browser.url})"
1211
- puts msg
1212
- debug_to_log(browser.inspect)
1213
- debug_to_log(browser.text)
1214
- fatal_to_log(msg, lnbr)
1215
- raise(RuntimeError, msg, caller)
1216
- else
1217
- debug_to_log("#{__method__} returning OK") if dbg
1218
- return myOK
1219
- end
1220
-
1221
- rescue
1222
- errmsg = $!
1223
- if errmsg.match(msg)
1224
- errmsg = ''
1225
- end
1226
- bail_out(browser, lnbr, "#{msg} #{errmsg}")
1227
- end
1228
-
1229
- alias validate_browser validate
1053
+ def validate(browser, fileName = '', lnbr = __LINE__, dbg = false) # need to get rid of validate call, issues if modal comes up after click
1054
+ end
1055
+
1230
1056
 
1231
1057
 
1232
1058
  end
data/lib/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Awetestlib
2
- VERSION = "0.1.11"
3
- VERSION_DATE = "2012-09-06"
2
+ VERSION = "0.1.12"
3
+ VERSION_DATE = "2012-09-10"
4
4
  end
@@ -0,0 +1,14 @@
1
+ Feature:
2
+ I want to test cucumber
3
+
4
+ Scenario:
5
+
6
+ When I touch "Number"
7
+ Then I should see "Sorted by Atomic Number"
8
+ When I touch "Symbol"
9
+ Then I should see "Sorted by Atomic Symbol"
10
+ When I touch "State"
11
+ Then I should see "Grouped by State"
12
+
13
+
14
+
@@ -0,0 +1,80 @@
1
+ Then /^let me debug$/ do
2
+ binding.pry
3
+ end
4
+
5
+ Then /^I swipe "(.*?)" from the "(.*?)" label$/ do |dir, ele| #Then I swipe "up" from the "Locations" label
6
+ query("view:'UILabel' marked:'#{ele}' first", "swipeInDirection:", dir)
7
+ end
8
+
9
+ Then /^I use the keyboard to fill in the textfield marked "(.*?)" with "(.*?)"$/ do |text_field_mark, text_to_type|
10
+ query( "view marked:'#{text_field_mark}'", 'setText:', text_to_type )
11
+ end
12
+
13
+ Then /^I touch the switch with index "(.*?)"$/ do |idx| #Then I touch the switch with index "1"
14
+ touch("view:'UISwitch' index:#{idx}")
15
+ end
16
+
17
+ And /I wait (\d+) seconds?/ do |seconds| #Then I wait 3 seconds
18
+ sleep(seconds.to_i)
19
+ end
20
+
21
+ Then /^I type "(.*?)" in the text field with id "(.*?)"$/ do |txt, id|
22
+ set_text("webView css:'input' id:'#{id}'", txt)
23
+ end
24
+
25
+
26
+ Then /^I touch the WebView text "(.*?)"$/ do |txt|
27
+ sleep 1
28
+ wait_for(10){element_exists("webView css:'a' textContent:'#{txt}'")}
29
+ touch("webView css:'a' textContent:'#{txt}'")
30
+ end
31
+
32
+ Then /^I touch the WebView button "(.*?)"$/ do |txt|
33
+ sleep 1
34
+ wait_for(10){element_exists("webView css:'input' textContent:'#{txt}'")}
35
+ touch("webView css:'input' textContent:'#{txt}'")
36
+ end
37
+
38
+ Then /^I should see the WebView text "(.*?)"$/ do |txt|
39
+ sleep 1
40
+ if !query("webView textContent:'#{txt}'").empty?
41
+ true
42
+ else
43
+ fail("Did not find WebView text '#{txt}")
44
+ end
45
+ end
46
+
47
+ Then /^I should not see the WebView text "(.*?)"$/ do |txt|
48
+ sleep 1
49
+ if query("webView textContent:'#{txt}'").empty?
50
+ true
51
+ else
52
+ fail("Found WebView text '#{txt}'")
53
+ end
54
+ end
55
+
56
+ Then /^I touch the WebView button with value "(.*?)"$/ do |val|
57
+ wait_for(10){element_exists("webView css:'input' value:'#{val}'")}
58
+ touch("webView css:'input' value:'#{val}'")
59
+ end
60
+
61
+ When /^I touch the WebView link with index "(.*?)"$/ do |idx|
62
+ wait_for(10){element_exists("webView css:'a' index:#{idx}")}
63
+ touch("webView css:'a' index:#{idx}")
64
+ end
65
+
66
+ def send_command ( command )
67
+ %x{osascript<<APPLESCRIPT
68
+ tell application "System Events"
69
+ tell application "iPhone Simulator" to activate
70
+ keystroke "#{command}"
71
+ delay 1
72
+ key code 36
73
+ end tell
74
+ APPLESCRIPT}
75
+ end
76
+
77
+ When /^I send the command "([^\\"]*)"$/ do |cmd|
78
+ send_command(cmd)
79
+ end
80
+
@@ -0,0 +1,3 @@
1
+ require 'calabash-cucumber/cucumber'
2
+ require 'calabash-cucumber/calabash_steps'
3
+ require 'pry'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awetestlib
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 11
10
- version: 0.1.11
9
+ - 12
10
+ version: 0.1.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Anthony Woo
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-09-06 00:00:00 Z
19
+ date: 2012-09-10 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: watir-webdriver
@@ -226,6 +226,20 @@ dependencies:
226
226
  version: "0"
227
227
  type: :runtime
228
228
  version_requirements: *id014
229
+ - !ruby/object:Gem::Dependency
230
+ name: calabash-cucumber
231
+ prerelease: false
232
+ requirement: &id015 !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ hash: 3
238
+ segments:
239
+ - 0
240
+ version: "0"
241
+ type: :runtime
242
+ version_requirements: *id015
229
243
  description: Awetest DSL for automated testing of browser-based applications.
230
244
  email: patrick@3qilabs.com
231
245
  executables:
@@ -233,6 +247,7 @@ executables:
233
247
  - awetestlib
234
248
  - awetestlib-cucumber-setup.rb
235
249
  - awetestlib-helpers.rb
250
+ - awetestlib-mobile-app-setup.rb
236
251
  - awetestlib-netbeans-setup.rb
237
252
  - awetestlib-regression-setup.rb
238
253
  - awetestlib-rubymine-setup.rb
@@ -253,6 +268,7 @@ files:
253
268
  - bin/awetestlib
254
269
  - bin/awetestlib-cucumber-setup.rb
255
270
  - bin/awetestlib-helpers.rb
271
+ - bin/awetestlib-mobile-app-setup.rb
256
272
  - bin/awetestlib-netbeans-setup.rb
257
273
  - bin/awetestlib-regression-setup.rb
258
274
  - bin/awetestlib-rubymine-setup.rb
@@ -285,6 +301,10 @@ files:
285
301
  - setup_samples/sample_cucumber/features/step_definitions/predefined_steps.rb
286
302
  - setup_samples/sample_cucumber/features/support/env.rb
287
303
  - setup_samples/sample_cucumber/features/yahoo_mail.feature
304
+ - setup_samples/sample_mobile_app/TheElements.zip
305
+ - setup_samples/sample_mobile_app/features/my_first.feature
306
+ - setup_samples/sample_mobile_app/features/step_definitions/predefined_webview_steps.rb
307
+ - setup_samples/sample_mobile_app/features/support/env.rb
288
308
  - setup_samples/sample_netbeans/demo.rb
289
309
  - setup_samples/sample_netbeans/nbproject/configs/Demo.properties
290
310
  - setup_samples/sample_netbeans/nbproject/private/config.properties