我已经能够使用 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。
绑定(bind)一些 Java 对象,以便它可以从带有 WebView 的 Javascript 中调用:
addJavascriptInterface(javaObjectExposed, "JSname")
通过以下方式在现有页面中强制执行 javascript
WebView.loadUrl("javascript:window.JSname.passData("some data from page");");
关于javascript - 从 WebView 中获取内容在单元测试 Android 中,使用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353688/