您的位置:首页 > 移动开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: