我已经能够使用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
}
});
}
答案 0 :(得分:1)
您可以在加载的页面中注入javascript,就像在桌面浏览器中执行它一样 - 通过内联javascript输入导航栏。
绑定一些Java对象,以便可以使用WebView从Javascript调用它:
addJavascriptInterface(javaObjectExposed, "JSname")
强制执行现有页面中的javascript
WebView.loadUrl("javascript:window.JSname.passData("some data from page");");