AOSP和Chromium的Android WebViewTest
2014-01-26 14:40
288 查看
AOSP的在$android4.2/frameworks/base/tests/WebViewTests/目录下,可用eclipse导入工程。
就几个文件。最下面的是Activity,没啥特别,就是在LinearLayout里面放了WebView。
JavaBridgeTestBase是所有TestCase的基类,继承了ActivityInstrumentationTestCase2,也就是此测试需要命令行启动,使用Anrdoid的Instrument做测试。
public class JavaBridgeTestBase extends ActivityInstrumentationTestCase2<WebViewStubActivity>
共有7个case,从文件名知,AOSP的WebViewTest主要测试JavaBridge,也就是Java和Javascript的交互。即通过WebView.addJavascriptInterface函数注入Object到js,在js里再通过此Object传出一些数据,保证数据是对的。
基本流程:
1.在UI thread对WebView注入Object,设置WebViewClient,加载网页,阻塞知道加载完成。网页是一段基本文档。
例如webView.loadData("<!DOCTYPE html><title></title>", "text/html", null);
2.加载完成后会在测试线程收到信号,然后再加载一段JS,这段js会通过注入的Object返回数据
3.判断数据是否符合预期
Chromium的在$chromium/src/android_webview/javatests/ ,同样可用eclipse导入。
util子包是工具类,提供资源(图片,文本,icon等)、js Object,js模拟点击,视频源等。
TestCase有43个:
AndroidScrollIntegrationTest.java
AndroidViewIntegrationTest.java
ArchiveTest.java
AwContentsClientAutoLoginTest.java
AwContentsClientFaviconTest.java
AwContentsClientFullScreenVideoTest.java
AwContentsClientGetDefaultVideoPosterTest.java
AwContentsClientGetVideoLoadingProgressViewTest.java
AwContentsClientOnFormResubmissionTest.java
AwContentsClientOnScaleChangedTest.java
AwContentsClientShouldInterceptRequestTest.java
AwContentsClientShouldOverrideUrlLoadingTest.java
AwContentsClientVisitedHistoryTest.java
AwContentsRenderTest.java
AwContentsTest.java
AwLayoutSizerTest.java
AwQuotaManagerBridgeTest.java
AwScrollOffsetManagerTest.java
AwSettingsTest.java
AwTestBase.java
AwViewportTest.java
AwZoomTest.java
ClearHistoryTest.java
ClientAddMessageToConsoleTest.java
ClientOnPageFinishedTest.java
ClientOnReceivedErrorTest.java
ContentViewMiscTest.java
CookieManagerStartupTest.java
CookieManagerTest.java
FullScreenVideoTestAwContentsClient.java
GeolocationTest.java
GetTitleTest.java
HttpAuthDatabaseTest.java
LoadDataWithBaseUrlTest.java
LoadUrlTest.java
NavigationHistoryTest.java
SaveRestoreStateTest.java
StandaloneAwQuotaManagerBridgeTest.java
TestAwContentsClient.java
UserAgentTest.java
WebKitHitTestTest.java
WebViewAsynchronousFindApisTest.java
WebViewFindApisTestBase.java
WebViewModalDialogOverrideTest.java
AwTestBase是所有case的基类,同样继承ActivityInstrumentationTestCase2。与AOSP不同的是,此测试的目标是WebView的接口。从case来看,并不是完整的接口测试,大多数估计是因为出现过bug而存在,保证以后不再有bug。
基本流程:
1.UI thread设置好WebView,启动测试
2.运行测试流程,判断测试结果。结果通过assertTrue,assertFalse等Instrument的方式做判断。
举一个例子就懂了,ClearHistoryTest:
1.让WebView连续loadUrl 3次,加载不同的3个网页
2.网页后退一次,测试当前可前进(canGoForward接口返回true),可后退(canGoBack接口返回true)
3.调用clearHistory,测试当前不可前进(canGoForward接口返回false),不可后退(canGoBack接口返回false)
以上均由框架提供测试线程和UI线程的同步等待,即测试线程发出指令让UI线程执行操作后阻塞,UI线程操作完并得到结果,然后在测试线程中判断。每个接口都必须添加对应的sync函数,如HistoryUtils.goBackSync,HistoryUtils.canGoBackOnUiThread,HistoryUtils.canGoForwardOnUiThread。
其余case从类名大致能知道要测什么。
总结:4个字——怎么那么麻烦!
转载请注明出处:http://blog.csdn.net/hursing
就几个文件。最下面的是Activity,没啥特别,就是在LinearLayout里面放了WebView。
JavaBridgeTestBase是所有TestCase的基类,继承了ActivityInstrumentationTestCase2,也就是此测试需要命令行启动,使用Anrdoid的Instrument做测试。
public class JavaBridgeTestBase extends ActivityInstrumentationTestCase2<WebViewStubActivity>
共有7个case,从文件名知,AOSP的WebViewTest主要测试JavaBridge,也就是Java和Javascript的交互。即通过WebView.addJavascriptInterface函数注入Object到js,在js里再通过此Object传出一些数据,保证数据是对的。
基本流程:
1.在UI thread对WebView注入Object,设置WebViewClient,加载网页,阻塞知道加载完成。网页是一段基本文档。
例如webView.loadData("<!DOCTYPE html><title></title>", "text/html", null);
2.加载完成后会在测试线程收到信号,然后再加载一段JS,这段js会通过注入的Object返回数据
3.判断数据是否符合预期
Chromium的在$chromium/src/android_webview/javatests/ ,同样可用eclipse导入。
util子包是工具类,提供资源(图片,文本,icon等)、js Object,js模拟点击,视频源等。
TestCase有43个:
AndroidScrollIntegrationTest.java
AndroidViewIntegrationTest.java
ArchiveTest.java
AwContentsClientAutoLoginTest.java
AwContentsClientFaviconTest.java
AwContentsClientFullScreenVideoTest.java
AwContentsClientGetDefaultVideoPosterTest.java
AwContentsClientGetVideoLoadingProgressViewTest.java
AwContentsClientOnFormResubmissionTest.java
AwContentsClientOnScaleChangedTest.java
AwContentsClientShouldInterceptRequestTest.java
AwContentsClientShouldOverrideUrlLoadingTest.java
AwContentsClientVisitedHistoryTest.java
AwContentsRenderTest.java
AwContentsTest.java
AwLayoutSizerTest.java
AwQuotaManagerBridgeTest.java
AwScrollOffsetManagerTest.java
AwSettingsTest.java
AwTestBase.java
AwViewportTest.java
AwZoomTest.java
ClearHistoryTest.java
ClientAddMessageToConsoleTest.java
ClientOnPageFinishedTest.java
ClientOnReceivedErrorTest.java
ContentViewMiscTest.java
CookieManagerStartupTest.java
CookieManagerTest.java
FullScreenVideoTestAwContentsClient.java
GeolocationTest.java
GetTitleTest.java
HttpAuthDatabaseTest.java
LoadDataWithBaseUrlTest.java
LoadUrlTest.java
NavigationHistoryTest.java
SaveRestoreStateTest.java
StandaloneAwQuotaManagerBridgeTest.java
TestAwContentsClient.java
UserAgentTest.java
WebKitHitTestTest.java
WebViewAsynchronousFindApisTest.java
WebViewFindApisTestBase.java
WebViewModalDialogOverrideTest.java
AwTestBase是所有case的基类,同样继承ActivityInstrumentationTestCase2。与AOSP不同的是,此测试的目标是WebView的接口。从case来看,并不是完整的接口测试,大多数估计是因为出现过bug而存在,保证以后不再有bug。
基本流程:
1.UI thread设置好WebView,启动测试
2.运行测试流程,判断测试结果。结果通过assertTrue,assertFalse等Instrument的方式做判断。
举一个例子就懂了,ClearHistoryTest:
1.让WebView连续loadUrl 3次,加载不同的3个网页
2.网页后退一次,测试当前可前进(canGoForward接口返回true),可后退(canGoBack接口返回true)
3.调用clearHistory,测试当前不可前进(canGoForward接口返回false),不可后退(canGoBack接口返回false)
以上均由框架提供测试线程和UI线程的同步等待,即测试线程发出指令让UI线程执行操作后阻塞,UI线程操作完并得到结果,然后在测试线程中判断。每个接口都必须添加对应的sync函数,如HistoryUtils.goBackSync,HistoryUtils.canGoBackOnUiThread,HistoryUtils.canGoForwardOnUiThread。
其余case从类名大致能知道要测什么。
总结:4个字——怎么那么麻烦!
转载请注明出处:http://blog.csdn.net/hursing
相关文章推荐
- [chromium]恭喜帖:经过几周的努力,竟然搞出一个跨Android版本的WebView中间件(多进程架构)
- android webview 遇到的问题:external/chromium/net/disk_cache/stat_hub.cc:216:
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Chromium on Android: 分析Chromium WebView的软件渲染方式
- Chromium on Android: 理解Chromium WebView的绘制模型
- Android WebView J Should not happen: no rect-based-test nodes found
- Android Chromium WebView学习启动篇
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Android WebView加载Chromium动态库的过程分析
- android4.4 webview chromium与chromium for android硬件渲染的异同
- Caused by java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.google.android.webview-1/lib/arm/libwebviewchromium.so" is 32-bit instead of 64-bit
- Chromium Graphics: Android L平台上WebView的变化及其对浏览器厂商的影响分析
- Android Chromium for WebView代码结构
- 理解WebKit和Chromium: 基于Chromium内核的Android WebView
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Android Chromium WebView html js 开发系列
- Android Chromium for WebView代码结构
- 基于Chromium内核的Android WebView
- 编译android5.0.2源码到libwebviewchromium.so时停止很长时间发生错误
- Android 4.4 WebView重大改动:由Chromium驱动 支持HTML5和CSS新特性