calabash-android 0.4.0.pre6 → 0.4.0.pre7
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/bin/calabash-android +7 -0
- data/bin/calabash-android-build.rb +1 -1
- data/bin/calabash-android-console.rb +1 -1
- data/bin/calabash-android-run.rb +1 -1
- data/calabash-android.gemspec +1 -0
- data/irbrc +2 -0
- data/lib/calabash-android/helpers.rb +4 -2
- data/lib/calabash-android/lib/TestServer.apk +0 -0
- data/lib/calabash-android/operations.rb +31 -22
- data/lib/calabash-android/version.rb +1 -1
- data/test-server/instrumentation-backend/.classpath +0 -1
- data/test-server/instrumentation-backend/antlr/UIQuery.g +11 -2
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java +4 -3
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/FranklyResult.java +95 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +7 -1
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java +15 -23
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/location/FakeGPSLocation.java +13 -10
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/CalabashChromeClient.java +136 -36
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpBodyHtml.java +38 -18
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpHtml.java +38 -16
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/EnterTextByCssSelector.java +94 -66
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteAsyncJavascript.java +55 -33
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteJavascript.java +54 -31
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptOperation.java +44 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +52 -27
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +39 -32
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java +56 -41
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java +50 -25
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +19 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/CompletedFuture.java +40 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/InvocationOperation.java +201 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Operation.java +7 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/PropertyOperation.java +56 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Query.java +144 -72
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQuery.tokens +15 -12
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQueryResultVoid.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java +38 -11
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryLexer.java +226 -109
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryParser.java +237 -84
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/PartialFutureList.java +100 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryAST.java +1 -1
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTClassName.java +26 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTWith.java +170 -102
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryEvaluator.java +54 -155
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryUtils.java +97 -2
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryVisibility.java +32 -0
- metadata +27 -5
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Query.java +0 -24
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Touch.java +0 -44
- data/test-server/instrumentation-backend/tests/sh/calaba/instrumentationbackend/query/tests/UIQueryTest.java +0 -134
@@ -1,50 +1,72 @@
|
|
1
1
|
package sh.calaba.instrumentationbackend.actions.webview;
|
2
2
|
|
3
|
+
import java.util.ArrayList;
|
3
4
|
import java.util.List;
|
5
|
+
import java.util.concurrent.Callable;
|
4
6
|
|
5
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
6
7
|
import sh.calaba.instrumentationbackend.Result;
|
7
8
|
import sh.calaba.instrumentationbackend.actions.Action;
|
9
|
+
import sh.calaba.instrumentationbackend.actions.webview.CalabashChromeClient.WebFuture;
|
10
|
+
import sh.calaba.instrumentationbackend.query.ast.UIQueryUtils;
|
8
11
|
import android.webkit.WebView;
|
9
12
|
|
10
13
|
public class ExecuteAsyncJavascript implements Action {
|
11
14
|
|
15
|
+
@SuppressWarnings({ "unchecked", "rawtypes" })
|
12
16
|
@Override
|
13
17
|
public Result execute(String... args) {
|
18
|
+
final String scriptCode = args[0];
|
19
|
+
List<WebFuture> webResults = (List<WebFuture>) UIQueryUtils.evaluateSyncInMainThread(new Callable() {
|
20
|
+
|
21
|
+
public Object call() throws Exception {
|
22
|
+
|
23
|
+
List<WebFuture> webResults = new ArrayList();
|
24
|
+
List<CalabashChromeClient> list = CalabashChromeClient.findAndPrepareWebViews();
|
25
|
+
if (list.isEmpty()) {
|
26
|
+
return webResults;
|
27
|
+
}
|
28
|
+
|
29
|
+
CalabashChromeClient ccc = list.get(0);
|
30
|
+
WebView webView = ccc.getWebView();
|
31
|
+
final String script = "javascript:(function() {"
|
32
|
+
+ " function cb(ret) {"
|
33
|
+
+ " prompt('calabash:'+ret);"
|
34
|
+
+ " }"
|
35
|
+
+ " try {"
|
36
|
+
+ " (function(returnValue) {"
|
37
|
+
+ scriptCode + ";"
|
38
|
+
+ " }(cb));"
|
39
|
+
+ " } catch (e) {"
|
40
|
+
+ " prompt('calabash:Exception: ' + e);"
|
41
|
+
+ " }"
|
42
|
+
+ "}())";
|
14
43
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
44
|
+
System.out.println("execute javascript: " + script);
|
45
|
+
|
46
|
+
webView.loadUrl(script);
|
47
|
+
webResults.add(ccc.getResult());
|
48
|
+
return webResults;
|
49
|
+
|
50
|
+
}
|
51
|
+
});
|
52
|
+
|
53
|
+
List<String> allResults = new ArrayList<String>(webResults.size());
|
54
|
+
boolean success = true;
|
55
|
+
for (WebFuture f : webResults) {
|
56
|
+
String result = f.getAsString();
|
57
|
+
allResults.add(result);
|
58
|
+
if (result.startsWith("Exception:")) {
|
59
|
+
success = false;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
if (allResults.size() == 0) {
|
64
|
+
return new Result(false, "No WebView found");
|
65
|
+
}
|
66
|
+
else {
|
67
|
+
return new Result(success, allResults);
|
68
|
+
}
|
19
69
|
|
20
|
-
CalabashChromeClient ccc = list.get(0);
|
21
|
-
WebView webView = ccc.getWebView();
|
22
|
-
final String script = "javascript:(function() {"
|
23
|
-
+ " function cb(ret) {"
|
24
|
-
+ " prompt('calabash:'+ret);"
|
25
|
-
+ " }"
|
26
|
-
+ " try {"
|
27
|
-
+ " (function(returnValue) {"
|
28
|
-
+ args[0] + ";"
|
29
|
-
+ " }(cb));"
|
30
|
-
+ " } catch (e) {"
|
31
|
-
+ " prompt('calabash:Exception: ' + e);"
|
32
|
-
+ " }"
|
33
|
-
+ "}())";
|
34
|
-
|
35
|
-
System.out.println("execute javascript: " + script);
|
36
|
-
|
37
|
-
webView.loadUrl(script);
|
38
|
-
|
39
|
-
String r = ccc.getResult();
|
40
|
-
System.out.println("javascript result: " + r);
|
41
|
-
|
42
|
-
boolean success = true;
|
43
|
-
if (r.startsWith("Exception:")) {
|
44
|
-
success = false;
|
45
|
-
}
|
46
|
-
|
47
|
-
return new Result(success, r);
|
48
70
|
}
|
49
71
|
|
50
72
|
@Override
|
@@ -1,48 +1,71 @@
|
|
1
1
|
package sh.calaba.instrumentationbackend.actions.webview;
|
2
2
|
|
3
|
+
import java.util.ArrayList;
|
3
4
|
import java.util.List;
|
5
|
+
import java.util.concurrent.Callable;
|
4
6
|
|
5
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
6
7
|
import sh.calaba.instrumentationbackend.Result;
|
7
8
|
import sh.calaba.instrumentationbackend.actions.Action;
|
9
|
+
import sh.calaba.instrumentationbackend.actions.webview.CalabashChromeClient.WebFuture;
|
10
|
+
import sh.calaba.instrumentationbackend.query.ast.UIQueryUtils;
|
8
11
|
import android.webkit.WebView;
|
9
12
|
|
10
13
|
public class ExecuteJavascript implements Action {
|
11
14
|
|
15
|
+
@SuppressWarnings({ "unchecked", "rawtypes" })
|
12
16
|
@Override
|
13
17
|
public Result execute(String... args) {
|
18
|
+
final String scriptCode = args[0];
|
19
|
+
List<WebFuture> webResults = (List<WebFuture>) UIQueryUtils.evaluateSyncInMainThread(new Callable() {
|
20
|
+
|
21
|
+
public Object call() throws Exception {
|
22
|
+
|
23
|
+
List<WebFuture> webResults = new ArrayList();
|
24
|
+
List<CalabashChromeClient> list = CalabashChromeClient.findAndPrepareWebViews();
|
25
|
+
if (list.isEmpty()) {
|
26
|
+
return webResults;
|
27
|
+
}
|
28
|
+
|
29
|
+
CalabashChromeClient ccc = list.get(0);
|
30
|
+
WebView webView = ccc.getWebView();
|
31
|
+
final String script = "javascript:(function() {"
|
32
|
+
+ " function cb(ret) {"
|
33
|
+
+ " prompt('calabash:'+ret);"
|
34
|
+
+ " }"
|
35
|
+
+ " try {"
|
36
|
+
+ " (function(returnValue) {"
|
37
|
+
+ scriptCode + ";"
|
38
|
+
+ " }(cb));"
|
39
|
+
+ " } catch (e) {"
|
40
|
+
+ " prompt('calabash:Exception: ' + e);"
|
41
|
+
+ " }"
|
42
|
+
+ "}())";
|
14
43
|
|
15
|
-
|
16
|
-
if (list.isEmpty()) {
|
17
|
-
return new Result(false, "No WebView component found");
|
18
|
-
}
|
19
|
-
|
20
|
-
CalabashChromeClient ccc = list.get(0);
|
21
|
-
WebView webView = ccc.getWebView();
|
22
|
-
String script = "javascript:(function() {"
|
23
|
-
+ " var r;"
|
24
|
-
+ " try {"
|
25
|
-
+ " r = (function() {"
|
26
|
-
+ args[0] + ";"
|
27
|
-
+ " }());"
|
28
|
-
+ " } catch (e) {"
|
29
|
-
+ " r = 'Exception: ' + e;"
|
30
|
-
+ " }"
|
31
|
-
+ " prompt('calabash:'+r);"
|
32
|
-
+ "}())";
|
33
|
-
|
34
|
-
System.out.println("execute javascript: " + script);
|
35
|
-
webView.loadUrl(script);
|
36
|
-
|
37
|
-
String r = ccc.getResult();
|
38
|
-
System.out.println("javascript result: " + r);
|
39
|
-
|
40
|
-
boolean success = true;
|
41
|
-
if (r.startsWith("Exception:")) {
|
42
|
-
success = false;
|
43
|
-
}
|
44
|
+
System.out.println("execute javascript: " + script);
|
44
45
|
|
45
|
-
|
46
|
+
webView.loadUrl(script);
|
47
|
+
webResults.add(ccc.getResult());
|
48
|
+
return webResults;
|
49
|
+
|
50
|
+
}
|
51
|
+
});
|
52
|
+
|
53
|
+
List<String> allResults = new ArrayList<String>(webResults.size());
|
54
|
+
boolean success = true;
|
55
|
+
for (WebFuture f : webResults) {
|
56
|
+
String result = f.getAsString();
|
57
|
+
allResults.add(result);
|
58
|
+
if (result.startsWith("Exception:")) {
|
59
|
+
success = false;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
if (allResults.size() == 0) {
|
64
|
+
return new Result(false, "No WebView found");
|
65
|
+
}
|
66
|
+
else {
|
67
|
+
return new Result(success, allResults);
|
68
|
+
}
|
46
69
|
}
|
47
70
|
|
48
71
|
@Override
|
@@ -0,0 +1,44 @@
|
|
1
|
+
package sh.calaba.instrumentationbackend.actions.webview;
|
2
|
+
|
3
|
+
import sh.calaba.instrumentationbackend.query.Operation;
|
4
|
+
|
5
|
+
public class JavaScriptOperation implements Operation {
|
6
|
+
|
7
|
+
public final String script;
|
8
|
+
public final String arg;
|
9
|
+
|
10
|
+
public JavaScriptOperation(String script, String args) {
|
11
|
+
this.script = script;
|
12
|
+
this.arg = args;
|
13
|
+
}
|
14
|
+
|
15
|
+
@SuppressWarnings("unchecked")
|
16
|
+
@Override
|
17
|
+
public Object apply(Object o) {
|
18
|
+
throw new UnsupportedOperationException("asd");
|
19
|
+
/*
|
20
|
+
Map<String, Object> domEl = (Map<String, Object>) o;
|
21
|
+
|
22
|
+
WebView webView = (WebView) domEl.get("webView");
|
23
|
+
|
24
|
+
domEl.remove("class");
|
25
|
+
domEl.remove("html");
|
26
|
+
domEl.remove("webView");
|
27
|
+
|
28
|
+
String elJson = QueryHelper.toJsonString(domEl);
|
29
|
+
|
30
|
+
|
31
|
+
WebFuture asyncRes = QueryHelper.executeAsyncJavascriptInWebviews(webView, this.script,
|
32
|
+
elJson, this.arg);
|
33
|
+
return asyncRes.getAsString();
|
34
|
+
*/
|
35
|
+
}
|
36
|
+
|
37
|
+
@Override
|
38
|
+
public String getName() {
|
39
|
+
return "JSOp[script="+this.script+"]";
|
40
|
+
}
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
}
|
@@ -1,40 +1,65 @@
|
|
1
1
|
package sh.calaba.instrumentationbackend.actions.webview;
|
2
2
|
|
3
3
|
|
4
|
-
import
|
4
|
+
import java.util.ArrayList;
|
5
|
+
import java.util.List;
|
6
|
+
import java.util.concurrent.Callable;
|
7
|
+
|
5
8
|
import sh.calaba.instrumentationbackend.Result;
|
6
|
-
import sh.calaba.instrumentationbackend.TestHelpers;
|
7
9
|
import sh.calaba.instrumentationbackend.actions.Action;
|
10
|
+
import sh.calaba.instrumentationbackend.actions.webview.CalabashChromeClient.WebFuture;
|
11
|
+
import sh.calaba.instrumentationbackend.query.ast.UIQueryUtils;
|
8
12
|
import android.webkit.WebView;
|
9
13
|
|
10
|
-
|
14
|
+
@Deprecated
|
11
15
|
public class PressByCssSelector implements Action {
|
12
16
|
|
13
|
-
@
|
17
|
+
@SuppressWarnings({ "unchecked", "rawtypes" })
|
18
|
+
@Override
|
14
19
|
public Result execute(final String... args) {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
20
|
+
List<WebFuture> webResults = (List<WebFuture>) UIQueryUtils.evaluateSyncInMainThread(new Callable() {
|
21
|
+
|
22
|
+
public Object call() throws Exception {
|
23
|
+
|
24
|
+
List<WebFuture> webResults = new ArrayList();
|
25
|
+
for (CalabashChromeClient ccc : CalabashChromeClient.findAndPrepareWebViews()) {
|
26
|
+
WebView webView = ccc.getWebView();
|
27
|
+
|
28
|
+
webView.loadUrl("javascript:(function() {" +
|
29
|
+
"var element = document.querySelector(\"" + args[0] + "\");" +
|
30
|
+
"if (element != null) {" +
|
31
|
+
" var oEvent = document.createEvent ('MouseEvent');" +
|
32
|
+
" oEvent.initMouseEvent('click', true, true,window, 1, 1, 1, 1, 1, false, false, false, false, 0, element);" +
|
33
|
+
" element.dispatchEvent( oEvent );" +
|
34
|
+
" prompt('calabash:true');" +
|
35
|
+
" return;" +
|
36
|
+
"}" +
|
37
|
+
"prompt('calabash:false');" +
|
38
|
+
"})()");
|
39
|
+
|
40
|
+
webResults.add(ccc.getResult());
|
41
|
+
}
|
42
|
+
return webResults;
|
43
|
+
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
List<String> allResults = new ArrayList<String>(webResults.size());
|
48
|
+
boolean success = false;
|
49
|
+
for (WebFuture f : webResults) {
|
50
|
+
String result = f.getAsString();
|
51
|
+
allResults.add(result);
|
52
|
+
if ("true".equals(result)) {
|
53
|
+
success = true;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
if (allResults.size() == 0) {
|
58
|
+
return new Result(false, "No WebView found");
|
59
|
+
}
|
60
|
+
else {
|
61
|
+
return new Result(success, allResults);
|
62
|
+
}
|
38
63
|
}
|
39
64
|
|
40
65
|
@Override
|
@@ -4,36 +4,17 @@ import java.io.BufferedReader;
|
|
4
4
|
import java.io.IOException;
|
5
5
|
import java.io.InputStream;
|
6
6
|
import java.io.InputStreamReader;
|
7
|
-
import java.lang.reflect.Field;
|
8
7
|
import java.util.HashMap;
|
9
8
|
import java.util.List;
|
10
9
|
import java.util.Map;
|
11
|
-
import java.util.concurrent.atomic.AtomicReference;
|
12
10
|
|
13
11
|
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
12
|
+
import sh.calaba.instrumentationbackend.actions.webview.CalabashChromeClient.WebFuture;
|
14
13
|
import sh.calaba.org.codehaus.jackson.map.ObjectMapper;
|
15
14
|
import android.webkit.WebView;
|
16
15
|
|
17
16
|
public class QueryHelper {
|
18
17
|
|
19
|
-
public static String executeJavascriptInWebview(String scriptPath, String... args) {
|
20
|
-
|
21
|
-
String script = readJavascriptFromAsset(scriptPath);
|
22
|
-
|
23
|
-
for (String arg : args) {
|
24
|
-
script = script.replaceFirst("%@", arg);
|
25
|
-
}
|
26
|
-
|
27
|
-
final String myScript = script;
|
28
|
-
List<CalabashChromeClient> webViews = CalabashChromeClient.findAndPrepareWebViews();
|
29
|
-
|
30
|
-
for (CalabashChromeClient ccc : webViews) {
|
31
|
-
WebView webView = ccc.getWebView();
|
32
|
-
webView.loadUrl("javascript:calabash_result = " + myScript + ";prompt('calabash:' + calabash_result);");
|
33
|
-
return ccc.getResult();
|
34
|
-
}
|
35
|
-
throw new RuntimeException("No webviews found");
|
36
|
-
}
|
37
18
|
|
38
19
|
@SuppressWarnings("unchecked")
|
39
20
|
public static Map<String, Object> findFirstVisibleRectangle(List<HashMap<String,Object>> elements) {
|
@@ -45,25 +26,36 @@ public class QueryHelper {
|
|
45
26
|
return (Map<String, Object>)elements.get(0);
|
46
27
|
}
|
47
28
|
|
48
|
-
public static float
|
29
|
+
public static float translateCoordToScreen(int offset, float scale, Object point) {
|
30
|
+
return offset + ((Number)point).floatValue() *scale;
|
31
|
+
}
|
32
|
+
|
33
|
+
public static Map<String, Object> translateRectToScreenCoordinates(WebView webView, Map<String, Object> rectangle) {
|
49
34
|
try {
|
50
35
|
|
51
|
-
CalabashChromeClient calabashChromeClient = CalabashChromeClient.findAndPrepareWebViews().get(0);
|
52
|
-
|
53
|
-
WebView webView = calabashChromeClient.getWebView();
|
54
|
-
|
55
|
-
|
56
36
|
float scale = webView.getScale();
|
57
37
|
|
58
|
-
|
59
|
-
System.out.println("scale: " + scale);
|
60
38
|
int[] webviewLocation = new int[2];
|
61
39
|
webView.getLocationOnScreen(webviewLocation);
|
40
|
+
//center_x, center_y
|
41
|
+
//left, top, width, height
|
42
|
+
float center_x = translateCoordToScreen(webviewLocation[0], scale,
|
43
|
+
rectangle.get("center_x"));
|
44
|
+
float center_y = translateCoordToScreen(webviewLocation[1], scale,
|
45
|
+
rectangle.get("center_y"));
|
46
|
+
|
47
|
+
float x = translateCoordToScreen(webviewLocation[0], scale, rectangle.get("left"));
|
48
|
+
float y = translateCoordToScreen(webviewLocation[0], scale, rectangle.get("top"));
|
49
|
+
Map<String,Object> result = new HashMap<String, Object>(rectangle);
|
62
50
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
51
|
+
result.put("x",x);
|
52
|
+
result.put("y",y);
|
53
|
+
result.put("center_x",center_x);
|
54
|
+
result.put("center_y",center_y);
|
55
|
+
|
56
|
+
return result;
|
57
|
+
|
58
|
+
|
67
59
|
} catch (Exception e) {
|
68
60
|
throw new RuntimeException(e);
|
69
61
|
}
|
@@ -94,4 +86,19 @@ public class QueryHelper {
|
|
94
86
|
}
|
95
87
|
return script.toString();
|
96
88
|
}
|
89
|
+
|
90
|
+
public static WebFuture executeAsyncJavascriptInWebviews(WebView webView,
|
91
|
+
String scriptPath, String selector, String type) {
|
92
|
+
|
93
|
+
String script = readJavascriptFromAsset(scriptPath);
|
94
|
+
|
95
|
+
script = script.replaceFirst("%@", selector);
|
96
|
+
script = script.replaceFirst("%@", type);
|
97
|
+
|
98
|
+
CalabashChromeClient chromeClient = CalabashChromeClient.prepareWebView(webView);
|
99
|
+
webView.loadUrl("javascript:calabash_result = " + script + ";prompt('calabash:' + calabash_result);");
|
100
|
+
return chromeClient.getResult();
|
101
|
+
}
|
102
|
+
|
103
|
+
|
97
104
|
}
|