calabash-android 0.4.0.pre6 → 0.4.0.pre7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|