从WebView获取内容在单元测试Android中,使用java脚本

时间:2011-09-08 19:54:32

标签: javascript android unit-testing

我已经能够使用javascript和loadUrl()方法从WebView获取内容,该方法指定了从注入WebView的javascript字符串调用的接口。问题是这只适用于loadUrl()方法时存在于WebView客户端中的onPageFinished()方法中。我想要做的是我想从WebView中获取内容(内容已经加载)。 WebView在一个活动检测测试用例中,我可以使用findAll()方法,并且工作正常。出于某种原因,我无法使用loadUrl()并获得所需的行为(这是在界面的帮助下注入javascript并从WebView中获取内容)。

提供帮助。

谢谢

的Pawel

编辑: 只需添加代码即可显示我正在做的事情:

是的我明白了,但我的问题是我试图在测试用例中这样做:

public void testWebView() throws Exception {

    solo.sleep(3000); // wait for views to load on the screen
    WebView a=null;
    ArrayList<View> views = solo.getCurrentViews(); // I am using solo object to get views for the screen currently loaded
    for(View s:views)
    {
        if (s instanceof WebView)
        {
            a = (WebView)s; // this is where I get my WebView
        }
    }

    Instrumentation inst = getInstrumentation();

    inst.runOnMainSync(new Runnable()
    {
        public void run()
        {
         int d =a.findAll("something"); // this method runs fine on the object and i get the desired result

         WebSettings settings = a.getSettings(); 
         settings.setJavaScriptEnabled(true);

         a.loadUrl("javascript:document.location = document.getElementById('google').getAttribute('href')"); // this javascript is never executed and that is my problem

        }
    });


}    

1 个答案:

答案 0 :(得分:1)

您可以在加载的页面中注入javascript,就像在桌面浏览器中执行它一样 - 通过内联javascript输入导航栏。

  1. 绑定一些Java对象,以便可以使用WebView从Javascript调用它:

    addJavascriptInterface(javaObjectExposed, "JSname")
    
  2. 强制执行现有页面中的javascript

    WebView.loadUrl("javascript:window.JSname.passData("some data from page");");