如何让JSObject或JSContext从Java运行applet?
我正在尝试自动化一些程序,其中包含一些链接点击一个Web然后通过一个applet,所以我所做的是通过Java发送一些HTTPRequest,直到我得到一个带有标签的HTML,通过JSoup,我提取所有参数和代码库等。因为我也想运行applet,我使用ClassLoader加载applet类,我设置了一个自定义存根,可以提供我之前提取的参数。
问题是这个applet与浏览器有一些javascript交互,所以在某些时候它会运行JSObject.getWindow(applet)来获取文档并进行js调用,这里就是我被困住的地方。我知道我必须能够提供一个应该实现JSContext的AppletContext,并且能够为这个JSObject提供它是浏览器提供它的窗口。但有可能嘲笑这样的事情吗?
答案 0 :(得分:1)
有一个偷偷摸摸的伎俩,首先创建一个interface
扩展AppletContext
和JSContext
private interface JSAwareAppletContext extends AppletContext, JSContext {
}
然后以某种方式嘲笑你有一个实例
final JSAwareAppletContext myAppletContext = //mock
现在,您可以模拟JSAwareAppletContext
上的实时连接内容,并从AppletStub
返回。
例如Mockito:
final JSAwareAppletContext appletContext = mock(JSAwareAppletContext.class);
final JSObject jsObject = mock(JSObject.class);
when(appletContext.getJSObject()).thenReturn(jsObject);
final AppletStub appletStub = mock(AppletStub.class);
when(appletStub.getAppletContext()).thenReturn(appletContext);