javascript - 从 WebView 中获取内容在单元测试 Android 中,使用 javascript

标签 javascript android unit-testing

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

请帮忙。

谢谢

帕维尔

编辑: 只需添加代码即可显示我在做什么:

是的,我明白了,但我的问题是我正试图以这种方式在测试用例中做到这一点:

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

        }
    });


}    

最佳答案

您可以像在桌面浏览器中一样在加载的页面中注入(inject) javascript - 通过在导航栏中输入内联 javascript。

  1. 绑定(bind)一些 Java 对象,以便它可以从带有 WebView 的 Javascript 中调用:

    addJavascriptInterface(javaObjectExposed, "JSname")
    
  2. 通过以下方式在现有页面中强制执行 javascript

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

关于javascript - 从 WebView 中获取内容在单元测试 Android 中,使用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353688/

相关文章:

java - 用于在 JavaScript 中查找 Java 格式字符串的正则表达式

python - GeoDjango 和混合器。 'PointField'没有属性 '_meta'

javascript - 如何在网站的移动设备上录制音频?

javascript - 外部文件中无法识别的 JS 命令

javascript - 没有模板的 AngularJS $location

javascript - 简单的 prop 示例,但未找到 props

android - Kotlin 中 globalScope 、 corountineScope 和 viewScope 的区别

使用我自己的模型作为参数执行单元测试时出现 java.lang.AssertionError

c++ - 为什么我的矩阵旋转没有通过我学校的单元测试?

Select的Javascript项目方法