我希望在InstrumentationTest中构建一个自定义WebVIEw,然后检查是否已完成正确的初始化.
我的自定义WebVIEw:
public class InteractiveWebVIEw extends WebVIEw{ public InteractiveWebVIEw(final Context context) { super(context); initialise(context); } public InteractiveWebVIEw(final Context context, final AttributeSet attrs) { super(context, attrs); initialise(context); } public InteractiveWebVIEw(final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); initialise(context); } private voID initialise(final Context context) { if (!isInEditMode()) { if (Build.VERSION.SDK_INT >= 19) { setLayerType(VIEw.LAYER_TYPE_HARDWARE, null); } else { setLayerType(VIEw.LAYER_TYPE_SOFTWARE, null); } setScrollbarStyle(WebVIEw.SCRolLbarS_INSIDE_OVERLAY); setFocusable(true); setFocusableIntouchMode(true); requestFocus(VIEw.FOCUS_DOWN); WebSettings settings = getSettings(); settings.setJavaScriptEnabled(true); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setSupportMultiplewindows(false); settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); settings.setSupportZoom(false); settings.setUseWIDeVIEwPort(false); String databasePath = context.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); settings.setDatabasePath(databasePath); } }}
InstrumentationTest:
@RunWith(AndroIDJUnit4.class)@SmallTestpublic class InteractiveWebVIEwTest{ @Test public voID constructors() { Context baseContext = InstrumentationRegistry.getContext(); InteractiveWebVIEw webVIEw1 = new InteractiveWebVIEw(baseContext); InteractiveWebVIEw webVIEw2 = new InteractiveWebVIEw(baseContext, null); InteractiveWebVIEw webVIEw3 = new InteractiveWebVIEw(baseContext, null, 1); }}
正如你所看到的,我现在还没有断言任何东西.
我面临的问题是,当我调用第一个WebVIEw构造函数时,我收到以下错误:
java.lang.NullPointerException: Attempt to read from fIEld 'androID.os.MessageQueue androID.os.Looper.mQueue' on a null object referenceat androID.os.Handler.<init>(Handler.java:229)at androID.os.Handler.<init>(Handler.java:137)at org.chromium.base.ThreadUtils.setUiThread(ThreadUtils.java:39)at com.androID.webvIEw.chromium.WebVIEwChromiumFactoryProvIDer.ensureChromiumStartedLocked(WebVIEwChromiumFactoryProvIDer.java:197)at com.androID.webvIEw.chromium.WebVIEwChromiumFactoryProvIDer.startYourEngines(WebVIEwChromiumFactoryProvIDer.java:294)at com.androID.webvIEw.chromium.WebVIEwChromium.init(WebVIEwChromium.java:218)at androID.webkit.WebVIEw.<init>(WebVIEw.java:606)at androID.webkit.WebVIEw.<init>(WebVIEw.java:542)at androID.webkit.WebVIEw.<init>(WebVIEw.java:525)at androID.webkit.WebVIEw.<init>(WebVIEw.java:512)at androID.webkit.WebVIEw.<init>(WebVIEw.java:502)at androID.mobileconnect.gsma.com.library.vIEw.InteractiveWebVIEw.<init>(InteractiveWebVIEw.java:17)
当我点击第17行的InteractiveWebVIEw链接时,它会转到该类中的构造函数并指向super(context);呼叫.
我已经尝试了许多其他方法,例如将InstrumentationTest扩展为ActivityInstrumentationTestCase2类型,以防它的上下文出现为null但我仍然得到相同的错误.我已经多次搜索过这个问题,但似乎无法根据我发现的问题解决问题.
我出错的任何想法?
解决方法:
通过模拟InteractiveWebVIEw解决了这个问题,但确保它是在主UI线程上运行的Runnable中构建的:
getActivity().runOnUiThread(new Runnable(){ @OverrIDe public voID run() { // Given InteractiveWebVIEw interactiveWebVIEw = new InteractiveWebVIEw(getActivity()); .... .... .... .... }}
总结 以上是内存溢出为你收集整理的android – Instrumentation测试WebView全部内容,希望文章能够帮你解决android – Instrumentation测试WebView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)