calabash-android 0.2.9 → 0.2.10
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.
- data/CHANGES.txt +10 -0
- data/bin/calabash-android-build.rb +0 -4
- data/calabash-android.gemspec +1 -0
- data/features-skeleton/support/app_installation_hooks.rb +7 -7
- data/features-skeleton/support/app_life_cycle_hooks.rb +5 -1
- data/lib/calabash-android/canned_steps.md +5 -0
- data/lib/calabash-android/helpers.rb +5 -0
- data/lib/calabash-android/operations.rb +21 -10
- data/lib/calabash-android/steps/progress_steps.rb +17 -0
- data/lib/calabash-android/version.rb +2 -2
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/CalabashInstrumentationTestRunner.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +9 -11
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java +69 -12
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextById.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextById.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/WaitForView.java +43 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +3 -2
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +13 -2
- metadata +21 -4
data/CHANGES.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
0.2.10:
|
2
|
+
Various small improvements and bug fixes.
|
3
|
+
|
4
|
+
Default behavior is now to shutdown the test server after scenario.
|
5
|
+
calabash-android now waits for the test server to be ready before sending
|
6
|
+
the first command.
|
7
|
+
|
8
|
+
If the environment variable RESET_BETWEEN_SCENARIOS is "1" the app will
|
9
|
+
be reinstalled between scenarios and not just between features.
|
10
|
+
|
1
11
|
0.2.9:
|
2
12
|
Moving to the new http screenshot method.
|
3
13
|
screenshottaker.jar and the use of ddmlib will be phased out.
|
data/calabash-android.gemspec
CHANGED
@@ -6,8 +6,13 @@ end
|
|
6
6
|
|
7
7
|
Before do |scenario|
|
8
8
|
feature_name = scenario.feature.name
|
9
|
-
if FeatureNameMemory.feature_name != feature_name
|
10
|
-
|
9
|
+
if FeatureNameMemory.feature_name != feature_name \
|
10
|
+
or ENV["RESET_BETWEEN_SCENARIOS"] == "1"
|
11
|
+
if ENV["RESET_BETWEEN_SCENARIOS"] == "1"
|
12
|
+
log "New scenario - reinstalling apps"
|
13
|
+
else
|
14
|
+
log "First scenario in feature - reinstalling apps"
|
15
|
+
end
|
11
16
|
|
12
17
|
uninstall_apps
|
13
18
|
install_app(ENV["TEST_APP_PATH"])
|
@@ -16,11 +21,6 @@ Before do |scenario|
|
|
16
21
|
end
|
17
22
|
end
|
18
23
|
|
19
|
-
at_exit do
|
20
|
-
require 'net/http'
|
21
|
-
Net::HTTP.get(URI.parse("http://127.0.0.1:34777/kill"))
|
22
|
-
end
|
23
|
-
|
24
24
|
FeatureNameMemory = Class.new
|
25
25
|
class << FeatureNameMemory
|
26
26
|
@feature_name = nil
|
@@ -159,6 +159,10 @@ Waits for the current dialog to close.
|
|
159
159
|
Then /^I wait to see "([^\"]*)"$/
|
160
160
|
Waits for the specified text to appear.
|
161
161
|
|
162
|
+
Then /^I wait up to (\d+) seconds for "([^\"]*)" to appear$/
|
163
|
+
Then /^I wait up to (\d+) seconds to see "([^\"]*)"$/
|
164
|
+
Waits for the specified text to appear, with a custom timeout
|
165
|
+
|
162
166
|
Then /^I wait for the "([^\"]*)" button to appear$/
|
163
167
|
Waits for a button with the specified text to appear.
|
164
168
|
|
@@ -170,6 +174,7 @@ Waits for a view view that id to appear.
|
|
170
174
|
Note that use the short name and not the fully quantified name. That means if your id
|
171
175
|
is 'com.foo.R.id.bar_label' you would use 'I press view with id "bar_label"'.
|
172
176
|
|
177
|
+
Then /^I wait up to (\d+) seconds for the "([^\"]*)" screen to appear$/
|
173
178
|
Then /^I wait upto (\d+) seconds for the "([^\"]*)" screen to appear$/
|
174
179
|
Waits for a particular screen (Android Activity) to appear with a timeout.
|
175
180
|
|
@@ -6,6 +6,7 @@ require 'json'
|
|
6
6
|
require 'socket'
|
7
7
|
require 'timeout'
|
8
8
|
require 'calabash-android/helpers'
|
9
|
+
require 'retriable'
|
9
10
|
|
10
11
|
|
11
12
|
module Calabash module Android
|
@@ -29,6 +30,10 @@ module Operations
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
33
|
+
def shutdown_test_server
|
34
|
+
Device.default_device.shutdown_test_server
|
35
|
+
end
|
36
|
+
|
32
37
|
def performAction(action, *arguments)
|
33
38
|
Device.default_device.perform_action(action, *arguments)
|
34
39
|
end
|
@@ -76,9 +81,6 @@ module Operations
|
|
76
81
|
raise "Not yet implemented."
|
77
82
|
end
|
78
83
|
|
79
|
-
def is_windows?
|
80
|
-
ENV["OS"] == "Windows_NT"
|
81
|
-
end
|
82
84
|
###
|
83
85
|
|
84
86
|
### app life cycle
|
@@ -144,6 +146,10 @@ module Operations
|
|
144
146
|
log `#{adb_command} uninstall #{package_name}`
|
145
147
|
end
|
146
148
|
|
149
|
+
def shutdown_test_server
|
150
|
+
http("/kill")
|
151
|
+
end
|
152
|
+
|
147
153
|
def perform_action(action, *arguments)
|
148
154
|
log "Action: #{action} - Params: #{arguments.join(', ')}"
|
149
155
|
|
@@ -222,10 +228,6 @@ module Operations
|
|
222
228
|
end
|
223
229
|
end
|
224
230
|
|
225
|
-
def is_windows?
|
226
|
-
ENV["OS"] == "Windows_NT"
|
227
|
-
end
|
228
|
-
|
229
231
|
def start_test_server_in_background
|
230
232
|
test_server_package = package_name(@test_server_path)
|
231
233
|
cmd = "#{adb_command} shell am instrument -w -e class sh.calaba.instrumentationbackend.InstrumentationBackend #{test_server_package}/sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner"
|
@@ -238,10 +240,19 @@ module Operations
|
|
238
240
|
end
|
239
241
|
|
240
242
|
begin
|
241
|
-
|
242
|
-
|
243
|
+
retriable :tries => 10, :interval => 3 do
|
244
|
+
log "Checking if instrumentation backend is ready"
|
245
|
+
ready = http("/ready")
|
246
|
+
|
247
|
+
if ready != "true"
|
248
|
+
log "Instrumentation backend not yet ready"
|
249
|
+
raise "Not ready"
|
250
|
+
else
|
251
|
+
log "Instrumentation backend is ready!"
|
252
|
+
end
|
243
253
|
end
|
244
|
-
|
254
|
+
|
255
|
+
rescue
|
245
256
|
msg = "Unable to make connection to Calabash Test Server at http://127.0.0.1:#{@server_port}/\n"
|
246
257
|
msg << "Please check the logcat output for more info about what happened\n"
|
247
258
|
raise msg
|
@@ -28,10 +28,18 @@ Then /^I wait for "([^\"]*)" to appear$/ do |text|
|
|
28
28
|
performAction('wait_for_text', text)
|
29
29
|
end
|
30
30
|
|
31
|
+
Then /^I wait up to (\d+) seconds for "([^\"]*)" to appear$/ do |timeout, text|
|
32
|
+
performAction('wait_for_text', text, timeout)
|
33
|
+
end
|
34
|
+
|
31
35
|
Then /^I wait to see "([^\"]*)"$/ do |text|
|
32
36
|
performAction('wait_for_text', text)
|
33
37
|
end
|
34
38
|
|
39
|
+
Then /^I wait up to (\d+) seconds to see "([^\"]*)"$/ do |timeout, text|
|
40
|
+
performAction('wait_for_text', text, timeout)
|
41
|
+
end
|
42
|
+
|
35
43
|
Then /^I wait for the "([^\"]*)" button to appear$/ do |text|
|
36
44
|
performAction('wait_for_button', text)
|
37
45
|
end
|
@@ -40,6 +48,11 @@ Then /^I wait for the view with id "([^\"]*)" to appear$/ do |text|
|
|
40
48
|
performAction('wait_for_view_by_id', text)
|
41
49
|
end
|
42
50
|
|
51
|
+
Then /^I wait for the "([^\"]*)" view to appear$/ do |text|
|
52
|
+
performAction('wait_for_view', text)
|
53
|
+
end
|
54
|
+
|
55
|
+
|
43
56
|
Then /^I wait for the "([^\"]*)" screen to appear$/ do |text|
|
44
57
|
performAction('wait_for_screen', text)
|
45
58
|
end
|
@@ -47,3 +60,7 @@ end
|
|
47
60
|
Then /^I wait upto (\d+) seconds for the "([^\"]*)" screen to appear$/ do |timeout, text|
|
48
61
|
performAction('wait_for_screen', text, timeout)
|
49
62
|
end
|
63
|
+
|
64
|
+
Then /^I wait up to (\d+) seconds for the "([^\"]*)" screen to appear$/ do |timeout, text|
|
65
|
+
performAction('wait_for_screen', text, timeout)
|
66
|
+
end
|
@@ -5,6 +5,7 @@ import java.lang.reflect.Method;
|
|
5
5
|
import android.content.Context;
|
6
6
|
import android.os.Bundle;
|
7
7
|
import android.test.InstrumentationTestRunner;
|
8
|
+
import sh.calaba.instrumentationbackend.actions.HttpServer;
|
8
9
|
|
9
10
|
public class CalabashInstrumentationTestRunner extends InstrumentationTestRunner {
|
10
11
|
@Override
|
@@ -18,6 +19,10 @@ public class CalabashInstrumentationTestRunner extends InstrumentationTestRunner
|
|
18
19
|
} catch (Exception e) {
|
19
20
|
System.out.println("Calabash could not load Mono");
|
20
21
|
}
|
22
|
+
|
23
|
+
// Start the HttpServer as soon as possible in a not-ready state
|
24
|
+
HttpServer.instantiate();
|
25
|
+
|
21
26
|
super.onCreate(arguments);
|
22
27
|
}
|
23
28
|
}
|
@@ -12,13 +12,12 @@ public class InstrumentationBackend extends ActivityInstrumentationTestCase2 {
|
|
12
12
|
public static final String TARGET_PACKAGE = "#ACTIVITY_PACKAGE#"; //Set from Ant at compile time
|
13
13
|
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "#ACTIVITY_QUALIFIED_NAME#"; //Set from Ant at compile time
|
14
14
|
|
15
|
-
private static final String TAG = "
|
15
|
+
private static final String TAG = "InstrumentationBackend";
|
16
16
|
|
17
17
|
public static Instrumentation instrumentation;
|
18
18
|
public static Solo solo;
|
19
19
|
public static Actions actions;
|
20
|
-
|
21
|
-
|
20
|
+
|
22
21
|
private static Class getActivityClass() {
|
23
22
|
try {
|
24
23
|
return Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
|
@@ -45,18 +44,17 @@ public class InstrumentationBackend extends ActivityInstrumentationTestCase2 {
|
|
45
44
|
* Here to have JUnit3 start the instrumentationBackend
|
46
45
|
*/
|
47
46
|
public void testHook() throws Exception {
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
HttpServer httpServer = HttpServer.getInstance();
|
48
|
+
httpServer.setReady();
|
49
|
+
httpServer.waitUntilShutdown();
|
50
|
+
solo.finishOpenedActivities();
|
52
51
|
}
|
53
52
|
|
54
53
|
@Override
|
55
54
|
public void tearDown() throws Exception {
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
}
|
55
|
+
HttpServer httpServer = HttpServer.getInstance();
|
56
|
+
httpServer.stop();
|
57
|
+
|
60
58
|
System.out.println("Finishing");
|
61
59
|
try {
|
62
60
|
solo.finalize();
|
@@ -4,6 +4,9 @@ import java.io.ByteArrayInputStream;
|
|
4
4
|
import java.io.ByteArrayOutputStream;
|
5
5
|
import java.io.File;
|
6
6
|
import java.util.Properties;
|
7
|
+
import java.util.concurrent.locks.Condition;
|
8
|
+
import java.util.concurrent.locks.Lock;
|
9
|
+
import java.util.concurrent.locks.ReentrantLock;
|
7
10
|
|
8
11
|
import android.graphics.Bitmap;
|
9
12
|
import android.view.View;
|
@@ -15,12 +18,43 @@ import sh.calaba.org.codehaus.jackson.map.ObjectMapper;
|
|
15
18
|
import android.util.Log;
|
16
19
|
|
17
20
|
public class HttpServer extends NanoHTTPD {
|
18
|
-
private static final String TAG = "
|
19
|
-
|
20
|
-
|
21
|
+
private static final String TAG = "InstrumentationBackend";
|
22
|
+
private boolean running = true;
|
23
|
+
private boolean ready = false;
|
24
|
+
|
25
|
+
private final Lock lock = new ReentrantLock();
|
26
|
+
private final Condition shutdownCondition = lock.newCondition();
|
27
|
+
|
21
28
|
private final ObjectMapper mapper = createJsonMapper();
|
22
29
|
|
23
|
-
|
30
|
+
private static HttpServer instance;
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Creates and returns the singleton instance for HttpServer.
|
34
|
+
*
|
35
|
+
* Can only be called once. Otherwise, you'll get an IllegalStateException.
|
36
|
+
*/
|
37
|
+
public synchronized static HttpServer instantiate() {
|
38
|
+
if(instance != null) {
|
39
|
+
throw new IllegalStateException("Can only instantiate once!");
|
40
|
+
}
|
41
|
+
instance = new HttpServer();
|
42
|
+
return instance;
|
43
|
+
}
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Returns the singleton instance for HttpServer.
|
47
|
+
*
|
48
|
+
* If {@link #instantiate()} hasn't already been called, an IllegalStateException is thrown.
|
49
|
+
*/
|
50
|
+
public synchronized static HttpServer getInstance() {
|
51
|
+
if(instance == null) {
|
52
|
+
throw new IllegalStateException("Must be initialized!");
|
53
|
+
}
|
54
|
+
return instance;
|
55
|
+
}
|
56
|
+
|
57
|
+
private HttpServer() {
|
24
58
|
super(7102, new File("/"));
|
25
59
|
}
|
26
60
|
|
@@ -29,11 +63,23 @@ public class HttpServer extends NanoHTTPD {
|
|
29
63
|
System.out.println("URI: " + uri);
|
30
64
|
if (uri.endsWith("/ping")) {
|
31
65
|
return new NanoHTTPD.Response( HTTP_OK, MIME_HTML, "pong");
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
66
|
+
|
67
|
+
} else if (uri.endsWith("/kill")) {
|
68
|
+
lock.lock();
|
69
|
+
try {
|
70
|
+
running = false;
|
71
|
+
System.out.println("Stopping test server");
|
72
|
+
stop();
|
73
|
+
|
74
|
+
shutdownCondition.signal();
|
75
|
+
return new NanoHTTPD.Response( HTTP_OK, MIME_HTML, "Affirmative!");
|
76
|
+
} finally {
|
77
|
+
lock.unlock();
|
78
|
+
}
|
79
|
+
|
80
|
+
} else if ("/ready".equals(uri)) {
|
81
|
+
return new Response(HTTP_OK, MIME_HTML, Boolean.toString(ready));
|
82
|
+
|
37
83
|
|
38
84
|
} else if (uri.endsWith("/screenshot")) {
|
39
85
|
Bitmap bitmap;
|
@@ -80,11 +126,22 @@ public class HttpServer extends NanoHTTPD {
|
|
80
126
|
}
|
81
127
|
}
|
82
128
|
|
83
|
-
|
84
|
-
|
85
|
-
|
129
|
+
public void waitUntilShutdown() throws InterruptedException {
|
130
|
+
lock.lock();
|
131
|
+
try {
|
132
|
+
while(running) {
|
133
|
+
shutdownCondition.await();
|
134
|
+
}
|
135
|
+
} finally {
|
136
|
+
lock.unlock();
|
137
|
+
}
|
138
|
+
}
|
86
139
|
|
87
140
|
public static void log(String message) {
|
88
141
|
Log.i(TAG, message);
|
89
142
|
}
|
143
|
+
|
144
|
+
public void setReady() {
|
145
|
+
ready = true;
|
146
|
+
}
|
90
147
|
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
package sh.calaba.instrumentationbackend.actions.text;
|
2
|
+
|
3
|
+
import android.view.View;
|
4
|
+
import android.widget.EditText;
|
5
|
+
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
6
|
+
import sh.calaba.instrumentationbackend.Result;
|
7
|
+
import sh.calaba.instrumentationbackend.TestHelpers;
|
8
|
+
import sh.calaba.instrumentationbackend.actions.Action;
|
9
|
+
|
10
|
+
public class ClearTextById implements Action {
|
11
|
+
|
12
|
+
@Override
|
13
|
+
public Result execute(String... args) {
|
14
|
+
final View view = TestHelpers.getViewById(args[0]);
|
15
|
+
if(view == null) {
|
16
|
+
return new Result(false, "No view found with id: '" + args[0] + "'");
|
17
|
+
} else if (!(view instanceof EditText)) {
|
18
|
+
return new Result(false, "Expected EditText found: '" + view.getClass() + "'");
|
19
|
+
} else {
|
20
|
+
InstrumentationBackend.solo.clearEditText((EditText)view);
|
21
|
+
return Result.successResult();
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
@Override
|
26
|
+
public String key() {
|
27
|
+
return "clear_id_field";
|
28
|
+
}
|
29
|
+
|
30
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
package sh.calaba.instrumentationbackend.actions.text;
|
2
|
+
|
3
|
+
import android.view.View;
|
4
|
+
import android.widget.EditText;
|
5
|
+
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
6
|
+
import sh.calaba.instrumentationbackend.Result;
|
7
|
+
import sh.calaba.instrumentationbackend.TestHelpers;
|
8
|
+
import sh.calaba.instrumentationbackend.actions.Action;
|
9
|
+
|
10
|
+
public class EnterTextById implements Action {
|
11
|
+
|
12
|
+
@Override
|
13
|
+
public Result execute(String... args) {
|
14
|
+
final View view = TestHelpers.getViewById(args[1]);
|
15
|
+
if(view == null) {
|
16
|
+
return new Result(false, "No view found with id: '" + args[1] + "'");
|
17
|
+
} else if (!(view instanceof EditText)) {
|
18
|
+
return new Result(false, "Expected EditText found: '" + view.getClass() + "'");
|
19
|
+
} else {
|
20
|
+
InstrumentationBackend.solo.enterText((EditText)view, args[0]);
|
21
|
+
return Result.successResult();
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
@Override
|
26
|
+
public String key() {
|
27
|
+
return "enter_text_into_id_field";
|
28
|
+
}
|
29
|
+
|
30
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
package sh.calaba.instrumentationbackend.actions.view;
|
2
|
+
|
3
|
+
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
4
|
+
import sh.calaba.instrumentationbackend.Result;
|
5
|
+
import sh.calaba.instrumentationbackend.TestHelpers;
|
6
|
+
import sh.calaba.instrumentationbackend.actions.Action;
|
7
|
+
import android.view.View;
|
8
|
+
|
9
|
+
public class WaitForView implements Action {
|
10
|
+
|
11
|
+
@Override
|
12
|
+
public Result execute(String... args) {
|
13
|
+
String text = args[0];
|
14
|
+
long endTime = System.currentTimeMillis() + 60000;
|
15
|
+
while (System.currentTimeMillis() < endTime) {
|
16
|
+
if (InstrumentationBackend.solo.searchButton(text) || searchForViewWithContentDescription(text)) {
|
17
|
+
return Result.successResult();
|
18
|
+
} else {
|
19
|
+
try {
|
20
|
+
Thread.sleep(500);
|
21
|
+
} catch (InterruptedException e) {
|
22
|
+
return Result.fromThrowable(e);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
return new Result(false, "Timed out while waiting for view with text or contentDescription:'" + text + "'");
|
27
|
+
}
|
28
|
+
|
29
|
+
@Override
|
30
|
+
public String key() {
|
31
|
+
return "wait_for_view";
|
32
|
+
}
|
33
|
+
|
34
|
+
private boolean searchForViewWithContentDescription(String description) {
|
35
|
+
View view = TestHelpers.getViewByDescription(description);
|
36
|
+
if (view != null) {
|
37
|
+
return true;
|
38
|
+
} else {
|
39
|
+
return false;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
}
|
@@ -25,7 +25,8 @@ public class WaitForScreen implements Action {
|
|
25
25
|
int timeout = DEFAULT_TIMEOUT;
|
26
26
|
|
27
27
|
try {
|
28
|
-
|
28
|
+
// given seconds; want milliseconds
|
29
|
+
timeout = 1000 * Integer.parseInt(args[1]);
|
29
30
|
} catch (NumberFormatException e) {
|
30
31
|
return new Result(false, "Invalid timeout supplied. Should be an integer!");
|
31
32
|
}
|
@@ -46,4 +47,4 @@ public class WaitForScreen implements Action {
|
|
46
47
|
return "wait_for_screen";
|
47
48
|
}
|
48
49
|
|
49
|
-
}
|
50
|
+
}
|
@@ -10,13 +10,24 @@ public class WaitForText implements Action {
|
|
10
10
|
|
11
11
|
@Override
|
12
12
|
public Result execute(String... args) {
|
13
|
-
|
13
|
+
|
14
|
+
int timeout = 90 * 1000;
|
15
|
+
if (args.length > 1) { // a second argument is a timeout
|
16
|
+
try {
|
17
|
+
// the argument is in seconds but robotium takes milliseconds
|
18
|
+
timeout = 1000 * Integer.parseInt(args[1]);
|
19
|
+
} catch (NumberFormatException e) {
|
20
|
+
return new Result(false, "Invalid timeout supplied. Should be an integer.");
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
boolean timedOut = !InstrumentationBackend.solo.waitForText(args[0], 1, timeout);
|
14
25
|
if(timedOut) {
|
15
26
|
return new Result(false, "Time out while waiting for text:" + args[0]);
|
16
27
|
} else {
|
17
28
|
return Result.successResult();
|
18
29
|
}
|
19
|
-
|
30
|
+
|
20
31
|
}
|
21
32
|
|
22
33
|
@Override
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calabash-android
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 10
|
10
|
+
version: 0.2.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jonas Maturana Larsen
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-08-
|
18
|
+
date: 2012-08-13 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -60,6 +60,20 @@ dependencies:
|
|
60
60
|
version: "0"
|
61
61
|
type: :runtime
|
62
62
|
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: retriable
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
type: :runtime
|
76
|
+
version_requirements: *id004
|
63
77
|
description: "calabash-android drives tests for native and hybrid Android apps. "
|
64
78
|
email:
|
65
79
|
- jonas@lesspainful.com
|
@@ -171,10 +185,12 @@ files:
|
|
171
185
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java
|
172
186
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java
|
173
187
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java
|
188
|
+
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextById.java
|
174
189
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java
|
175
190
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java
|
176
191
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java
|
177
192
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java
|
193
|
+
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextById.java
|
178
194
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java
|
179
195
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByContentDescription.java
|
180
196
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByIndex.java
|
@@ -183,6 +199,7 @@ files:
|
|
183
199
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java
|
184
200
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java
|
185
201
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java
|
202
|
+
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/WaitForView.java
|
186
203
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/WaitForViewById.java
|
187
204
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java
|
188
205
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java
|